ORA-01591錯誤故障處理

aa321789發表於2022-03-09

Oracle  對ORA-01591錯誤的描述是"lock held by in-doubt distributed transaction %s,由分散式事務持有鎖造成的。通過錯誤的cause可以看到’Trying to access resource that is locked by a dead two-phase commit transaction that is in prepared state’該錯誤是由訪問一個處於prepared狀態的二階段事務所持有鎖的資源造成的。

下面簡單介紹一下分散式事務。

分散式事務,簡單來說,是指一個事務在本地和遠端執行,本地需要等待確認遠端的事務結束後,進行下一步本地的操作。如通過dblink update遠端資料庫的一行記錄,如果在執行過程中網路異常,或者其他事件導致本地資料庫無法得知遠端資料庫的執行情況,此時就會發生in doublt的報錯。此時需要dba介入,且需要分多種情況進行處理。

分散式事務的,會經歷3個階段:

1.PREPARE PHASE 

1.1   決定哪個資料庫為commit point site。(注,引數檔案中commit_point_strength值高的那個資料庫為commit point site)

1.2   全域性協調者(Global Coordinator)要求所有的點(除commit point site外)做好commit或者rollback的準備。此時,對分散式事務的表加鎖。

1.3   所有分散式事務的節點將它的scn告知全域性協調者。

1.4   全域性協調者取各個點的最大的scn作為分散式事務的scn。

至此,所有的點都完成了準備工作,我們開始進入COMMIT PHASE階段,此時除commit point site點外所有點的事務均為in doubt狀態,直到COMMIT PHASE階段結束。

2.COMMIT PHASE 
2.1 Global Coordinator將最大scn傳到commit point site,要求其commit。
2.2 commit point嘗試commit或者rollback。分散式事務鎖釋放。
2.3 commit point通知Global Coordinator已經commit。
2.4 Global Coordinator通知分散式事務的所有點進行commit。

3.FORGET PHASE 
3.1 參與的點通知commit point site他們已經完成commit,commit point site就能忘記(forget)這個事務。
3.2 commit point site在遠端資料庫上清除分散式事務資訊。
3.3 commit point site通知Global Coordinator可以清除本地的分散式事務資訊。
3.4 Global Coordinator清除分散式事務資訊。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70014920/viewspace-2868740/,如需轉載,請註明出處,否則將追究法律責任。

相關文章