暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

oracle之日志挖掘logminer

初七的学习笔记 2021-06-10
1474

如果在没有备份的情况下,操作人员误操作导致删除了数据怎么办?别慌,如果你使用的是oracle数据库,不妨试一试日志挖掘logminer,mysql的话可以尝试使用binlog,当然前提是你开启了binlog日志,并且历史的binlog有备份或者一直没有清理。这里给大家介绍的是oracle的logminer技术。

在这里,强烈建议大家开启归档,如果没有归档,只能挖掘redo,误删除的数据可能找回的不全。 

首先,确认下安装包的位置,这里使用的oracle版本为11.2.0.4.0

[oracle@db1 ~]$ cd $ORACLE_HOME/rdbms/admin

[oracle@db1 admin]$ ls dbmslm*

dbmslmd.sql  dbmslm.sql  dbmslms.sql

1.安装这三个包

SQL> @?/rdbms/admin/dbmslmd.sql

SQL> @?/rdbms/admin/dbmslm.sql

SQL> @?/rdbms/admin/dbmslms.sql

2.查看utl_file_dir参数

SQL> show parameter utl_file_dir


NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

utl_file_dir                         string

发现没有路径,那么就建立路径

SQL> alter system set utl_file_dir='/dblog' scope=spfile;

SQL> shut immediate;

SQL> startup

3.执行大量DML操作,并手动切换日志,产生归档

4.查看日志文件和归档文件路径

SQL> select * from v$logfile;


    GROUP# STATUS  TYPE    MEMBER                                        IS_

---------- ------- ------- --------------------------------------------- ---

         1         ONLINE  /u01/app/oracle/oradata/PROD/redo01.log       NO

         2         ONLINE  /u01/app/oracle/oradata/PROD/redo02.log       NO

         3         ONLINE  /u01/app/oracle/oradata/PROD/redo03.log       NO

         

SQL> select name from v$archived_log;


NAME

----------------------------------------

/bk/1_39_959811941.dbf

/bk/1_40_959811941.dbf

/bk/1_41_959811941.dbf

/bk/1_42_959811941.dbf

/bk/1_43_959811941.dbf

/bk/1_44_959811941.dbf

/bk/1_45_959811941.dbf

/bk/1_46_959811941.dbf


5.因为手工切换了日志,所以只对归档进行日志挖掘即可,创建日志挖掘的字典

execute dbms_logmnr_d.build(dictionary_filename=>'log.ora',dictionary_location=>'/dblog',options=>dbms_logmnr_d.store_in_flat_file);


6.添加归档日志

第一个归档日志为new,后面的直接add即可

exec dbms_logmnr.add_logfile('/bk/1_39_959811941.dbf',dbms_logmnr.new);

exec dbms_logmnr.add_logfile('/bk/1_40_959811941.dbf',dbms_logmnr.addfile);

exec dbms_logmnr.add_logfile('/bk/1_41_959811941.dbf',dbms_logmnr.addfile);

exec dbms_logmnr.add_logfile('/bk/1_42_959811941.dbf',dbms_logmnr.addfile);

exec dbms_logmnr.add_logfile('/bk/1_43_959811941.dbf',dbms_logmnr.addfile);

exec dbms_logmnr.add_logfile('/bk/1_44_959811941.dbf',dbms_logmnr.addfile);

exec dbms_logmnr.add_logfile('/bk/1_45_959811941.dbf',dbms_logmnr.addfile);

exec dbms_logmnr.add_logfile('/bk/1_46_959811941.dbf',dbms_logmnr.addfile);


7.开启日志挖掘

exec dbms_logmnr.start_logmnr(dictfilename=>'/dblog/log.ora');


8.查看日志挖掘记录,由于挖掘记录过多,建议使用spool功能

spool home/oracle/1.sql

select scn,to_char(timestamp,'yyyy-mm-dd hh24:mi:ss'),sql_redo from v$logmnr_contents where seg_name='TEST' and seg_owner='TEST';

spool off

此时只针对TEST用户下的TEST表进行日志挖掘


9.关闭日志挖掘

exec dbms_logmnr.end_logmnr;


10.此时日志挖掘已经完毕,可以去看/home/oracle/1.sql中的内容恢复数据了




文章转载自初七的学习笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论