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

相關文章
相關標籤/搜索