本文演示如何使用DBMS_LOGMNR系统包进行归档日志挖掘,因为在生产环境中我们建议提前开启归档日志,当无法通过sqllog分析某时段执行的SQL内容时,可以使用此方法找到已执行过的DDL和DML等操作,通过获取的结果进行更深入的分析。
目前 DBMS_LOGMNR包只支持对归档日志进行分析,相关注意事项如下:
(1)仅支持对本实例产生的归档日志进行分析挖掘。 如果将生产环境的实例日志拷贝到本地进行分析,添加归档日志文件这一步会报错:打开文件失败。
(2)DMDPC集群使用 DBMS_LOGMNR 时,DBMS_LOGMNR.ADD_LOGFILE 只能添加同一个节点的多个日志进行分析,不支持同时分析不同节点的日志。
(3)被分析的归档需要提前开启逻辑附加日志,即RLOG_APPEND_LOGIC <> 0,否则解析出的结果为空。
归档日志挖掘的操作方法
第 1 步 配置环境
使用包内的过程和函数之前,如果还未创建过系统包,请先调用系统过程开启相关功能:
SP_CREATE_SYSTEM_PACKAGES (1,'DBMS_LOGMNR');
(1)配置本地归档(若之前已配置 此处可忽略)
(2)开启逻辑附加日志功能, 可在线修改
SP_SET_PARA_VALUE(1,'RLOG_APPEND_LOGIC',1);
由于该分析工具只能解析开了逻辑附加日志之后的内容,这里再执行一些测试语句,用于观察分析结果:
-开启附加日志
SP_SET_PARA_VALUE(1,'RLOG_APPEND_LOGIC',1);
-创建测试表
create table TEST(X INT);
-修改字段类型
ALTER TABLE TEST MODIFY x VARCHAR(20);
-添加测试数据
INSERT INTO TEST SELECT '测试数据';
INSERT INTO TEST SELECT '测试数据1';
INSERT INTO TEST SELECT '测试数据2';
commit;
-删除数据
delete from TEST where X='测试数据';
commit;
-修改数据
update TEST set X= 'this is ' || X;
commit;
-查询
select * from TEST;
-创建备份表
create table TEST_bak as select * from TEST;
-删除表结构
drop table TEST;
第 2 步 添加归档日志文件
(1) 查询有哪些归档日志
select name , first_time , next_time , first_change# , next_change# from
v$archived_log;
询结果如下:
(2)添加一个或多个需要分析的归档日志文件
注意: 这里只能添加本机的归档日志文件,不能把生产库的归档拿到本地目录,用自己的测试库分析。否则这里会报错:"打开文件失败"
dbms_logmnr.add_logfile('/data/arch/ARCHIVE_LOCAL1_0x41FC4FAA_EP0_2026-09-17_23-49-33.log');
如要查看通过 ADD_LOGFILE 添加的归档日志文件,可以通过动态视图 V$LOGMNR_LOGS 进行查询,如下:
select low_scn, next_scn, low_time, high_time, log_id, filename from v$logmnr_logs;
查询结果如下:
第 3 步 启动归档日志文件分析
dbms_logmnr.start_logmnr(
Options=>2128 ,
Starttime=>to_date('2026-09-20 21:30:00','YYYY-MM-DD HH24:MI:SS') ,
Endtime=>to_date('2026-09-20 23:50:00','YYYY-MM-DD HH24:MI:SS')
);
如要查看归档日志文件的分析结果,可以通过动态视图 V$LOGMNR_CONTENTS 进行查询,如下:
select operation_code , scn, sql_redo , timestamp ,seg_owner, table_name from
V$LOGMNR_CONTENTS
where SQL_REDO is not null
order by TIMESTAMP ASC;
注意:分析结果只能在当前会话中查看,并且事务提交后就查不到了。
因此建议用create table as ....对结果提前保存。
第 4 步 终止归档日志文件分析
执行该终止语句后,上述分析结果也无法再查询,因此建议先按上述方法保存以后,再结束分析。
dbms_logmnr.end_logmnr( );
相关系统包说明
关于DBMS_LOGMNR相关系统包的详细说明,可参考官方文档: https://eco.dameng.com/document/dm/zh-cn/pm/dbms_logmnr-package.html
文章
阅读量
获赞
