分类: Oracle
2008-08-04 18:41:05
问题描述:
今天用户的某一个表的字段不知道由谁UPDATE了,使得该字段全部值都相同.要查询什么时候执行了,和谁执行了操作.再次用到了Logmnr.
1.在init.ora初始化参数文件中,指定数据字典文件的位置,也就是添加一个参数UTL_FILE_DIR,该参数值为服务器中放置数据字典文件的目录。如:UTL_FILE_DIR = ($ORACLE_HOME\logs) ,重新启动数据库,使新加的参数生效
UTL_FILE_DIR=z:\dict
2.创建数据字典文件
EXECUTE sys.dbms_logmnr_d.build(dictionary_filename => '052401.ora',dictionary_location => 'Z:\dict');
3.创建要分析的日志文件列表
execute dbms_logmnr.add_logfile(LogFileName=>'z:\archive\ARC14884.001',Options =>dbms_logmnr.new);
10G忽略上面三步
4.
1)添加分析日志
EXECUTE dbms_logmnr.add_logfile(LogFileName=>'z:\archive\ARC14885.001',Options=>dbms_logmnr.addfile);
EXECUTE dbms_logmnr.add_logfile(LogFileName=>'z:\archive\ARC14886.001',Options=>dbms_logmnr.addfile);
2)删除分析日志
EXECUTE dbms_logmnr.add_logfile('z:\archive\ARC14884.001',dbms_logmnr.removefile);
3)查询分析日志视图\字典
select * from v$logmnr_logs
select * from v$logmnr_dictionary
5.使用logMiner进行日志分析
execute dbms_logmnr.start_logmnr(DictFileName => 'Z:\dict\052401.ora');
6.查询分析结果
select to_char(timestamp,'YYYY-MM-DD HH24:MI:SS') time,sql_redo from v$logmnr_contents where seg_name='TOOL_INFO'
7.分析后释放内存
execute dbms_logmnr.end_logmnr;
帮用户返回某时间点前的数据,使用flashback table(注意表约束)
select * from test_fb as of timestamp to_timestamp('2008-05-04 14:16:17', 'yyyy-mm-dd hh24:mi:ss');