我有應用程序代碼在本地數據庫和遠程數據庫中的記錄(通過Oracle數據庫鏈接)中插入一條記錄。當我提交這個分佈式事務時,它確保本地和遠程數據庫都會同時提交或者都進行回滾,或者有可能遠程服務器可以提交,但是本地提交會失敗(反之亦然)?分佈式數據庫事務是否保證提交/回滾?
1
A
回答
6
如果Oracle不使用Two-Phase Commit(2PC)協議的等價物,那麼確保既可以同時提交也可以同時進行回滾,我會感到驚訝。
對於2PC,有一個階段稱爲預提交階段,其中主(協調器)實例記錄其自己的決定並告訴所有參與者準備提交(並報告其狀態 - 必須失敗或可提交) 。參與者也準備好提交,並且(如果他們可以提交)在告訴協調員準備好提交之後等待協調員的進一步指示。當所有參與者都做出迴應時,協調員記錄最終決定,並將決定發送給參與者,並根據其決定行事。如果主人在記錄了決策之後但在成功地將決定發送給參與者之前失敗,則參與者可以掛在他們既不能提交也不能回滾的狀態。有辦法從中恢復。如果協調員保持足夠長的時間(例如,由於災難性的硬件故障而停止使用),則最終會出現問題;參與者最終會做一次啓發式回滾(推測回滾) - 但這需要非常糟糕的運氣來引起任何麻煩。
有2PC的替代品;最終結果是相同的 - 所有提交或全部回滾。
相關問題
- 1. 應用於數據庫的事務更新,無論是否提交或回滾
- 2. 分佈式事務是否
- 3. datastage中的數據庫事務(提交和回滾)
- 4. 分佈式數據庫事務
- 5. Spring MVC - 分佈式數據庫事務
- 6. 在只讀數據庫事務之後,提交還是回滾會更好?
- 7. 在分佈式環境中處理嘗試捕獲和事務回滾/提交
- 8. 回滾事務提交返回錯誤
- 9. 當提交失敗時,Nhibernate是否會回滾事務?
- 10. EF5 DbContext.SaveChanges是否處理事務提交和回滾?
- 11. 顯式事務回滾是否必需?
- 12. SQL事務回滾並提交
- 13. 提交和回滾Oracle事務
- 14. Django models.py事務回滾/提交問題
- 15. 在rails中提交回滾事務
- 16. 回滾先前提交的事務
- 17. mysql事務(提交和回滾)
- 18. 回滾提交的數據
- 19. 多個數據庫的事務回滾
- 20. Grails - 回滾管理數據庫事務
- 21. Laravel 5.2執行多個數據庫事務,然後提交或回滾失敗
- 22. begin_nested()是否自動回滾/提交?
- 23. 數據庫事務只能部分提交
- 24. 保存或刪除時,數據存儲事務是否需要回滾?
- 25. ItemWriter回滾但數據提交到數據庫
- 26. 驗證Oracle數據庫回滾操作是否成功
- 27. 是否有可能使用php來執行mysql數據庫事務和回滾?
- 28. Hibernate事務回滾是否工作?
- 29. 分佈式事務中的合法回滾:可能嗎?
- 30. 爲什麼TransactionScope不回滾分佈式事務?
如果他們對每臺服務器的獨立事務處理相同,那麼分佈式事務處理會有什麼意義? (允許您關注的提交/回滾不匹配) – 2011-02-07 14:32:41
@Damien_The_Unbeliever:我同意,但我只是沒有看到每種可能性如何被解釋。喬納森的回答是有道理的 - 似乎仍然有一些情況下,如果一個系統發生災難性故障,事情就會被掛起,但絕大多數情況都會被處理。 – 2011-02-07 15:19:38