DBA_2PC_PENDING 介紹
更新時(shí)間:2007年04月02日 00:00:00 作者:
DBA_2PC_PENDING
Oracle會(huì)自動(dòng)處理分布事務(wù),保證分布事務(wù)的一致性,所有站點(diǎn)全部提交或全部回滾。一般情況下,處理過(guò)程在很短的時(shí)間內(nèi)完成,根本無(wú)法察覺(jué)到。但是,如果在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èn),鎖住的回滾段阻止了其他事務(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í)行過(guò)程中,可以使用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過(guò)程來(lái)清除。
如果CRASH的數(shù)據(jù)庫(kù)必須重建,或者無(wú)法再次啟動(dòng),則DBA_2PC_PENDING中的記錄也無(wú)法自動(dòng)清除,需要使用DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY過(guò)程來(lái)清除。
Oracle9i中,當(dāng)使用上述兩個(gè)過(guò)程時(shí),必須處于UNDO_MANAGEMENT=MANUAL的模式,這個(gè)限制條件Oracle沒(méi)有寫(xiě)到文檔中。一般使用9i都會(huì)使用AUTO模式(Oracle也是這樣推薦的),也就是說(shuō),想要清除DBA_2PC_PENDING中的信息,必須重起數(shù)據(jù)庫(kù)兩次,感覺(jué)這兩個(gè)過(guò)程的實(shí)際用處不大。
出現(xiàn)無(wú)法解決的分布式事務(wù)時(shí),可能會(huì)鎖住分布式事務(wù)中涉及的表,由于Oracle無(wú)法確定哪些數(shù)據(jù)是提交過(guò)的,哪些是沒(méi)有提交的,無(wú)法確定查詢操作可見(jiàn)的結(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)全部提交或全部回滾。一般情況下,處理過(guò)程在很短的時(shí)間內(nèi)完成,根本無(wú)法察覺(jué)到。但是,如果在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èn),鎖住的回滾段阻止了其他事務(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í)行過(guò)程中,可以使用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過(guò)程來(lái)清除。
如果CRASH的數(shù)據(jù)庫(kù)必須重建,或者無(wú)法再次啟動(dòng),則DBA_2PC_PENDING中的記錄也無(wú)法自動(dòng)清除,需要使用DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY過(guò)程來(lái)清除。
Oracle9i中,當(dāng)使用上述兩個(gè)過(guò)程時(shí),必須處于UNDO_MANAGEMENT=MANUAL的模式,這個(gè)限制條件Oracle沒(méi)有寫(xiě)到文檔中。一般使用9i都會(huì)使用AUTO模式(Oracle也是這樣推薦的),也就是說(shuō),想要清除DBA_2PC_PENDING中的信息,必須重起數(shù)據(jù)庫(kù)兩次,感覺(jué)這兩個(gè)過(guò)程的實(shí)際用處不大。
出現(xiàn)無(wú)法解決的分布式事務(wù)時(shí),可能會(huì)鎖住分布式事務(wù)中涉及的表,由于Oracle無(wú)法確定哪些數(shù)據(jù)是提交過(guò)的,哪些是沒(méi)有提交的,無(wú)法確定查詢操作可見(jiàn)的結(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存儲(chǔ)過(guò)程入門(mén)學(xué)習(xí)基本語(yǔ)法
Oracle存儲(chǔ)過(guò)程基本語(yǔ)法學(xué)習(xí)入門(mén)必備2008-09-09
Oracle下時(shí)間轉(zhuǎn)換在幾種語(yǔ)言中的實(shí)現(xiàn)
Oracle下時(shí)間轉(zhuǎn)換在幾種語(yǔ)言中的實(shí)現(xiàn)...2007-04-04
oracle應(yīng)用程序?qū)崿F(xiàn)打包 的方法
oracle應(yīng)用程序?qū)崿F(xiàn)打包 的方法...2007-04-04
Oracle 自增(auto increment) 或 標(biāo)識(shí)字段的建立方法
SQL SERVER 和 ACCESS 以及 MYSQL 中, 都有一種 自增字段, 通常被用來(lái)做 主鍵 或 索引鍵, 但是 ORACLE 中,確并沒(méi)有提供這種字段類(lèi)型(實(shí)際并不是一種字段類(lèi)型) ,但我們確經(jīng)常需要這個(gè)功能。2008-11-11
Oracle存儲(chǔ)過(guò)程之?dāng)?shù)據(jù)庫(kù)中獲取數(shù)據(jù)實(shí)例
介紹Oracle數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)的存儲(chǔ)過(guò)程示例 ,在表A取得的數(shù)據(jù)插入另一個(gè)表B中2008-09-09
java.sql.SQLException: 內(nèi)部錯(cuò)誤: Unable to construct a Datum fro
Unable to construct a Datum from the specified input的解決方法2008-09-09

