2011-05-17 48 views
2

我們正在探索兩種不同的SQL Server實例之間進行通信的不同方法。所需的工作流程之一是向「遠程」方發送某種消息,請求刪除記錄。當系統完成刪除操作後,它保持其事務處於打開狀態,並將響應發送回發起者,發起者然後刪除其相應的記錄,提交其事務,然後將消息發送回「遠程」端,最後告訴它,也要在其一邊進行刪除。SQL Server服務代理 - 處理SQL Server實例之間的兩階段提交的建議

這是一個窮人近似的兩階段提交。關於SQL Server Service Broker是否可以或不能合理處理這種場景,有關部門正在進行一場宗教辯論。任何人都可以闡明它是否可以?任何類似工作流程的經驗?考慮到SQL Server實例位於單獨的非域計算機上,是否有更好的機制可以實現這一目標?

編輯:爲了澄清,我們不能使用分佈式事務,因爲網絡安全性既嚴格又有些隨意。我們不允許這樣做的配置。

回答

5

除非我誤解了需求,否則我認爲這對於Service Broker來說是一項完美的工作。 Service Broker可以讓您免去使用分佈式事務和2PC的需要。您對Service Broker所做的工作是將問題減少到服務器之間的本地事務和事務消息傳遞。

在您的特定情況下,其中一臺服務器將刪除其記錄,然後(作爲同一事務的一部分)向另一臺服務器發送消息,請求刪除相應的記錄。排隊消息後,第一臺服務器可以提交該事務,並且不用等待與第二臺服務器的同步就可以忘記整個事務。 Service Broker保證一旦提交了消息排隊,消息就會被交易傳遞到目的地,然後它可以刪除其記錄,作爲其接收消息的同一事務的一部分,從而確保消息處理和數據更改是原子的。

+0

我強烈地同意這一點。唯一值得擔心的是消息交換不是直接的,而是像它發生時發生的任何基於SOA的系統一樣。如果這不是一個選項,那麼Service Broker將無法爲您工作。 – 2011-05-22 12:07:37

+0

我打算接受這個答案,因爲我認爲你是正確的,Service Broker的保證交付不需要2PC機制。我沒有像你說的那樣想到它。謝謝! – mwigdahl 2011-05-23 15:11:25

1

您是否嘗試過使用分佈式事務?

它會做你需要的一切,但每個服務器都需要連接到對方作爲鏈接服務器。

+0

謝謝!這是一個很好的建議,但由於網絡安全問題,我們無法使用鏈接的服務器,因此它不適用於我們。 – mwigdahl 2011-05-17 15:40:38