微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Oracle11g使用logmnr(logminer)分析online log and archive log

我们在执行delete,insert,update的语句时,有时间会误操作,将数据更新错误,有时数据错误后,想知道是什么语句和什么时间执行了什么样的sql,这样就需要从历史的日志中将执行过的sql抓取出来进行分析,在oracle中logmnr是非常方便的可以从日志文件提取对应的执行sql列表;

为了分析online log和archive log我们首先需要知道这些日志文件的存在物理路径,这时可以通过查询v$logfile来获取到online日志的路径和文件名对应sql:
select * from v$logfile;

查询v$archived_log表可以知道归档日志的路径及文件名:

select * from v$archived_log;

查到online log的文件和archived log文件后,即可登录sqlplus 进行日志的分析了,分析共以下几步:

(1) 操作系统命令提示符下执行:

sqlplus /nolog

(2) sqlplus命令符下执行:
connect / as sysdba;由于logmnr对应的包中认执行权限为dba,因此可以直接用dba来执行相应的分析命令,当然也可以使用grant将对应包及对象的执行权限符给某个用户,这样也可以使用该用户登录oracle数据库,执行相应的分析命令;

(3)exec dbms_logmnr.add_logfile(logfilename=>'&logPathFile',options=>dbms_logmnr.new);

--将日志文件加到logmnr中,注意logmnr是基于session的,因此如果退出当前登陆用户,则对应的分析结果丢失,需要重新执行一遍操作;

(4)exec dbms_logmnr.add_logfile(logfilename=>'&logPathFile',options=>dbms_logmnr.addfile); --继续往logmnr中添加日志文件,原来我想试一下这个add_logfile是否支持*添加批量文件呢,结果不好使.

(5) exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog); --开始执行分析

(6) select timestamp,sql_redo,sql_undo from v$logmnr_contents where username='SCott'and table_name='T_TEST'; --查询v$logmnr_contents来查询分析结果;

(7) exec dbms_logmnr.end_logmnr;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐