2017-03-05 63 views
0

我有關於數據庫事務處理的問題。數據庫如何在事務中處理此狀態?

如果數據庫在事務將一些數據寫入持久存儲但不是全部時關閉,它們如何解決此狀態?

(+)具有自動重試邏輯的客戶端如何處理狀態數據庫完成事務,但在得到響應之前已斷開連接?

感謝您的閱讀。

回答

0

DBMS崩潰恢復的常見解決方案是在ARIES算法中使用的解決方案。 簡單地說,數據庫維護一個write-ahead-log,在應用這些修改之前,所有的修改都被寫入其中。 發生崩潰後,恢復管理器撤銷未提交的更改,並確保將所有提交的更改寫入磁盤。

(+)關係數據庫的好處是他們提供ACID保證。 由於durability屬性,客戶端確信所有成功提交的事務都反映在磁盤上,因此不需要以特殊方式處理DBMS崩潰情況。

+0

有沒有辦法控制這個?/ 1)請求事務客戶端 - > DB/ 2)在DB處理事務/ 3)斷開客戶端之前得到了事務響應/ 4)客戶端嘗試重新連接到DB/ 5)客戶端重試請求事務再次/ = >交易請求兩次。 (兩個請求 - >兩個事務)/ 有沒有辦法來防止呢?/ 我認爲解決此問題的唯一方法是在重試請求之前檢查。/ 但它很重。 – RedJune

+0

這個問題是與http://stackoverflow.com/questions/42605651/how-to-handle-message-that-failed-to-response-success-but-success-commit-to-dat – RedJune

+0

我認爲你是對。在你的場景中,只有數據庫知道事務是否成功,所以似乎客戶端知道是否需要重試的唯一方法是詢問數據庫。 –