DBA_2PC_PENDING 介紹
更新時(shí)間:2007年04月02日 00:00:00 作者:
DBA_2PC_PENDING
Oracle會(huì)自動(dòng)處理分布事務(wù),保證分布事務(wù)的一致性,所有站點(diǎn)全部提交或全部回滾。一般情況下,處理過程在很短的時(shí)間內(nèi)完成,根本無(wú)法察覺到。但是,如果在commit或rollback的時(shí)候,出現(xiàn)了連接中斷或某個(gè)數(shù)據(jù)庫(kù)站點(diǎn)CRASH的情況,則提交操作可能會(huì)無(wú)法繼續(xù),此時(shí)DBA_2PC_PENDING和DBA_2PC_NEIGHBORS中會(huì)包含尚未解決的分布事務(wù)。
對(duì)于絕大多數(shù)情況,當(dāng)恢復(fù)連接或CRASH的數(shù)據(jù)庫(kù)重新啟動(dòng)后,會(huì)自動(dòng)解決分布式事務(wù),不需要人工干預(yù)。只有分布事務(wù)鎖住的對(duì)象急需被訪問,鎖住的回滾段阻止了其他事務(wù)的使用,網(wǎng)絡(luò)故障或CRASH的數(shù)據(jù)庫(kù)的恢復(fù)需要很長(zhǎng)的時(shí)間等情況出現(xiàn)時(shí),才使用人工操作的方式來(lái)維護(hù)分布式事務(wù)。
手工強(qiáng)制提交或回滾將失去二層提交的特性,Oracle無(wú)法繼續(xù)保證事務(wù)的一致性,事務(wù)的一致性應(yīng)由手工操作者保證。
對(duì)于分布式事務(wù),給事務(wù)命名是一個(gè)好的習(xí)慣。而且在事務(wù)執(zhí)行過程中,可以使用ALTER SESSION ADVISE COMMIT(ROLLBACK);語(yǔ)句,為手工解決分布事務(wù)提供參考信息。
當(dāng)手工解決分布事務(wù)出現(xiàn)了沖突,比如一個(gè)站點(diǎn)進(jìn)行了提交而另一個(gè)進(jìn)行了ROLLBACK,這時(shí),DBA_2PC_PENDING中的記錄不會(huì)清除,必須使用DBMS_TRANSACTION.PURGE_MIXED過程來(lái)清除。
如果CRASH的數(shù)據(jù)庫(kù)必須重建,或者無(wú)法再次啟動(dòng),則DBA_2PC_PENDING中的記錄也無(wú)法自動(dòng)清除,需要使用DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY過程來(lái)清除。
Oracle9i中,當(dāng)使用上述兩個(gè)過程時(shí),必須處于UNDO_MANAGEMENT=MANUAL的模式,這個(gè)限制條件Oracle沒有寫到文檔中。一般使用9i都會(huì)使用AUTO模式(Oracle也是這樣推薦的),也就是說,想要清除DBA_2PC_PENDING中的信息,必須重起數(shù)據(jù)庫(kù)兩次,感覺這兩個(gè)過程的實(shí)際用處不大。
出現(xiàn)無(wú)法解決的分布式事務(wù)時(shí),可能會(huì)鎖住分布式事務(wù)中涉及的表,由于Oracle無(wú)法確定哪些數(shù)據(jù)是提交過的,哪些是沒有提交的,無(wú)法確定查詢操作可見的結(jié)果集,因此,即使是查詢操作也無(wú)法在該表上執(zhí)行。
使用ALTER SYSTEM DISABLE DISTRIBUTED RECOVERY,可以使Oracle不再自動(dòng)解決分布事務(wù),即使網(wǎng)絡(luò)恢復(fù)連接或者CRASH的數(shù)據(jù)庫(kù)重新啟動(dòng)。ALTER SYSTEM ENABLE DISTRIBUTED RECOVERY恢復(fù)自動(dòng)解決分布事務(wù)。
為了保證數(shù)據(jù)庫(kù)之間的SCN同步,可以采用兩種方法:在查詢數(shù)據(jù)前,執(zhí)行SELECT * FROM DUAL@REMOTE或者在執(zhí)行查詢前提交或回滾當(dāng)前事務(wù)。
Oracle會(huì)自動(dòng)處理分布事務(wù),保證分布事務(wù)的一致性,所有站點(diǎn)全部提交或全部回滾。一般情況下,處理過程在很短的時(shí)間內(nèi)完成,根本無(wú)法察覺到。但是,如果在commit或rollback的時(shí)候,出現(xiàn)了連接中斷或某個(gè)數(shù)據(jù)庫(kù)站點(diǎn)CRASH的情況,則提交操作可能會(huì)無(wú)法繼續(xù),此時(shí)DBA_2PC_PENDING和DBA_2PC_NEIGHBORS中會(huì)包含尚未解決的分布事務(wù)。
對(duì)于絕大多數(shù)情況,當(dāng)恢復(fù)連接或CRASH的數(shù)據(jù)庫(kù)重新啟動(dòng)后,會(huì)自動(dòng)解決分布式事務(wù),不需要人工干預(yù)。只有分布事務(wù)鎖住的對(duì)象急需被訪問,鎖住的回滾段阻止了其他事務(wù)的使用,網(wǎng)絡(luò)故障或CRASH的數(shù)據(jù)庫(kù)的恢復(fù)需要很長(zhǎng)的時(shí)間等情況出現(xiàn)時(shí),才使用人工操作的方式來(lái)維護(hù)分布式事務(wù)。
手工強(qiáng)制提交或回滾將失去二層提交的特性,Oracle無(wú)法繼續(xù)保證事務(wù)的一致性,事務(wù)的一致性應(yīng)由手工操作者保證。
對(duì)于分布式事務(wù),給事務(wù)命名是一個(gè)好的習(xí)慣。而且在事務(wù)執(zhí)行過程中,可以使用ALTER SESSION ADVISE COMMIT(ROLLBACK);語(yǔ)句,為手工解決分布事務(wù)提供參考信息。
當(dāng)手工解決分布事務(wù)出現(xiàn)了沖突,比如一個(gè)站點(diǎn)進(jìn)行了提交而另一個(gè)進(jìn)行了ROLLBACK,這時(shí),DBA_2PC_PENDING中的記錄不會(huì)清除,必須使用DBMS_TRANSACTION.PURGE_MIXED過程來(lái)清除。
如果CRASH的數(shù)據(jù)庫(kù)必須重建,或者無(wú)法再次啟動(dòng),則DBA_2PC_PENDING中的記錄也無(wú)法自動(dòng)清除,需要使用DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY過程來(lái)清除。
Oracle9i中,當(dāng)使用上述兩個(gè)過程時(shí),必須處于UNDO_MANAGEMENT=MANUAL的模式,這個(gè)限制條件Oracle沒有寫到文檔中。一般使用9i都會(huì)使用AUTO模式(Oracle也是這樣推薦的),也就是說,想要清除DBA_2PC_PENDING中的信息,必須重起數(shù)據(jù)庫(kù)兩次,感覺這兩個(gè)過程的實(shí)際用處不大。
出現(xiàn)無(wú)法解決的分布式事務(wù)時(shí),可能會(huì)鎖住分布式事務(wù)中涉及的表,由于Oracle無(wú)法確定哪些數(shù)據(jù)是提交過的,哪些是沒有提交的,無(wú)法確定查詢操作可見的結(jié)果集,因此,即使是查詢操作也無(wú)法在該表上執(zhí)行。
使用ALTER SYSTEM DISABLE DISTRIBUTED RECOVERY,可以使Oracle不再自動(dòng)解決分布事務(wù),即使網(wǎng)絡(luò)恢復(fù)連接或者CRASH的數(shù)據(jù)庫(kù)重新啟動(dòng)。ALTER SYSTEM ENABLE DISTRIBUTED RECOVERY恢復(fù)自動(dòng)解決分布事務(wù)。
為了保證數(shù)據(jù)庫(kù)之間的SCN同步,可以采用兩種方法:在查詢數(shù)據(jù)前,執(zhí)行SELECT * FROM DUAL@REMOTE或者在執(zhí)行查詢前提交或回滾當(dāng)前事務(wù)。
相關(guān)文章
Oracle 自增(auto increment) 或 標(biāo)識(shí)字段的建立方法
SQL SERVER 和 ACCESS 以及 MYSQL 中, 都有一種 自增字段, 通常被用來(lái)做 主鍵 或 索引鍵, 但是 ORACLE 中,確并沒有提供這種字段類型(實(shí)際并不是一種字段類型) ,但我們確經(jīng)常需要這個(gè)功能。2008-11-11Oracle row_number() over()解析函數(shù)高效實(shí)現(xiàn)分頁(yè)
Oracle row_number() over()解析函數(shù)高效實(shí)現(xiàn)分頁(yè),需要的朋友可以參考下。2011-11-11Oracle下時(shí)間轉(zhuǎn)換在幾種語(yǔ)言中的實(shí)現(xiàn)
Oracle下時(shí)間轉(zhuǎn)換在幾種語(yǔ)言中的實(shí)現(xiàn)...2007-04-04在Oracle PL/SQL中游標(biāo)聲明中表名動(dòng)態(tài)變化的方法
在Oracle PL/SQL中游標(biāo)聲明中表名動(dòng)態(tài)變化的方法...2007-04-04