Welcome 微信登录

首页 / 数据库 / MySQL / 使用Logminer还原操作记录

今天本来下班快要走了,结果开发人员说他们有个测试表的数据突然不见了,而且说应该是没有人delete,问我是不是Oracle的Bug(这个有点搞吧,这都想得出来,哈哈),让我帮看一下,没法只能使用logminer来分析日志了:1、    修改utl_file_dir参数为一个特定目录,或者修改为*(建议,这样就可以访问所有oracle用户可以访问的目录,修改这个参数需要重启生效!)
2、    执行一下脚本初始化logminer环境
  1. @$ORACLE_HOME/rdbms/admin/dbmslm.sql  
  2. @$ORACLE_HOME/rdbms/admin/dbmslmd.sq  
3、    生成数据字典文件,如:
  1. EXECUTE dbms_logmnr_d.build(dictionary_filename => "logminer.ora",dictionary_location => "/arclog/logminer");  
4、    添加日志文件,可以使归档日志也可以使在线redo日志,由于这个数据库没有起归档,所有就使用online redo日志来分析,还好他们没有做压力,日志没被切换掉:
  1. EXECUTE dbms_logmnr.add_logfile(LogFileName=>"/soft/oracle/oradata/newpay/redo02a.dbf", Options=>dbms_logmnr.new);  
  2. EXECUTE dbms_logmnr.add_logfile(LogFileName=>"/soft/oracle/oradata/newpay/redo03a.dbf", Options=>dbms_logmnr.addfile);  
5、    使用第三步中生成的数据字典开始分析日志,可以使用scn参数分析从多少scn号至多少scn号之间的日志
EXECUTE dbms_logmnr.start_logmnr(DictFileName=>"/arclog/logminer/logminer.ora");
6、    可以查询v$logmnr_contents视图中的sql_redo字段,获取操作内容,如:
  1. 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的内容信息,这时可以打开数据库的追加日志选项:
查询数据库级别的日志追加选项是否已经开启:
  1. SELECT SUPPLEMENTAL_LOG_DATA_MIN,SUPPLEMENTAL_LOG_DATA_PK,SUPPLEMENTAL_LOG_DATA_UI,  
  2. SUPPLEMENTAL_LOG_DATA_FK,SUPPLEMENTAL_LOG_DATA_ALL FROM V$DATABASE;  
启用Supplemental Logging:
  1. ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;  
这里启用minimal logging,一般做到这一步,logminer就拥有足够的信息分析所有所做过的操作。
其他级别的日志追加:
  1. ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL,PRIMARY KEY,UNIQUE INDEX) COLUMNS;  
禁用Supplemental Logging:
如果存在ALL、PRIMARY KEY、UNIQUE INDEX的追加日志选项,则需要先禁用这些内容的日志追加后才能禁用minimal logging,否则会有如下错误:
ORA-32589: unable to drop minimal supplemental logging
  1. ALTER DATABASE DROP SUPPLEMENTAL LOG DATA (PRIMARY KEYUNIQUEFOREIGN KEY,ALL) COLUMNS;  
  2. ALTER DATABASE DROP SUPPLEMENTAL LOG DATA;  
启用表级别的追加日志,如:
  1. ALTER TABLE HR.EMPLOYEES ADD SUPPLEMENTAL LOG GROUP emp_parttime (EMPLOYEE_ID, LAST_NAME, DEPARTMENT_ID) ALWAYS;  
Oracle关闭遇到ORA-00600 【LibraryCacheNotEmptyOnClose】的错误DBCA创建ASM数据库时遇到ORA-01031相关资讯      Oracle基础 
  • Oracle基础介绍及常用相关SQL*PLUS  (03月11日)
  • Oracle 角色的两个特性和误区  (09/04/2012 05:56:16)
  • Oracle rac11.2.0.3.0的vip在重启  (09/02/2012 10:00:39)
  • Oracle中删除用户遇到的问题  (09/08/2012 20:01:42)
  • IMP-00008: unrecognized   (09/02/2012 10:03:25)
  • 在Oracle数据库上设置限制ip地址访  (09/02/2012 09:59:55)
本文评论 查看全部评论 (0)
表情: 姓名: 字数