1

我有兩臺服務器,第一臺使用SQL Server 2005,第二臺使用SQL Server 2000.我想將數據從2005插入到2000,我希望做到不同步(沒有分佈式事務,因爲使用「保存事務」)。在SQL Server 2000上插入數據的SQL Server Service Broker

將信息插入到2000服務器的表中之後,會觸發一些替代觸發器來處理此信息。

在這種情況下,我決定使用Service Broker。所以我有一個存儲過程將信息從一臺服務器插入到另一臺服務器,並且完美地工作。

但是,當我從目標隊列過程消息過程調用此過程失敗,我不知道爲什麼!我知道它的工作原理是因爲當我使用相同的結構(隊列&存儲過程)在一臺SQL 2005服務器上將一個數據庫複製到另一個數據庫時。

因此,它只能在機器之間失敗,任何人都知道爲什麼或者如何獲得有關失敗原因的更多信息?或者如何插入數據異步(我不能使用SQL代理,因爲我想更頻繁地插入信息超過1分鐘)。

回答

1

通常的問題是,SSB過程使用WAITFOR和WAITFOR是分佈式事務不兼容。唯一的解決方案是擺脫WAITFOR(RECEIVE)並使用普通的RECEIVE。

+0

@Remus:我不使用顯式事務(分發或不分發),甚至不使用WAITFOR(接收)。我只是使用插入到鏈接的服務器,但也許有一個隱式的分佈式事務。我會嘗試!! – Alex 2009-11-30 19:59:31

+0

插入到鏈接服務器是一個分佈式事務。由於WAITFOR在內部創建保存點,因此與分佈式事務處理器不兼容,因此插入到鏈接的服務器上。 – 2009-11-30 20:08:00

0

考慮使用鏈接服務器而不是服務代理。隨着鏈接的服務器,您可以:

insert into LinkedServer.The2000Db.dbo.The2000Table 
(col1, col2, col3) 
select col1, col2, col3 
from The2005Table 
+0

是的,當然,用於將信息從一臺服務器插入到另一臺服務器的存儲過程已使用鏈接服務器插入。 – Alex 2009-11-30 15:54:06

+0

@Alex:鏈接服務器上的安全性如何配置?如果它是「使用登錄的當前安全上下文」,請嘗試用固定上下文替換它 – Andomar 2009-11-30 15:58:58