我們有一個連接到另一個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秒後得到完全相同的錯誤消息。
我不知道如何從這裏進一步調查。它可能是防火牆問題嗎?
試試這個 - http://armaitus.wordpress.com/2011/09/30/sql-server-2008-inserting-from-a-stored-procedure-via-linked-servers/ – 2013-02-14 15:01:57