今天本来下班快要走了,结果开发人员说他们有个测试表的数据突然不见了,而且说应该是没有人delete,问我是不是oracle的Bug(这个有点搞吧,这都想得出来,哈哈),让我帮看一下,没法只能使用logminer来分析日志了:
1、 修改utl_file_dir参数为一个特定目录,或者修改为*(建议,这样就可以访问所有oracle用户可以访问的目录,修改这个参数需要重启生效!)
2、 执行一下脚本初始化logminer环境
@$ORACLE_HOME/rdbms/admin/dbmslm.sql @$ORACLE_HOME/rdbms/admin/dbmslmd.sql3、 生成数据字典文件,如:
EXECUTE dbms_logmnr_d.build(dictionary_filename => 'logminer.ora',dictionary_location => '/arclog/logminer');
EXECUTE dbms_logmnr.add_logfile(LogFileName=>'/soft/oracle/oradata/newpay/redo02a.dbf', Options=>dbms_logmnr.new); EXECUTE dbms_logmnr.add_logfile(LogFileName=>'/soft/oracle/oradata/newpay/redo03a.dbf', Options=>dbms_logmnr.addfile);5、 使用第三步中生成的数据字典开始分析日志,可以使用scn参数分析从多少scn号至多少scn号之间的日志
SELECT distinct sql_redo FROM v$logmnr_contents WHERE SEG_OWNER='PMTS' ;
经查看sql_redo,发现他们在2012-02-22 19:52:22时对那个表做了663个delete操作,亏他还还想得起来。呵呵。
7、 使用以后可以使用EXECUTE DBMS_LOGMNR.END_LOGMNR 清空v$logmnr_logs及v$logmnr_contents的内容
8、 附加:
当使用logminer挖掘日志时,可能出现sql_redo值为UNSUPPORTED的内容信息,这时可以打开数据库的追加日志选项:
查询数据库级别的日志追加选项是否已经开启:
SELECT SUPPLEMENTAL_LOG_DATA_MIN,SUPPLEMENTAL_LOG_DATA_PK,SUPPLEMENTAL_LOG_DATA_UI, SUPPLEMENTAL_LOG_DATA_FK,SUPPLEMENTAL_LOG_DATA_ALL FROM V$DATABASE;启用Supplemental Logging:
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;这里启用minimal logging,一般做到这一步,logminer就拥有足够的信息分析所有所做过的操作。
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL,PRIMARY KEY,UNIQUE INDEX) COLUMNS;禁用Supplemental Logging:
ALTER DATABASE DROP SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE, FOREIGN KEY,ALL) COLUMNS; ALTER DATABASE DROP SUPPLEMENTAL LOG DATA;
ALTER TABLE HR.EMPLOYEES ADD SUPPLEMENTAL LOG GROUP emp_parttime (EMPLOYEE_ID, LAST_NAME, DEPARTMENT_ID) ALWAYS;