2013-10-14 29 views
4

我有一個SQL Server 2005過程需要修改以調用鏈接服務器上的過程。我的本地程序被其他幾個程序調用,總是在一個事務中。在沒有分佈式事務的情況下在鏈接服務器上調用過程

如果我將調用添加到鏈接服務器,那麼在運行時我會收到一條消息,指出OLE DB提供程序無法啓動分佈式事務。

這對我來說很好:據我所知,遠程過程不會做任何數據庫更改。我不需要它在事務內部,因此不需要分佈式事務。

但我懷疑我沒有這個選項,沒有辦法關閉事務擴展到鏈接服務器。它是否正確?

(我可以通過重構這些過程來避免這個問題,以便在父進程中調用鏈接的服務器,但是在邏輯上它屬於這個子進程,所以我想保留它在那裏。)

謝謝,所有。

+0

即使SELECT在交易中運行。隱含的,因爲他們需要發出鎖等我懷疑這可能是你遇到的。請參閱此鏈接http://technet.microsoft.com/en-us/library/ms188317(v=sql.105).aspx – Namphibian

回答

8

事實證明,如果你是SQL Server 2008或以上,你必須控制該服務器選項:

EXEC sp_serveroption 'servername', 'remote proc transaction promotion', 'false' 

(見sp_serveroption (Transact-SQL))。

但我在SQL Server 2005,它沒有這個選項。所以我進一步調查,發現MSDTC在我使用的機器上禁用了網絡交易,這就是遠程交易失敗的原因。我能夠通過DBA啓用此功能。

相關問題