v$logmnr_contents中特殊delete语句解惑

疑惑:在v$logmnr_contents中,SQL_REDO为DELETE语句,可是SQL_UNDO为null是什么状况呢?数据库

 

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

 

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记录。spa

 

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语句回滚操做。code

 

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的一个特殊用途!!orm

相关文章
相关标签/搜索