Oracle 日志挖掘logminer

用途

  • 对oracle在线redo,归档日志进行分析。

目的

  • 修正误操作
  • 审计

dbms_logmnr

  • 可以基于日志文件分析(一个或者多个)
  • 可以基于时间段分析
  • 可以基于SCN分析

实例

往t表插入数字1至9

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 
Connected as test@local

SQL> select * from v$logfile;
    GROUP# STATUS  TYPE    MEMBER                                                                           IS_RECOVERY_DEST_FILE
---------- ------- ------- -------------------------------------------------------------------------------- ---------------------
         3         ONLINE  E:\ORACLE\ORADATA\ORCL\REDO03.LOG                                                NO
         2         ONLINE  E:\ORACLE\ORADATA\ORCL\REDO02.LOG                                                NO
         1         ONLINE  E:\ORACLE\ORADATA\ORCL\REDO01.LOG                                                NO

SQL> select * from v$log;
    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARCHIVED STATUS           FIRST_CHANGE# FIRST_TIME  NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- -------- ---------------- ------------- ----------- ------------ -----------
         1          1         10   52428800        512          1 NO       INACTIVE               1089257 2018/12/17       1097614 2018/12/17
         2          1         11   52428800        512          1 NO       CURRENT                1097614 2018/12/17  281474976710 
         3          1          9   52428800        512          1 NO       INACTIVE               1058362 2018/12/2 1      1089257 2018/12/17

SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
                 1098917

SQL> insert into t select rownum from dual connect by rownum<10;
9 rows inserted

SQL> commit;
Commit complete

SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
                 1098933

SQL> exec dbms_logmnr.add_logfile('E:\ORACLE\ORADATA\ORCL\REDO02.LOG',dbms_logmnr.new);
PL/SQL procedure successfully completed

SQL> exec dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog,StartScn=>1098917,EndScn=>1098933);
PL/SQL procedure successfully completed

SQL> select operation,sql_redo,sql_undo from v$logmnr_contents;
OPERATION                        SQL_REDO                                                                         SQL_UNDO
-------------------------------- -------------------------------------------------------------------------------- --------------------------------------------------------------------------------
START                            set transaction read write;                                                      
INSERT                           insert into "TEST"."T"("NO") values ('1');                                       delete from "TEST"."T" where "NO" = '1' and ROWID = 'AAAR7VAAFAAAACGAAA';
INSERT                           insert into "TEST"."T"("NO") values ('2');                                       delete from "TEST"."T" where "NO" = '2' and ROWID = 'AAAR7VAAFAAAACGAAB';
INSERT                           insert into "TEST"."T"("NO") values ('3');                                       delete from "TEST"."T" where "NO" = '3' and ROWID = 'AAAR7VAAFAAAACGAAC';
INSERT                           insert into "TEST"."T"("NO") values ('4');                                       delete from "TEST"."T" where "NO" = '4' and ROWID = 'AAAR7VAAFAAAACGAAD';
INSERT                           insert into "TEST"."T"("NO") values ('5');                                       delete from "TEST"."T" where "NO" = '5' and ROWID = 'AAAR7VAAFAAAACGAAE';
INSERT                           insert into "TEST"."T"("NO") values ('6');                                       delete from "TEST"."T" where "NO" = '6' and ROWID = 'AAAR7VAAFAAAACGAAF';
INSERT                           insert into "TEST"."T"("NO") values ('7');                                       delete from "TEST"."T" where "NO" = '7' and ROWID = 'AAAR7VAAFAAAACGAAG';
INSERT                           insert into "TEST"."T"("NO") values ('8');                                       delete from "TEST"."T" where "NO" = '8' and ROWID = 'AAAR7VAAFAAAACGAAH';
INSERT                           insert into "TEST"."T"("NO") values ('9');                                       delete from "TEST"."T" where "NO" = '9' and ROWID = 'AAAR7VAAFAAAACGAAI';
COMMIT                           commit;                                                                          
11 rows selected

实验中遇到的错误

  • 启用补充日志
    不启用不影响整个过程,但最终查询时部分操作(像插入,删除,会报"Unsupported"错误)分析不出来
    启用补充日志命令:alter database add supplemental log data;
    删除补充日志命令:alter database drop supplemental log data;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值