Logminer的使用步骤:
1)先确定是否设置了UTL_FILE_DIR参数。
以sys用户登录系统后,执行show parameter utl_file_dir查看是否有值。如果没有,设置该参数,该参数不能在线修改:
SQL> alter system set utl_file_dir='/export/home/oracle/app/oracle/oradata/logmnr' scope=spfile;
系统已更改。
然后重启DB:
SQL>shutdown immediate;
SQL>startup;
2)导出DB的数据字典到一个文件中。
SQL> exec dbms_logmnr_d.build(dictionary_filename=>'$file', dictionary_location=>'$dir');
其中:$file是存储数据字典的文件名,可以任意取;$dir是存放$file的目录,需要和设置的UTL_FILE_DIR参数一致。
如果不导出数据字典,则在分析日志文件后,得到的语句中不能显示对象名,而只能显示16进制的东西。如:
不能显示:INSERT INTO emp(name, salary) VALUES ('John Doe', 50000);
而显示:insert into Object#2581(col#1, col#2) values (hextoraw('4a6f686e20446f65'),hextoraw('c306'));"
3)新建需要分析的log文件列表。
SQL> exec dbms_logmnr.add_logfile(logfilename=>'$logfile',options=>dbms_logmnr.new);
其中:$logfile是需要分析的log文件。
如果还需要添加其他的log文件,则:
SQL> exec dbms_logmnr.add_logfile(logfilename=>'$logfile1',options=>dbms_logmnr.addfile);
如果要从列表中删除log文件,则:
SQL> exec dbms_logmnr.add_logfile(logfilename=>'$logfile1',options=>dbms_logmnr.removefile);
4)分析log。
SQL> exec dbms_logmnr.start_logmnr(dictfilename=>'$file');
其中:$file为存放数据字典的文件的全路径。也就是第2步的$dir$file。
可以只分析部分log文件,可以按照SCN和time来指定需要分析的log的范围。
5)查看log的分析结果。
分析结果可以从v$logmnr_contents中查处。几个比较关键的字段有operation,seg_name,sql_redo和sql_undo,它们分别表明了DML语句的操作类型,操作对象,具体的操作SQL和恢复该操作得SQL。
需要注意的是,对于象truncate和drop这样的DDL语句是无法恢复的,因为它们操作的数据不写redo log。
另外,虽然从v$logmnr_contents中我们可以查到sql_redo和sql_undo,但并不表示redo log中存放的就是这些SQL语句。Redo log中存放的是被修改的数据块在修改前和修改后的数据,从这些数据中,推导出了sql_redo和sql_undo。
[@more@]来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11422417/viewspace-996169/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/11422417/viewspace-996169/