我們很難追蹤我們的某個軟件解決方案中的錯誤,這些錯誤有時會導致公開交易。我們在許多網站上都有這個應用程序正在製作(閱讀:70+),而今年迄今爲止我們僅在兩個不同的位置看到過這個問題。強制一個事務從另一個連接提交?
我們遇到的問題是從常量連接打開到SQL Server的事務。使用dbcc opentran
顯示有一筆交易尚未開啓。在今天的情況下,它從上午9點30分開始,然後我們在下午1點才意識到它。用連接關閉程序將導致交易被關閉/取消,並且迄今爲止所有的數據都丟失了。
使用dbcc opentran
它迴應打開的交易的名稱是user_transaction
。試圖用commit tran user_transaction
關閉它會給出The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION.
的錯誤。
我可以理解你幾乎從不想在沒有事先連接的知識的情況下強制執行事務,但是有什麼辦法可以這麼做嗎?在這種情況下,我們關閉了該計劃,我們失去了半天的業務價值數據。
謝謝。
不幸的是,你需要跟蹤在哪裏錯過了關閉。如果事務打開時間超過一定的時間,您可以考慮使用SQL代理向您發送電子郵件。通過這種方式,您可以開始追蹤導致這種情況的原因,如果您能夠在10分鐘左右的時間內捕獲錯誤,至少結束程序的數據丟失將會小得多。 – liebs19
對['KILL'](http://msdn.microsoft.com/zh-cn/library/ms173730.aspx)中的事務處於無效狀態並不重要,這就是您應該查看的內容,而不是強制提交。 –