2009-12-09 65 views
1

我一直在遇到一個錯誤,我認爲這是由於數據庫正在處理和讀取到數據庫中的大量數據導致數據庫超時。數據庫事務超時問題

我不斷收到此錯誤信息:

分佈式事務已完成。 要麼將​​此會話列入新的 事務或NULL事務。

我計時超時需要多長時間,並且時間一直在60秒左右。因此,我認爲它可能與組件服務(Windows XP)中設置的事務超時限制(默認60秒)有關。我把它增加到了300秒。

如果沒有工作,我加入編輯的machine.config文件:

<system.transactions> 
    <machineSettings maxTimeout="02:00:00" /> 
</system.transactions> 

這也不能工作。

我不認爲這與我的數據有任何關係。它是從Excel電子表格中讀取的。當我將電子表格分成兩個單獨的文件時,它運行良好。

希望我只是想失去一些簡單的事情,像另一個最大超時設置的地方。

希望有人遇到過這個!

編輯:我正在使用SQL Server和Linq2SQL。

+0

Andrew,您可能想告訴我們您正在使用哪個數據庫(SQL Server?)。 – 2009-12-09 00:26:55

+0

您是否看到錯誤消息的搜索結果? http://www.bing.com/search?q=Distributed+transaction+completed.+Either+enlist+this+session+in+a+new+transaction+or+the+NULL+transaction.&src=IE-SearchBox&FORM = IE8SRC – 2009-12-09 00:27:25

+0

@Mike - 是的,我已經做了谷歌搜索。 – Andrew 2009-12-09 00:46:31

回答

1

我不知道爲什麼,但我通過去解決這個問題導入web.config並加入:

<system.transactions> 
    <defaultSettings timeout="02:00:00"/> 
</system.transactions> 

我認爲這個設置將從machine.config繼承。也許他們是兩種不同的超時設置?我不知道。

如果有人有額外的說明,請評論!

編輯1:另外,如果有人使用ASP.NET Ajax控件,請務必增加腳本管理器的AsyncPostBackTimeout屬性以適應更長的時間段。

編輯2:我刪除了添加到machine.config中的行,並將分佈式事務超時設置重置爲默認設置。這看起來沒有任何影響,只要修改了web.config文件和腳本管理器,我的程序就可以正常運行。

+0

還有一個web.config默認文件。該站點的web.config文件繼承自該文件,該文件從machine.config繼承。換句話說,web.config和machine.config之間的繼承鏈中有另一個文件,它設置默認值。 – 2009-12-10 23:52:25

+0

我明白了。如果這個web.config默認文件保存在哪裏? – Andrew 2009-12-10 23:59:15

4

安德魯,我不認爲這是由超時造成的。否則,你會收到一個特定的超時錯誤。這很可能是一個編程錯誤。我自己也遇到過這種情況,而且幾乎一直是我製作不當的代碼導致問題。

我認爲你有另一個問題。長時間運行交易並不是一個好主意。如果你的公司有DBA的話,他們可能會出於好的理由而拋棄這個。您在很長一段時間內鎖定了大量資源。有些事情會因此而受到影響。

順便說一句,如果您擔心超時,請檢查連接字符串上的超時設置。

蘭迪

0

要更改超時,你可以在你的數據上下文設置CommandTimeout屬性:

var db = new YourDataContext(); 
db.CommandTimeout = 300; 

說了這麼多,你有一個分佈式事務的任何時間,這是值得細細品味在原因,並儘量避免他們 - 你的問題可能與此有關,而不是一個超時......