Sql-Server
如何在目前伺服器中為它所在的每個數據庫編寫所有服務代理元素的腳本?
我在不同的伺服器上執行服務代理。
就在最近,我不得不重建其中一台測試伺服器,它執行著一個完整的服務代理解決方案。
下次我需要重建一個在其任何數據庫中執行服務代理的伺服器
-- 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;
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 嚮導有辦法將其限制為僅服務代理對象,但這應該是一個好的開始。