Oracle LogMiner分析归档日志
目录:
- Oracle LogMiner分析归档日志
- 一、准备测试环境
- 1、开启数据库归档日志
- 2、打开数据库最小附加日志
- 3、设置当前session时间日期格式
- 二、创建测试数据
- 1、创建数据
- 2、数据落盘
- 三、日志发掘测试
- 挖掘在上次归档的Redo Log File
- 1.确定最近归档的Redo Log File
- 2.指定要分析的Redo Log File的文件
- 3.启动LogMiner
- 4.查询V$LOGMNR_CONTENTS 视图
- 5.其他常用查询sql
- 6.结束LogMiner会话
Oracle LogMiner分析归档日志
Oracle LogMiner是Oracle数据库的一部分,使您能够通过SQL接口查询在线和存档的重做日志文件。重做日志文件包含有关数据库上活动历史记录的信息。
参考官方文档:Using LogMiner to Analyze Redo Log Files (oracle.com)
一、准备测试环境
- 该测试环境为Oracle19c单实例
- 该文章仅分析了redo log file被归档后归档日志
- 该文章后续会继续补充挖掘其他信息示例
1、开启数据库归档日志
--关闭所有节点
shutdown immediate;--启动一个节点至mount状态
startup mount;--修改数据库为archivelog mode
alter database archivelog;--查看数据库归档状态
archive log list;--打开当前实例数据库
alter database open;--启动其他节点数据库
startup;
2、打开数据库最小附加日志
在生成LogMiner分析的日志文件之前,必须启用附加日志记录。
启用附加日志记录时,需要在重做流中记录附加信息,以使重做日志文件中的信息更加详细。所以必须至少启用最少的补充日志记录
执行以下SQL:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
确认是否启用:
SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;
如果查询返回值“YES”或“IMPLICIT”,则启用最小补充日志记录。参见“Supplemental Logging”有关附加日志记录的完整信息。
3、设置当前session时间日期格式
以下示例可能需要SCN或时间范围来挖掘日志信息,所有最好提前设置当前session时间日期输出格式
SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'yyyy-mm-dd hh24:mi:ss';
二、创建测试数据
1、创建数据
--使用普通用户shuaige创建测试数据
--创建测试表
SHUAIGE@orcl>
CREATE TABLE shuaige.test_tab
(ID number(32),NAME1 varchar2(30),NAME2 varchar2(30),NAME3 varchar2(30),ins_time date DEFAULT SYSDATE
)
tablespace shuaige_dat;Table created.--添加表注释
SHUAIGE@orcl> COMMENT ON TABLE shuaige.test_tab IS '测试表';Comment created.--添加主键和索引
SHUAIGE@orcl>
alter table test_tab add constraint shuaige.pk_test_tab primary key(ID)
using index3 tablespace shuaige_dat;Table altered.--创建更新数据时间触发器
SHUAIGE@orcl>
CREATE TRIGGER shuaige.test_tab_triggerbefore INSERT OR UPDATE ON shuaige.test_tab
FOR EACH ROW
BEGINIF UPDATING then:NEW.INS_TIME := SYSDATE;END IF;
END;9 /Trigger created.--批量插入数据
SHUAIGE@orcl>
beginfor i in 1 .. 10 loopINSERT INTO "SHUAIGE"."TEST_TAB" ("ID", "NAME1", "NAME2", "NAME3")VALUES (i, 'name1_'|| i, 'name2_' || i, 'name3_' || i);end loop;
end;
/SHUAIGE@orcl> commit;Commit complete.
2、数据落盘
将redo log中的数据归档,否则数据没有落盘,日志挖掘结果会未空
--切换至SYS用户执行
SYS@orcl> alter system switch logfile;System altered.
三、日志发掘测试
挖掘在上次归档的Redo Log File
检查数据库修改历史的最简单方法是在源数据库中进行挖掘,并使用online catalog来翻译重做redo log files。此示例演示如何使用 LogMiner 进行最简单的分析。
此示例查找数据库生成的最后归档重做日志中包含的所有修改(假设该数据库不是 Oracle Real Application Clusters (Oracle RAC)数据库)。
1.确定最近归档的Redo Log File
此示例假设知道要挖掘最近归档的Redo Log File
SYS@orcl>
SELECT NAME FROM V$ARCHIVED_LOG2 WHERE FIRST_TIME = (SELECT MAX(FIRST_TIME) FROM V$ARCHIVED_LOG);NAME
--------------------------------------------------------------------------------------
/u01/app/oracle/product/19.3.0/dbhome_1/dbs/arch1_21_1130854043.dbf
2.指定要分析的Redo Log File的文件
指定步骤1中查询返回的重做日志文件。该列表将包含一个重做日志文件。
SYS@orcl>
EXECUTE DBMS_LOGMNR.ADD_LOGFILE( -LOGFILENAME => '/u01/app/oracle/product/19.3.0/dbhome_1/dbs/arch1_21_1130854043.dbf', -OPTIONS => DBMS_LOGMNR.NEW);PL/SQL procedure successfully completed.SYS@orcl>
3.启动LogMiner
启动 LogMiner 并指定要使用的字典,或添加其他条件
SYS@orcl>
EXECUTE DBMS_LOGMNR.START_LOGMNR(-OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);PL/SQL procedure successfully completed.
若想分组DML语句提交事务,使用如下示例:
EXECUTE DBMS_LOGMNR.START_LOGMNR( -OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + -DBMS_LOGMNR.COMMITTED_DATA_ONLY);若想格式化输出SQL,使用如下示例:
EXECUTE DBMS_LOGMNR.START_LOGMNR(-OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + -DBMS_LOGMNR.COMMITTED_DATA_ONLY + -DBMS_LOGMNR.PRINT_PRETTY_SQL);若想按时间范围过滤输出,使用如下示例:
EXECUTE DBMS_LOGMNR.START_LOGMNR(-STARTTIME => '2023-03-10 09:00:00', -ENDTIME => '2023-03-10 11:00:00', -OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + -DBMS_LOGMNR.COMMITTED_DATA_ONLY + -DBMS_LOGMNR.PRINT_PRETTY_SQL);
4.查询V$LOGMNR_CONTENTS 视图
输出按照 DML 语句的执行顺序显示它们; 因此事务可能相互交错。
该示例截取了与手动创建测试表和数据部分返回值内容
SYS@orcl> select username,scn,timestamp,sql_redo from v$logmnr_contents where username = 'SHUAIGE';USERNAME
------------------------------------------------------------------------------------------------------------------------SCN TIMESTAMP
---------- -------------------
SQL_REDO
------------------------------------------------------------------------------------------------------------------------SHUAIGE4989509 2023-03-10 10:36:38
CREATE TABLE test_tab
(ID number(32),NAME1 varchar2(30),NAME2 varchar2(30),NAME3 varchar2(30),ins_time date DEFAULT SYSDATE
)
tablespace shuaige_dat;SHUAIGE4989558 2023-03-10 10:37:00
COMMENT ON TABLE test_tab IS '测试表';SHUAIGE4989561 2023-03-10 10:37:00
commit;SHUAIGE4989580 2023-03-10 10:37:05
set transaction read write;SHUAIGE4989584 2023-03-10 10:37:05
CREATE UNIQUE INDEX "SHUAIGE"."PK_TEST_TAB" on "SHUAIGE"."TEST_TAB"("ID")tablespace shuaige_dat NOPARALLEL;SHUAIGE4989588 2023-03-10 10:37:05
alter table test_tab add constraint pk_test_tab primary key(ID)
using index
tablespace shuaige_dat;SHUAIGE4989591 2023-03-10 10:37:05
set transaction read write;SHUAIGE4989592 2023-03-10 10:37:05
commit;SHUAIGE4989593 2023-03-10 10:37:05
set transaction read write;SHUAIGE4989595 2023-03-10 10:37:05
commit;SHUAIGE4989634 2023-03-10 10:37:17
CREATE TRIGGER test_tab_triggerbefore INSERT OR UPDATE ON test_tab
FOR EACH ROW
BEGINIF UPDATING then:NEW.INS_TIME := SYSDATE;END IF;
END;;SHUAIGE4989654 2023-03-10 10:37:21
set transaction read write;SHUAIGE4989655 2023-03-10 10:37:21
commit;SHUAIGE4989657 2023-03-10 10:37:21
set transaction read write;SHUAIGE4989657 2023-03-10 10:37:21
insert into "SHUAIGE"."TEST_TAB"("ID","NAME1","NAME2","NAME3","INS_TIME") values ('1','name1_1','name2_1','name3_1',TO_D
ATE('2023-03-10 10:37:21', 'YYYY-MM-DD HH24:MI:SS'));SHUAIGE4989657 2023-03-10 10:37:21
insert into "SHUAIGE"."TEST_TAB"("ID","NAME1","NAME2","NAME3","INS_TIME") values ('2','name1_2','name2_2','name3_2',TO_D
ATE('2023-03-10 10:37:21', 'YYYY-MM-DD HH24:MI:SS'));SHUAIGE4989657 2023-03-10 10:37:21
insert into "SHUAIGE"."TEST_TAB"("ID","NAME1","NAME2","NAME3","INS_TIME") values ('3','name1_3','name2_3','name3_3',TO_D
ATE('2023-03-10 10:37:21', 'YYYY-MM-DD HH24:MI:SS'));SHUAIGE4989657 2023-03-10 10:37:21
insert into "SHUAIGE"."TEST_TAB"("ID","NAME1","NAME2","NAME3","INS_TIME") values ('4','name1_4','name2_4','name3_4',TO_D
ATE('2023-03-10 10:37:21', 'YYYY-MM-DD HH24:MI:SS'));SHUAIGE4989657 2023-03-10 10:37:21
insert into "SHUAIGE"."TEST_TAB"("ID","NAME1","NAME2","NAME3","INS_TIME") values ('5','name1_5','name2_5','name3_5',TO_D
ATE('2023-03-10 10:37:21', 'YYYY-MM-DD HH24:MI:SS'));SHUAIGE4989657 2023-03-10 10:37:21
insert into "SHUAIGE"."TEST_TAB"("ID","NAME1","NAME2","NAME3","INS_TIME") values ('6','name1_6','name2_6','name3_6',TO_D
ATE('2023-03-10 10:37:21', 'YYYY-MM-DD HH24:MI:SS'));SHUAIGE4989657 2023-03-10 10:37:21
insert into "SHUAIGE"."TEST_TAB"("ID","NAME1","NAME2","NAME3","INS_TIME") values ('7','name1_7','name2_7','name3_7',TO_D
ATE('2023-03-10 10:37:21', 'YYYY-MM-DD HH24:MI:SS'));SHUAIGE4989657 2023-03-10 10:37:21
insert into "SHUAIGE"."TEST_TAB"("ID","NAME1","NAME2","NAME3","INS_TIME") values ('8','name1_8','name2_8','name3_8',TO_D
ATE('2023-03-10 10:37:21', 'YYYY-MM-DD HH24:MI:SS'));SHUAIGE4989657 2023-03-10 10:37:21
insert into "SHUAIGE"."TEST_TAB"("ID","NAME1","NAME2","NAME3","INS_TIME") values ('9','name1_9','name2_9','name3_9',TO_D
ATE('2023-03-10 10:37:21', 'YYYY-MM-DD HH24:MI:SS'));SHUAIGE4989657 2023-03-10 10:37:21
insert into "SHUAIGE"."TEST_TAB"("ID","NAME1","NAME2","NAME3","INS_TIME") values ('10','name1_10','name2_10','name3_10',
TO_DATE('2023-03-10 10:37:21', 'YYYY-MM-DD HH24:MI:SS'));SHUAIGE4989658 2023-03-10 10:37:21
commit;
5.其他常用查询sql
--查询用户名、SCN号、时间戳、SQL_REDO语句(按用户名)
select username,scn,timestamp,sql_redo FROM V$LOGMNR_CONTENTS WHERE username = 'SHUAIGE';--查询用户名、SCN号、时间戳、SQL_REDO语句(按表名)
select username,scn,timestamp,sql_redo FROM V$LOGMNR_CONTENTS where seg_name='TEST_TAB';--查询用户名、SCN号、时间戳、SQL_REDO语句(按时间戳)
select username,scn,timestamp,sql_redo FROM V$LOGMNR_CONTENTS where timestamp > to_date('2023-03-10 08:00:00','yyyy-mm-dd hh24:mi:ss');----------------------------------------------------------------------------------------------
--官方方式在V$LOGMNR_CONTENT视图查询SQ_REDO语句和XID
SELECT username AS USR, (XIDUSN || '.' || XIDSLT || '.' || XIDSQN) AS XID, SQL_REDO FROM V$LOGMNR_CONTENTS;--官方方式在V$LOGMNR_CONTENT视图查询SQL_REDO、SQL_UNDO语句和XID
SELECT username AS USR, (XIDUSN || '.' || XIDSLT || '.' || XIDSQN) AS XID, SQL_REDO, SQL_UNDOFROM V$LOGMNR_CONTENTS;
若添加sql_undo字段,查询结果将把undo表空间的回滚语句抓出来,如果是误操作,可以根据该sql恢复数据
6.结束LogMiner会话
SYS@orcl> EXECUTE DBMS_LOGMNR.END_LOGMNR();PL/SQL procedure successfully completed.SYS@orcl>
相关文章:
Oracle LogMiner分析归档日志
目录:Oracle LogMiner分析归档日志一、准备测试环境1、开启数据库归档日志2、打开数据库最小附加日志3、设置当前session时间日期格式二、创建测试数据1、创建数据2、数据落盘三、日志发掘测试挖掘在上次归档的Redo Log File1.确定最近归档的Redo Log File2.指定要分…...
趣味三角——第15章——傅里叶定理
第15章 傅里叶定理(Fourier’s Theorem) Fourier, not being noble, could not enter the artillery, although he was a second Newton. (傅立叶出生并不高贵,因此按当时的惯例进不了炮兵部队,虽然他是第二个牛顿。) —Franois Jean Dominique Arag…...
市场营销的核心是什么?
之所以写下「市场营销的核心是什么?」这篇文章,是因为这几天刚读完了《经理人参阅:市场营销》这本书。作为一个有着近十年工作经验的市场营销从业人员,看完这本书也产生了很多新的想法,也想记录一下,遂成此…...
c/cpp - 多线程/进程 多进程
c/cpp - 多线程/进程 多进程多进程创建多进程进程等待多进程 宏观上 两个进程完全并发的 父子进程具有互相独立的进程空间 父进程结束,不影响子进程的执行 创建多进程 #include <sys/types.h> #include <unistd.h> #include <stdio.h>int main()…...
MySQL必知必会 | 存储过程、游标、触发器
使用存储过程 存储过程 简单来说就是为了以后的使用而保存的一条或多条MySQL语句的集合。 我觉得就是封装了一组sql语句 为什么需要存储过程(简单来说就是,简单、安全、高性能 通过把处理封装在容易使用的单元中,简化复杂操作所有开发人员…...
优化Facebook广告ROI的数据驱动方法:从投放到运营
“投放广告并不是最终的目的,关键在于如何最大程度地利用数据驱动的方法来提高广告投放的回报率(ROI)”Facebook广告是现代数字营销中最为常见和重要的广告形式之一。但是,要让Facebook广告真正发挥作用,需要通过数据驱…...
动态规划入门经典问题讲解
最近开始接触动态规划问题,以下浅谈(或回顾)一下这些问题的求解过程。解题思路对于动态规划问题,由于最终问题的求解需要以同类子问题作为基础,故需要定义一个dp数组(一维或二维)来记录问题求解…...
快速入门深度学习1(用时1h)
速通《动手学深度学习》1写在最前面0.内容与结构1.深度学习简介1.1 问题引入1.2 思路:逆向思考1.3 跳过1.4 特点1.5 小结2.预备知识(MXNet版本,学错了。。。。)2.1 获取和运行本书的代码2.2 数据操作2.2.1 略过2.2.2 小结2.3 自动…...
PaddleOCR关键信息抽取(KIE)的训练(SER训练和RE训练)错误汇总
1.SER训练报错: SystemError: (Fatal) Blocking queue is killed because the data reader raises an exception 1.1.问题描述 在执行训练任务的时候报错 单卡训练 python3 tools/train.py -c train_data/my_data/ser_vi_layoutxlm_xfund_zh.yml错误信息如下: T…...
信息收集之搜索引擎
Google Hacking 也可以用百度,不过谷歌的搜索引擎更强大 site 功能:搜索指定域名的网页内容,可以用来搜索子域名、跟此域名相关的内容 示例: site:zhihu.com 搜索跟zhihu.com相关的网页“web安全” site:zhihu.com 搜索zhihu…...
Flutter(四)布局类组件
目录布局类组件简介布局原理与约束线性布局(Row和Column)弹性布局流式布局(Wrap、Flow)层叠布局(Stack、Positioned)对齐与相对定位(Align)Align和Stack对比Center组件LayoutBuilder…...
【黑马】Java基础从入门到起飞目录合集
视频链接: Java入门到起飞(上部):BV17F411T7AoJava入门到起飞(下部):BV1yW4y1Y7Ms 学习时间: 2023/02/01 —— 2023/03/09断断续续的学习,历时大概37天,完结撒…...
PMP考前冲刺3.10 | 2023新征程,一举拿证
题目1-2:1.在最近的一次耗时四周的迭代中,赫克托尔所在的敏捷团队刚完成了10 个用户故事点的开发、测试和发布,那么团队的速度是?A. 10B. 4C. 5D.402.产品负责人奥佩,倾向于在短周期内看到工作产品的新版本,…...
JavaScript Math常用方法
math是JavaScript的一个内置对象,它提供了一些数学属性和方法,可以对数字进行计算(用于Number类型)。 math和其他全局对象不同,它不是一个构造器,math的所有方法和属性都是静态的,直接使用并传入…...
【C++】模板进阶
文章目录一、非类型模板参数1、非类型模板参数2、C11 中的 array 类二、模板的特化1、模板特化的概念2、函数模板特化3、类模板特化3.1 全特化3.2 偏特化三、模板的分离编译四、模板总结一、非类型模板参数 1、非类型模板参数 模板参数分为类型形参与非类型形参,类…...
三板斧解决leetcode的链表题
在《波奇学单链表》中我们提到单链表的两个特点单向性。头节点尾节点的特殊性导致分类讨论的情况。如何看单链表?让我们简化成下图cur表示当前节点,下图表示cur移动,圆圈表示值用哨兵卫节点(新的头节点)和把尾节点看成NULL来把头尾节点一般化…...
全生命周期的云原生安全框架
本博客地址:https://security.blog.csdn.net/article/details/129423036 一、全生命周期的云原生安全框架 如图所示: 二、框架说明 在上图中,我们从两个维度描述各个安全机制,横轴是开发和运营阶段,细分为编码、测试…...
【本地网站上线】ubuntu搭建web站点,并内网穿透发布公网访问
【本地网站上线】ubuntu搭建web站点,并内网穿透发布公网访问前言1. 本地环境服务搭建2. 局域网测试访问3. 内网穿透3.1 ubuntu本地安装cpolar3.2 创建隧道3.3 测试公网访问4. 配置固定二级子域名4.1 保留一个二级子域名4.2 配置二级子域名4.3 测试访问公网固定二级子…...
电脑怎么重装系统?教你轻松掌握这些方法
重新安装计算机系统有两种原因:一种是计算机系统可以正常使用,但是电脑比较卡,为了提高它的运行速度,所以想要通过重新安装系统来解决这个问题;另一种原因是计算机系统文件丢失,系统出现蓝屏,或者黑屏的情况…...
leetcode-每日一题-2379(简单,字符串)
久违的简单题......给你一个长度为 n 下标从 0 开始的字符串 blocks ,blocks[i] 要么是 W 要么是 B ,表示第 i 块的颜色。字符 W 和 B 分别表示白色和黑色。给你一个整数 k ,表示想要 连续 黑色块的数目。每一次操作中,你可以选择…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关
在水泥厂的生产流程中,工业自动化网关起着至关重要的作用,尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关,为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多,其中不少设备采用Devicenet协议。Devicen…...
