2013-02-14 130 views
1

我們有一個連接到另一個SQL服務器「server2」的SQL Server 2008「server1」的設置。 在「服務器2」,有一個存儲過程,我可以查詢從「服務器1」就好:從鏈接服務器存儲過程插入數據到表

EXEC [server2].[xx].[dbo].[sp] param 

然而,當我開始插入從鏈接服務器SP的數據,我們遇到的問題。 我們使用下面的代碼:

INSERT INTO server1.dbo.table (column1, column2, ...) 
EXEC [server2].[xx].[dbo].[sp] param 

當我們開始的時候,我們收到像「已知的」錯誤:

OLE DB提供程序「SQLNCLI」鏈接服務器「linkedserver」返回消息「合作伙伴交易管理器已禁用其對遠程/網絡交易的支持。「消息7391,級別16,狀態2,行2無法執行該操作,因爲鏈接服務器「linkedserver」的OLE DB提供程序「SQLNCLI」無法啓動分佈式事務。

正如在類似的問題,如說: inserting to a local table from a linked stored procedure Inserting Results Of Stored Procedure From Linked Server

所以,我們配置了兩臺服務器上MSDTC。現在,在查詢運行20秒,然後用錯誤信息中止:

OLE DB提供程序「SQLNCLI10」鏈接服務器「服務器2」返回消息「無事務處於活動狀態。」 消息7391,級別16,狀態2,行14 該操作無法執行,因爲鏈接服務器「server2」的OLE DB提供程序「SQLNCLI10」無法啓動分佈式事務。

與以前的錯誤相反,Windows事件日誌中沒有任何內容。

首先,我的查詢被視爲分佈式事務,因爲INSERT插入到本地表中?

其次,如果我嘗試執行這樣的分佈式查詢:

begin distributed tran 
select * from [server2].master.sys.sysprocesses 
commit tran 

我整整20秒後得到完全相同的錯誤消息。

我不知道如何從這裏進一步調查。它可能是防火牆問題嗎?

+0

試試這個 - http://armaitus.wordpress.com/2011/09/30/sql-server-2008-inserting-from-a-stored-procedure-via-linked-servers/ – 2013-02-14 15:01:57

回答

0

如果你不需要分佈式事務,上面@ rs鏈接的解決方案對我很有幫助。在這裏重複解決方案:

EXECUTE sp_serveroption @server = '<remote_linked_server_name>', @optname = 'remote proc transaction promotion', @optvalue = 'false'; 

這告訴sql服務器實例不提升交易到鏈接服務器。請注意,這可能會產生其他後果,請謹慎使用。

相關問題