程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> 關於Oracle數據庫 >> DBA_2PC_PENDING 介紹

DBA_2PC_PENDING 介紹

編輯:關於Oracle數據庫
DBA_2PC_PENDING
Oracle會自動處理分布事務,保證分布事務的一致性,所有站點全部提交或全部回滾。一般情況下,處理過程在很短的時間內完成,根本無法察覺到。但是,如果在commit或rollback的時候,出現了連接中斷或某個數據庫站點CRASH的情況,則提交操作可能會無法繼續,此時DBA_2PC_PENDING和DBA_2PC_NEIGHBORS中會包含尚未解決的分布事務。 

 

對於絕大多數情況,當恢復連接或CRASH的數據庫重新啟動後,會自動解決分布式事務,不需要人工干預。只有分布事務鎖住的對象急需被訪問,鎖住的回滾段阻止了其他事務的使用,網絡故障或CRASH的數據庫的恢復需要很長的時間等情況出現時,才使用人工操作的方式來維護分布式事務。 


手工強制提交或回滾將失去二層提交的特性,Oracle無法繼續保證事務的一致性,事務的一致性應由手工操作者保證。 


對於分布式事務,給事務命名是一個好的習慣。而且在事務執行過程中,可以使用ALTER SESSION ADVISE COMMIT(ROLLBACK);語句,為手工解決分布事務提供參考信息。 


當手工解決分布事務出現了沖突,比如一個站點進行了提交而另一個進行了ROLLBACK,這時,DBA_2PC_PENDING中的記錄不會清除,必須使用DBMS_TRANSACTION.PURGE_MIXED過程來清除。 


如果CRASH的數據庫必須重建,或者無法再次啟動,則DBA_2PC_PENDING中的記錄也無法自動清除,需要使用DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY過程來清除。 


Oracle9i中,當使用上述兩個過程時,必須處於UNDO_MANAGEMENT=MANUAL的模式,這個限制條件Oracle沒有寫到文檔中。一般使用9i都會使用AUTO模式(Oracle也是這樣推薦的),也就是說,想要清除DBA_2PC_PENDING中的信息,必須重起數據庫兩次,感覺這兩個過程的實際用處不大。 

 

出現無法解決的分布式事務時,可能會鎖住分布式事務中涉及的表,由於Oracle無法確定哪些數據是提交過的,哪些是沒有提交的,無法確定查詢操作可見的結果集,因此,即使是查詢操作也無法在該表上執行。 


使用ALTER SYSTEM DISABLE DISTRIBUTED RECOVERY,可以使Oracle不再自動解決分布事務,即使網絡恢復連接或者CRASH的數據庫重新啟動。ALTER SYSTEM ENABLE DISTRIBUTED RECOVERY恢復自動解決分布事務。 


為了保證數據庫之間的SCN同步,可以采用兩種方法:在查詢數據前,執行SELECT * FROM DUAL@REMOTE或者在執行查詢前提交或回滾當前事務。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved