我在我們的應用程序創建的數據庫服務器上面臨一些鎖。我不明白的是Sleeping的一個流程是如何進行一個開放式交易的(流程71是創建Lock的流程)。怎樣纔能有一個正在睡眠掛起事務的SQL連接?
據我所知,當一個進程完成時,它會關閉所有打開的事務。這是否恰當?
在預先感謝隊友。
我在我們的應用程序創建的數據庫服務器上面臨一些鎖。我不明白的是Sleeping的一個流程是如何進行一個開放式交易的(流程71是創建Lock的流程)。怎樣纔能有一個正在睡眠掛起事務的SQL連接?
據我所知,當一個進程完成時,它會關閉所有打開的事務。這是否恰當?
在預先感謝隊友。
據我知道,當 完成這一個過程中關閉所有打開的 交易。是對的嗎?
不。如果您明確地打開了一個交易,您必須明確地指定commit
或rollback
。在此之前,事務保持打開狀態,因此完全有可能使連接閒置(目前不處理任何任務),但仍有未提交的事務。
很多人想到的是一個錯誤會自動回滾事務,但事實並非如此,除非你有
set xact_abort on
如果進程意外掛起或終止,該怎麼辦?交易永遠在那裏? – 2010-12-01 13:56:39
據我知道,當 完成這一個過程中關閉所有打開的 交易。這是否恰當?
是的。但它不能保證,你不應該依賴它。您必須明確關閉連接。
看到最後一個字段,您會看到「Open Tran(sactions)」設置爲1. – 2010-12-01 13:59:33