DBA_2PC_PENDING 介紹
DBA_2PC_PENDING
對(duì)于絕大多數(shù)情況,當(dāng)恢復(fù)連接或CRASH的數(shù)據(jù)庫重新啟動(dòng)后,會(huì)自動(dòng)解決分布式事務(wù),不需要人工干預(yù)。只有分布事務(wù)鎖住的對(duì)象急需被訪問,鎖住的回滾段阻止了其他事務(wù)的使用,網(wǎng)絡(luò)故障或CRASH的數(shù)據(jù)庫的恢復(fù)需要很長的時(shí)間等情況出現(xiàn)時(shí),才使用人工操作的方式來維護(hù)分布式事務(wù)。
手工強(qiáng)制提交或回滾將失去二層提交的特性,Oracle無法繼續(xù)保證事務(wù)的一致性,事務(wù)的一致性應(yīng)由手工操作者保證。
對(duì)于分布式事務(wù),給事務(wù)命名是一個(gè)好的習(xí)慣。而且在事務(wù)執(zhí)行過程中,可以使用ALTER SESSION ADVISE COMMIT(ROLLBACK);語句,為手工解決分布事務(wù)提供參考信息。
當(dāng)手工解決分布事務(wù)出現(xiàn)了沖突,比如一個(gè)站點(diǎn)進(jìn)行了提交而另一個(gè)進(jìn)行了ROLLBACK,這時(shí),DBA_2PC_PENDING中的記錄不會(huì)清除,必須使用DBMS_TRANSACTION.PURGE_MIXED過程來清除。
如果CRASH的數(shù)據(jù)庫必須重建,或者無法再次啟動(dòng),則DBA_2PC_PENDING中的記錄也無法自動(dòng)清除,需要使用DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY過程來清除。
Oracle9i中,當(dāng)使用上述兩個(gè)過程時(shí),必須處于UNDO_MANAGEMENT=MANUAL的模式,這個(gè)限制條件Oracle沒有寫到文檔中。一般使用9i都會(huì)使用AUTO模式(Oracle也是這樣推薦的),也就是說,想要清除DBA_2PC_PENDING中的信息,必須重起數(shù)據(jù)庫兩次,感覺這兩個(gè)過程的實(shí)際用處不大。
出現(xiàn)無法解決的分布式事務(wù)時(shí),可能會(huì)鎖住分布式事務(wù)中涉及的表,由于Oracle無法確定哪些數(shù)據(jù)是提交過的,哪些是沒有提交的,無法確定查詢操作可見的結(jié)果集,因此,即使是查詢操作也無法在該表上執(zhí)行。
使用ALTER SYSTEM DISABLE DISTRIBUTED RECOVERY,可以使Oracle不再自動(dòng)解決分布事務(wù),即使網(wǎng)絡(luò)恢復(fù)連接或者CRASH的數(shù)據(jù)庫重新啟動(dòng)。ALTER SYSTEM ENABLE DISTRIBUTED RECOVERY恢復(fù)自動(dòng)解決分布事務(wù)。
為了保證數(shù)據(jù)庫之間的SCN同步,可以采用兩種方法:在查詢數(shù)據(jù)前,執(zhí)行SELECT * FROM DUAL@REMOTE或者在執(zhí)行查詢前提交或回滾當(dāng)前事務(wù)。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com