疑惑:在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.
SQL> execute dbms_logmnr.end_logmnr();
PL/SQL procedure successfully completed.
因此對於這種狀況: 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 rollbacks,transaction rollbacks,Rollback per transaction%)的值較大,而你又沒法定位緣由時,那麼你能夠用Logminer來幫你分析定位緣由(root cause)。這個也算是Logminer的一個特殊用途!!orm