操作:
a.查看是否打开附加日志数据模式功能
select SUPPLEMENTAL_LOG_DATA_MIN from v$database;
b.若没有打开,则打开
alter database add supplemental log data;
c.将要挖掘的日志添加到挖掘队列
exec dbms_logmnr.add_logfile('/log/log1.log')
exec dbms_logmnr.add_logfile('/log/log2.log')
d.可以删除添加的日志
exec dbms_logmnr.remove_logfile('/log/log1.log')
e.对添加入队列的日志进行挖掘
exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
f.从v$logmnr_contents查前滚SQL和反算回来的回滚SQL
select sql_redo,sql_undo from v$logmnr_contents;
实做:
1.查看操作前的系统SCN号
SQL> conn sys/oracleStudy as sysdba;
已连接。
SQL> show user;
USER 为 "SYS"
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
2058137
2.查看当前时候开启附加日志信息功能,若没有,则开启
SQL> select supplemental_log_data_min from v$database;
SUPPLEME
--------
NO
SQL> alter database add supplemental log data;
数据库已更改。
SQL> select supplemental_log_data_min from v$database;
SUPPLEME
--------
YES
3.执行向表中插入数据的操作
SQL> conn oracleStudy/oracleStudy;
已连接。
SQL> insert into test values(1,'MM','TT');
已创建 1 行。
SQL> commit;
提交完成。
4.查看操作完成之后的SCN号
SQL> conn sys/oracleStudy as sysdba;
已连接。
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
2058783
5.查看当前redolog是哪一组,并且位置在哪?
SQL> select group#,status from v$log;
GROUP# STATUS
---------- --------------------
1 INACTIVE
2 INACTIVE
3 CURRENT
SQL> select member from v$logfile;
MEMBER
--------------------------------------------------
D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORACLESTUDY\REDO0
3.LOG
D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORACLESTUDY\REDO0
2.LOG
D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORACLESTUDY\REDO0
1.LOG
6.添加需要日志挖掘的日志,这里选择当前redolog
SQL> exec dbms_logmnr.add_logfile('D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORACLESTUDY\REDO03.log');
PL/SQL 过程已成功完成。
7.开始数据挖掘
exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog,StartScn=>2058137,EndScn=>2058783);
8.查询挖掘信息
select username,session_info,sql_redo,sql_undo from v$logmnr_contents where seg_name like '%TEST%';
SQL> /
USERNAME SESSION_INFO
------------------------------ ----------------------------------------
ORACLESTUDY login_username=ORACLESTUDY client_info=
OS_username=***** Machin
e_name=**** OS_terminal=**** OS_process_id=8068:7996 OS_program_
name=sqlplus.exe
SQL_REDO SQL_UNDO
---------------------------------------- ---------------------------------------
-
insert into "ORACLESTUDY"."TEST"("ID","U delete from "ORACLESTUDY"."TEST" where
"
SERNAME","PASSWORD") values ('1','MM','T ID" = '1' and "USERNAME" = 'MM' and "PA
S
T'); SWORD" = 'TT' and ROWID = 'AAAMoRAAFAAA
AOAAA';
username 表示作此操作的用户名
session_info 中记录登录用户的信息,如登录PC名称、对应系统的进程号、连接oracle的工具等
sql_redo 所作的操作
sql_undo 回滚的操作,其中ORWID可以很精确的定位所操作的表