Sql-Server

如何在目前伺服器中為它所在的每個數據庫編寫所有服務代理元素的腳本?

  • November 14, 2018

我在不同的伺服器上執行服務代理。

就在最近,我不得不重建其中一台測試伺服器,它執行著一個完整的服務代理解決方案。

下次我需要重建一個在其任何數據庫中執行服務代理的伺服器

我想為該特定數據庫編寫所有服務代理架構的腳本

-- Message Types
SELECT * 
FROM sys.service_message_types;

在此處輸入圖像描述

基本上使用下面的腳本,我怎樣才能為特定數據庫編寫所有服務代理元素的腳本?

-- Message Types
SELECT * 
FROM sys.service_message_types;

-- Contracts
SELECT * 
FROM sys.service_contracts;

-- Queues
SELECT * 
FROM sys.service_queues;

-- Services
SELECT * 
FROM sys.services;

-- routes
SELECT * 
FROM sys.routes;


-- Endpoints
SELECT * 
FROM sys.endpoints;

在此處輸入圖像描述

在看到David Browne 最近的評論後

SSDT / SqlPackage 支持 Service Broker 對象。

我試了一下。我根據這裡的展示創建了一些服務代理對象:

然後我從這裡下載 DAC 框架:

然後我執行了這個命令(沒有輸入):

sqlpackage 
 /Action:extract 
 /SourceServerName:.\instancename
 /SourceDatabaseName:AsyncProcessingDemo 
 /TargetFile:C:\scripts\sb.dacpac

然後我轉到c:\scripts,右鍵點擊 dacpac 文件,然後選擇Unpack…

在此處輸入圖像描述

這要求我提供一個輸出文件夾:

在此處輸入圖像描述

我點擊Unpack,進入那個文件夾,裡面有四個文件,包括model.xml

在此處輸入圖像描述

果然,那個 .sql 文件包含所有代理對象的腳本,以幾乎正確的順序組裝。它生成了一個腳本,其中包含在它所依賴的消息類型之前創建的合約。所以你最終會得到:

CREATE CONTRACT ... ([MessageType1] SENT BY INITIATOR, ...
GO
CREATE MESSAGE TYPE [MessageType1]...

您需要翻轉它們,以便首先創建消息類型。

我確信 SqlPackage.exe 和/或 DAC 嚮導有辦法將其限制為僅服務代理對象,但這應該是一個好的開始。

引用自:https://dba.stackexchange.com/questions/222362