暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ORACLE日志挖掘LogMiner使用方法

IT那活儿 2024-08-19
312
点击上方“IT那活儿”公众号--专注于企业全栈运维技术分享,不管IT什么活儿,干就完了!!!   

  
建议在plsql-dev的sql windows 进行文中操作(注意:只能在同一个sql windows里边进行操作,因为v$logmnr_contents 是基于session的),当然也可以在sqlplus里边进行文中操作,只不过sqlplus的格式化输出不是很整齐,所以推荐在plsql-dev的sql windows 进行操作。

以下操作请尽量用sys用户来执行,sys密码忘记的话,也可以用具有dba角色的用户来执行:

Step1 手动切换当前redo日志

alter system archive log current;

和客户确定需要进行日志挖掘的大体时间点,并查询在那时间段内产生的归档日志有哪些。

alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';
select thread#,name,completion_time from v$archived_log where completion_time >TO_DATE('2022-03-15 10:00:00','YYYY-MM-DD HH24:MI:SS') order by completion_time;
添加archive redo log:

将下面logfilename后面的文件替换为具体的归档日志文件,挖多少加多少:
begin
sys.dbms_logmnr.add_logfile(logfilename=>'+DG_FRA/aaa/archivelog/2022_03_15/thread_1_seq_2856', options=>sys.dbms_logmnr.addfile);
sys.dbms_logmnr.add_logfile(logfilename=>'+DG_FRA/aaa/archivelog/2022_03_15/thread_1_seq_2857', options=>sys.dbms_logmnr.addfile);
sys.dbms_logmnr.add_logfile(logfilename=>'+DG_FRA/aaa/archivelog/2022_03_15/thread_1_seq_2858', options=>sys.dbms_logmnr.addfile);
end;

说明:+DG_FRA/aaa/archivelog/2022_03_15/thread_1_seq_2856 这个来源于v$archived_log视图,该视图还有一列是completion_time,该列的意思是该sequence号对应的redolog 归档完成的时间。
Step2 开始分析
begin
sys.dbms_logmnr.start_logmnr(options=>sys.dbms_logmnr.dict_from_online_catalog);
end;
Step3 检查分析结果
select * from  v$logmnr_contents where sql_redo like '%table_name%'
---这个where条件,就是你自己要填写查找的内容。
---也可以写当时的sql语句如delte from xxx 等关键字,注意日志挖掘挖出来的并不是和执行的sql语句一模一样
举例:
前台执行delete from scott.nn ;语句挖出来后会将是很多sql。
如:

另外,v$logmnr_contents有一列scn是表示发起命令时的scn号,可方便用于误删除数据的恢复操作。

Step4 结束分析
begin
sys.dbms_logmnr.end_logmnr;
end;

或者直接退出会话。

关于补充日志:

另外,只有在已经打开supplemental log 的情况下,会记录执行sql的OS_USERNAME,USERNAME,MACHINE_NAME,数据库默认不打开,所以这三列信息不进行记录。
知识点:打开补充日志命令
alter database add SUPPLEMENTAL log data;

END


本文作者:张连坤(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论