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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM