当前位置: 首页 > BASIC, ORACLE > 正文

       下面是测试logmnr用于分析日志,可以用于审计,也可以用于恢复用于误操作删除的数据,测试发现logmnr在10g环境中,sql_redo不能显示出insert操作,delete,update操作正常,在11g中,所有的dml操作都能解析出来,下面是测试环境,都没有启用附加日志。

       环境1:DB:11.2.0.3.0   OS:WIN7

SQL> create table test as select * from emp;
SQL> insert into test select * from test;
SQL> update test set empno=1000;
SQL> commit;
SQL> delete test;
SQL> commit;
SQL> conn / as sysdba
Connected.
SQL> alter system archive log current;
System altered.
SQL> select name from v$archived_log;
NAME
--------------------------------------------------------------------------------
E:\INSTALL\RMAN\WIN\ARC0000000006_0823563417.0001
E:\INSTALL\RMAN\WIN\ARC0000000007_0823563417.0001
E:\INSTALL\RMAN\WIN\ARC0000000008_0823563417.0001
E:\INSTALL\RMAN\WIN\ARC0000000009_0823563417.0001
SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME => 'E:\INSTALL\RMAN\WIN\ARC0000000009_0823563417.0001',OPTIONS => DBMS_LOGMNR.NEW);
PL/SQL procedure successfully completed.
SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);
PL/SQL procedure successfully completed.

SQL>
SQL> create table test3 as select * from V$LOGMNR_CONTENTS;
这里发现能发现所有 的dml语句,特别注意这里insert操作
SQL> select distinct operation,substr(sql_redo,1,20) from test3 where table_name='TEST';

OPERATION                        SUBSTR(SQL_REDO,1,20)
-------------------------------- ----------------------------------------
DDL                              create table test as
DDL                              drop table test purg
UPDATE                           update "SCOTT"."TEST
INSERT                           insert into "SCOTT".
DELETE                           delete from "SCOTT".
UNSUPPORTED                      Unsupported

环境2:DB 10.20.4.8,OS:REHL 4.8 X86

www.htz.pw >alter database drop supplemental log data;
www.htz.pw >conn scott/oracle
Connected.
www.htz.pw >drop table test;
www.htz.pw >create table test as select * from emp;
www.htz.pw >insert into test select * from test;
www.htz.pw >update test set empno=1000;
www.htz.pw >commit;
www.htz.pw >delete test;
www.htz.pw >commit;
www.htz.pw > conn / as sysdba
Connected.
www.htz.pw >alter system archive log current;
www.htz.pw >select name from v$archived_log;
NAME
--------------------------------------------------------------------------------
/arch/1_986_816197230.dbf
www.htz.pw >EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME => '/arch/1_986_816197230.dbf',OPTIONS => DBMS_LOGMNR.NEW);
www.htz.pw >EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);
www.htz.pw >drop table test3;
Table dropped.
www.htz.pw >
www.htz.pw >create table test3 as select * from V$LOGMNR_CONTENTS ;
这里注意,只发现update,delete语句,并没有发现insert操作
www.htz.pw >select distinct operation,substr(sql_redo,1,20) from test3 where table_name='TEST';

OPERATION                        SUBSTR(SQL_REDO,1,20)
-------------------------------- ----------------------------------------
DDL                              create table test as
DDL                              drop table test AS "
DDL                              ALTER TABLE "SCOTT".
UPDATE                           update "SCOTT"."TEST
DELETE                           delete from "SCOTT".

        通过上面两个测试发现,默认情况下(未开启附加日志):10G数据库sql_redo里面并不能显示insert语句,而11g里面是正常的。特别是如果用logmnr来做数据恢复的时候,在10G中需要注意了,可以操作部分数据不正常的情况。

报歉!评论已关闭。