1

背景: 我們有開發under.NET Framework 2.0的網站,它使用與SQL Server 2005創建的數據庫,我們也有一個網站是在.NET Framework 4.0下開發的,這個網站使用Sql Server 2008創建的數據庫。我們將兩個數據庫(從Sql Server 2005到Sql Server 2008)連接起來,在Sql Server 2005數據庫上創建一個「鏈接服務器」。Microsoft分佈式事務處理協調器(MS DTC)已取消分佈式事務

場景: 當我們創建SQL Server 2005中託管,我們有交易的這個序列數據庫上的記錄: 插入記錄到的SQL Server 2005數據庫託管表。 該插入插入後執行觸發器。 在觸發器內部,我們執行一個存儲過程(在Sql Server 2008數據庫中託管),並使用「鏈接服務器」執行此存儲過程。 此存儲過程對Sql Server 2008數據庫中託管的表執行插入操作。 如果我們使用Sql Server Management Studio 2005手動執行對Sql Server 2005數據庫中承載的表的插入操作,一切都會得到很好的執行,但如果我們嘗試使用網站的UI(.NET 2005)創建記錄,我們得到這個錯誤:

當前事務不能被提交,並且不能支持寫入日誌文件的操作。回滾事務。 Microsoft分佈式事務處理協調器(MS DTC)已取消分佈式事務。

有誰知道發生了什麼事?

回答

0

我覺得在觸發器中執行這樣的代碼非常危險。我會考慮刪除觸發器並創建執行所描述操作的過程。

要正確測試所有應該在兩個服務器上的一個事務中調用DML操作,或者您應該通過調用「begin distributed tran」明確地開始分佈式事務。如果你只是更新其他服務器上的某些東西(只有一個動作),那麼你沒有使用分佈式事務並且測試不正確。