熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

小議Oracle11g的自治事務(三)

2013-11-13 16:02:25  來源: Oracle 

  上一篇文章提到了自治事務更像是在單獨的會話中執行它的事務狀態不會影響當前的事務它也不會看到當前事務沒有提交的修改

  那麼自治事務是否和推測的一樣是由另一個會話執行的操作呢下面通過幾個例子來驗證這一點  

   SQL> TRUNCATE TABLE T_AUTO_TRANS;

  表被截斷

   SQL> CREATE OR REPLACE PROCEDURE P_AUTO AS
   PRAGMA AUTONOMOUS_TRANSACTION;
   BEGIN
   INSERT INTO T_AUTO_TRANS VALUES ( TEST);
   DBMS_LOCKSLEEP();
   COMMIT;
   END;
   /

  過程已創建

   SQL> SELECT SID FROM V$MYSTAT WHERE ROWNUM = ;
  SID
  
  

  在另外一個會話登陸檢查當前系統中會話數量 

   SQL> CONN / AS SYSDBA已連接
  SQL> SET SQLP SQL
  SQL> SELECT SID USERNAME STATUS FROM V$SESSION;
  SID USERNAME STATUS
    
   ACTIVE
   YANGTK INACTIVE
   ACTIVE
   ACTIVE
   ACTIVE
   SYS ACTIVE
   ACTIVE
   ACTIVE
   ACTIVE
   ACTIVE
   ACTIVE
   ACTIVE
   ACTIVE
   ACTIVE
   ACTIVE
   ACTIVE
   ACTIVE
   ACTIVE
   ACTIVE

  已選擇

  下面執行P_AUTO過程這個過程會等待秒的時間

   SQL> EXEC P_AUTO

  在第二個會話仍然執行上面的查詢 

   SQL> SELECT SID USERNAME STATUS FROM V$SESSION;
  SID USERNAME STATUS
    
   YANGTK ACTIVE
   ACTIVE
   ACTIVE
   ACTIVE
   SYS ACTIVE
   ACTIVE
   ACTIVE
   ACTIVE
   ACTIVE
   ACTIVE
   ACTIVE
   ACTIVE
   ACTIVE
   ACTIVE
   ACTIVE
   ACTIVE
   ACTIVE
   ACTIVE

  已選擇

  查詢完成後會話的過程才執行完成

  PL/SQL 過程已成功完成

  從這一點上看沒有看到自治事務產生額外的會話下面再次執行P_AUTO過程並在過程的執行過程中查詢V$LOCK視圖檢查產生鎖的會話 

   SQL> SELECT SID TYPE ID ID LMODE REQUEST CTIME
   FROM V$LOCK;
  SID TY ID ID LMODE REQUEST CTIME
        
   XR     
   CF     
   PW     
   RS     
   RT     
   MR     
   MR     
   MR     
   MR     
   MR     
   MR     
   MR     
   MR     
   TS     
   TM     
   TX     

  已選擇

   SQL> COL OBJECT_NAME FORMAT A
  SQL> SELECT OWNER OBJECT_NAME OBJECT_TYPE
   FROM DBA_OBJECTS
   WHERE OBJECT_ID = ;
  OWNER OBJECT_NAME OBJECT_TYPE
    
  YANGTK T_AUTO_TRANS TABLE

  根據上面兩個查詢可以看到自治事務仍然和主事務處於同一個事務之中為了更好的說明問題在執行P_AUTO過程先對T_AUTO_TRANS插入一條數據

   SQL> INSERT INTO T_AUTO_TRANS VALUES ( TEST);

  已創建

   SQL> EXEC P_AUTO

  PL/SQL 過程已成功完成

  在P_AUTO的執行過程中再次查詢V$LOCK

   SQL> SELECT SID TYPE ID ID LMODE REQUEST CTIME
   FROM V$LOCK;
  SID TY ID ID LMODE REQUEST CTIME
        
   XR     
   CF     
   PW     
   RS     
   RT     
   MR     
   MR     
   MR     
   MR     
   MR     
   MR     
   MR     
   MR     
   TS     
   TM     
   TM     
   TX     
   TX     

  已選擇

  這裡可以清楚的看到SID為的會話同時對應兩個事務因此上文所說的自治事務更像是在單獨的會話中執行只是一個比喻實際上自治事務仍然和主事務處於同一個會話中


From:http://tw.wingwit.com/Article/program/Oracle/201311/17709.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.