zoukankan      html  css  js  c++  java
  • v$logmnr_contents中特殊delete语句解惑

    疑惑:在v$logmnr_contents中,SQL_REDO为DELETE语句,但是SQL_UNDO为null是什么情况呢?

     

    其实这种情况是因为SQL插入失败,数据库内部回滚了这条记录。比较特殊的一种情况,如果以前没有注意过这些细节信息,还真有点懵。这里模拟构造了一个案例,演示一下这种情况:

     

    SQL> INSERT INTO SCOTT.EMP
      2  VALUES(7934,'MILLER','CLERK','7782' , SYSDATE, 1200, NULL,10);
    INSERT INTO SCOTT.EMP
    *
    ERROR at line 1:
    ORA-00001: unique constraint (SCOTT.PK_EMP) violated

     

     

    然后我们使用LogMiner去挖掘redo log就会发现redo log里面生成了两条记录一条INSERT、一条DELETE记录。

     

    SQL> execute dbms_logmnr.add_logfile('/u01/oradata/gsp/redo03.log', 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> create table scott.log_miner_output
      2  as
      3  select * from v$logmnr_contents where table_name='EMP' ;
     
    Table created.
     
    SQLexecute dbms_logmnr.end_logmnr();
     
    PL/SQL procedure successfully completed.

     

    clip_image001

     

     

    所以对于这种情况: ROLLBACK字段值为1表示回滚, OPERATION为DELETE, SQL_REDO为DELETE语句, SQL_UNDO为NULL值。有时候,我们可能这样去挖掘分析(加上查询条件OPERATION='DELETE',如下所示),没有加上ROLLBACK字段,这样在不了解、熟悉的情况下,可能会以为它是一个客户端发出的一个DELETE语句,实质上是一个INSERT语句回滚操作。

     

    CREATE TABLE SCOTT.LOG_MINER_OUTPUT
    AS
    SELECT SQL_REDO,SQL_UNDO, USERNAME,SESSION_INFO FROM V$LOGMNR_CONTENTS WHERE TABLE_NAME='EMP' AND OPERATION='DELETE';

    AWR报告中如果你看到一些指标例如user rollbackstransaction rollbacksRollback per transaction%的值较大而你又无法定位原因时那么你可以用Logminer来帮你分析定位原因(root cause)。这个也算是Logminer的一个特殊用途!!

  • 相关阅读:
    20165225《Java程序设计》第六周学习总结
    实验一 Java开发环境的熟悉
    20165225《Java程序设计》第五周学习总结
    移动web——bootstrap响应式工具
    移动web——bootstrap栅格系统
    移动web——bootstrap模板
    移动web——媒体查询
    移动web——轮播图
    移动web——touch事件应用
    移动web——touch事件介绍
  • 原文地址:https://www.cnblogs.com/kerrycode/p/13415164.html
Copyright © 2011-2022 走看看