Oracle logmnr 日志挖掘一例,使用logmnr来挖掘日志中的信息
1. 执行删除操作
sql> drop table t ;
table dropped.
sql> select * from tab ;
tname tabtype clusterid
—————————— ——- ———-
bin$wwgjjd0ucrdgraamkrcwyg==$0 table
tts synonym
ttss synonym
sql> purge table t;
table purged.
使用logmnr来挖掘日志中的信息
2. 查看操作目录
sql> show parameter utl_file_dir
name type value
———————————— ———– ——————————
utl_file_dir string
没有指定,,那么指定一个文件夹用来存放logmnr的字典文件
-bash-3.00$ mkdir /gwrs/logmnr
sql> alter system set utl_file_dir=’/gwrs/logmnr’ scope=spfile ;
system altered.
重启一下数据库
-bash-3.00$ srvctl stop database -d prod
-bash-3.00$ srvctl start database -d prod
3. 建立字典文件
sql> execute dbms_logmnr_d.build (‘dict.ora’,’/gwrs/logmnr’,dbms_logmnr_d.store_in_flat_file);
pl/sql procedure successfully completed.
4. 分析日志
将可能相关的日志都加入分析
begin
dbms_logmnr.add_logfile(logfilename=>’/gwrs/prod/archivelog/2012_06_01/o1_mf_1_35_7wjflz93_.arc’,options=>dbms_logmnr.new) ;
dbms_logmnr.add_logfile(logfilename=>’/gwrs/prod/archivelog/2012_06_01/o1_mf_2_31_7wjfngtq_.arc’,options=>dbms_logmnr.addfile) ;
dbms_logmnr.add_logfile(logfilename=>’/gwrs/prod/archivelog/2012_06_01/o1_mf_2_32_7wjfnkbr_.arc’,options=>dbms_logmnr.addfile) ;
dbms_logmnr.add_logfile(logfilename=>’/gwrs/prod/archivelog/2012_06_01/o1_mf_1_36_7wjgg4dh_.arc’,options=>dbms_logmnr.addfile) ;
dbms_logmnr.add_logfile(logfilename=>’/gwrs/prod/archivelog/2012_06_01/o1_mf_1_37_7wjlnoxr_.arc’,options=>dbms_logmnr.addfile) ;
dbms_logmnr.add_logfile(logfilename=>’/gwrs/prod/archivelog/2012_06_01/o1_mf_1_38_7wjmwbcs_.arc’,options=>dbms_logmnr.addfile) ;
dbms_logmnr.add_logfile(logfilename=>’/gwrs/prod/archivelog/2012_06_01/o1_mf_2_33_7wjmwjfj_.arc’,options=>dbms_logmnr.addfile) ;
dbms_logmnr.start_logmnr(dictfilename=>’/gwrs/logmnr/dict.ora’);
end ;
/
5. 分析操作记录
注意, 这里的logmnr记录日志只在本次会话中生效,如果需要在其他会话分析这些日志需要创建一个表来保存它
create table logmnr_tmp tablespace users as select * from v$logmnr_contents ;
接下来就可以分析日志了。
sql> col seg_name for a10
sql> col sql_redo for a50
sql> col seg_owner for a10
sql> col table_name for a10
select scn , timestamp , seg_owner, seg_name , table_name , sql_redo from logmnr_tmp where table_name=’t’ ;
scn timestamp seg_owner seg_name table_name sql_redo
———- ——— ———- ———- ———- ————————————————–
1823865 01-jun-12 dex t t alter table “dex”.”t” rename to “bin$wwgjjd0ucrdgr
aamkrcwyg==$0″ ;
1823868 01-jun-12 dex t t drop table t as “bin$wwgjjd0ucrdgraamkrcwyg==$0”
;
1823953 01-jun-12 dex t t purge table “bin$wwgjjd0ucrdgraamkrcwyg==$0” ;
如果发现username , os_username , machine_name 等为unknow 或者 null 的状态 这是一个bug 当你重复执行同一个logmnr使用相同的参数的时候就可能会出现这种状况(第一次不会)bug:10129774
链接地址 https://support.oracle.com/csp/main/article?cmd=show&type=bug&id=10129774
打补丁 10129774
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1929519.html