如何:建立發送訂閱 (複寫 Transact-SQL 程式設計)

您可以使用複寫預存程序以程式設計的方式建立發送訂閱。使用哪些預存程序要依訂閱所屬的發行集類型而定。

安全性注意事項安全性注意事項

可能的話,會在執行階段提示使用者輸入安全性認證。如果您必須將認證儲存在指令碼檔案中,則必須維護這個檔案的安全性,使他人無法在未獲授權的情況下擅自存取。

建立快照式或交易式發行集的發送訂閱

  1. 在發行集資料庫的「發行者」上,確認發行集確實是藉由執行 sp_helppublication 來支援發送訂閱。

    • 如果 allow_push 的值為 1,則發送訂閱受到支援。

    • 如果 allow_push 的值為 0,請執行 sp_changepublication,將 @property 指定為 allow_push,並將 @value 指定為 true

  2. 在發行集資料庫的「發行者」上,執行 sp_addsubscription。指定 @publication@subscriber@destination_db。將 @subscription_type 的值指定為 push。如需有關如何更新訂閱的詳細資訊,請參閱<如何:建立交易式發行集的可更新訂閱 (複寫 Transact-SQL 程式設計)>。

  3. 在發行集資料庫的「發行者」上,執行 sp_addpushsubscription_agent。指定下列項目:

    • @subscriber@subscriber_db@publication 參數。

    • Microsoft Windows 認證,「散發者」上的「散發代理程式」執行時會針對 @job_login@job_password 使用該認證。

      [!附註]

      使用「Windows 整合式驗證」建立的連接一律使用由 @job_login@job_password 指定的 Windows 認證。「散發代理程式」一律使用「Windows 整合式驗證」建立到「散發者」的本機連接。依預設,代理程式會使用「Windows 整合式驗證」連接到「訂閱者」。

    • (選擇性) @subscriber_security_mode 的值 0,以及 @subscriber_login@subscriber_password 的 Microsoft SQL Server 登入資訊。如果您在連接到「訂閱者」時需要使用「SQL Server 驗證」,請指定這些參數。

    • 此訂閱之「散發代理程式」作業的排程。如需詳細資訊,請參閱<如何:指定同步排程 (複寫 Transact-SQL 程式設計)>。

    安全性注意事項安全性注意事項

    利用遠端「散發者」來建立「發行者」上的發送訂閱時,提供給所有參數的值 (包括 job_login 和 job_password) 都會以純文字格式傳給「散發者」。您應該先加密「發行者」及其遠端「散發者」之間的連接,再執行這個預存程序。如需詳細資訊,請參閱<加密 SQL Server 的連接>。

建立合併式發行集的發送訂閱

  1. 在發行集資料庫的「發行者」上,確認發行集確實是藉由執行 sp_helpmergepublication 來支援發送訂閱。

    • 如果 allow_push 的值為 1,則發行集支援發送訂閱。

    • 如果 allow_push 的值為 1,請執行 sp_changemergepublication,將 @property 指定為 allow_push,並將 @value 指定為 true

  2. 在發行集資料庫的「發行者」上,執行 sp_addmergesubscription 並指定下列參數:

    • @publication。這是發行集的名稱。

    • @subscriber_type。將客訂閱指定為 local,並將主訂閱指定為 global

    • @subscription_priority。指定主訂閱的訂閱優先權 (從 0.0099.99)。

      如需詳細資訊,請參閱<進階合併式複寫衝突偵測與解決>。

  3. 在發行集資料庫的「發行者」上,執行 sp_addmergepushsubscription_agent。指定下列項目:

    • @subscriber@subscriber_db@publication 參數。

    • Windows 認證,「散發者」上的「合併代理程式」執行時會針對 @job_login@job_password 使用該認證。

      [!附註]

      使用「Windows 整合式驗證」建立的連接一律使用由 @job_login@job_password 指定的 Windows 認證。「合併代理程式」一律使用「Windows 整合式驗證」建立到「散發者」的本機連接。依預設,代理程式會使用「Windows 整合式驗證」連接到「訂閱者」。

    • (選擇性) @subscriber_security_mode 的值 0,以及 @subscriber_login@subscriber_password 的 SQL Server 登入資訊。如果您在連接到「訂閱者」時需要使用「SQL Server 驗證」,請指定這些參數。

    • (選擇性) @publisher_security_mode 的值 0,以及 @publisher_login@publisher_password 的 SQL Server 登入資訊。如果您在連接到「發行者」時需要使用「SQL Server 驗證」,請指定這些值。

    • 此訂閱之「合併代理程式」作業的排程。如需詳細資訊,請參閱<如何:指定同步排程 (複寫 Transact-SQL 程式設計)>。

    安全性注意事項安全性注意事項

     利用遠端「散發者」來建立「發行者」上的發送訂閱時,提供給所有參數的值 (包括 job_login 和 job_password) 都會以純文字格式傳給「散發者」。您應該先加密「發行者」及其遠端「散發者」之間的連接,再執行這個預存程序。如需詳細資訊,請參閱<加密 SQL Server 的連接>。

範例

下列範例會建立交易式發行集的發送訂閱。登入和密碼值是在執行階段使用 sqlcmd 指令碼變數所提供。

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables  
-- on the command line and in SQL Server Management Studio, see the 
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorks2008R2Replica';

--Add a push subscription to a transactional publication.
USE [AdventureWorks2008R2]
EXEC sp_addsubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @destination_db = @subscriptionDB, 
  @subscription_type = N'push';

--Add an agent job to synchronize the push subscription.
EXEC sp_addpushsubscription_agent 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO

下列範例會建立合併式發行集的發送訂閱。登入和密碼值是在執行階段使用 sqlcmd 指令碼變數所提供。

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). For information about how to use scripting variables  
-- on the command line and in SQL Server Management Studio, see the 
-- "Executing Replication Scripts" section in the topic
-- "Programming Replication Using System Stored Procedures".

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @hostname AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorks2008R2Replica'; 
SET @hostname = N'adventure-works\david8'

-- Add a push subscription to a merge publication.
USE [AdventureWorks2008R2]
EXEC sp_addmergesubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @subscription_type = N'push',
  @hostname = @hostname;

--Add an agent job to synchronize the push subscription.
EXEC sp_addmergepushsubscription_agent 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO