簡體   English   中英

如果客戶死亡,我們應該期待什么樣的交易行為?

[英]what transaction behavior should we expect if the client dies?

BEGIN;

UPDATE saving SET balance = balance - 100.00 WHERE name = 'Alice';

UPDATE checking SET balance = balance + 100.00 WHERE name = 'Alice';

COMMIT

在此事務期間,我的客戶在提交之前死亡。 我期望數據庫的狀態如何?

讓我使用來自http://java.sun.com/developer/onlineTraining/Programming/JDCBook/bmp4.html的具體示例

頁面末尾顯示的示例具有明確的“提交”或“回滾”邏輯。 但是,如果客戶端進程在操作后立即死亡,將會發生什么:

“ AuctionItem ai = home.create(賣方,描述,拍賣日,起始價,摘要);”

客戶沒有機會捕獲異常以進行回滾,也沒有機會進行提交。

最終,操作系統中的tcp keep alive機制將終止連接。 這樣做時,數據庫將回滾事務,因為這是沒有顯式提交的唯一選擇。 當連接處於活動狀態和空閑狀態時,您將對數據進行鎖定,並在pg_stat_activity表中具有一個條目,指示“事務中的空閑”。 另一個連接對事務已鎖定的行的任何更新將等待其提交/回滾。

默認的tcp_keepalive超時為2小時,重試時間為奇數分鍾。

如果沒有自動提交,那么如果DBMS不執行提交,則值將不會更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM