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

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

ms146912.security(zh-tw,SQL.90).gif安全性注意事項:
可能的話,會在執行階段提示使用者輸入安全性認證。如果您必須將認證儲存在指令碼檔案中,則必須維護這個檔案的安全性,使他人無法在未獲授權的情況下擅自存取。

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

  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。如需有關如何更新訂閱的詳細資訊,請參閱<How to: Create an Updatable Subscription to a Transactional Publication (Replication Transact-SQL Programming)>。

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

    • @subscriber@subscriber_db@publication 參數。
    • Microsoft Windows 認證,「散發者」上的「散發代理程式」執行時會針對 @job_login@job_password 使用該認證。
      ms146912.note(zh-tw,SQL.90).gif附註:
      使用「Windows 整合式驗證」建立的連接一律使用由 @job_login@job_password 指定的 Windows 認證。「散發代理程式」一律使用「Windows 整合式驗證」建立到「散發者」的本機連接。依預設,代理程式會使用「Windows 整合式驗證」連接到「訂閱者」。
    • (選擇性) @subscriber_security_mode 的值 0,以及 @subscriber_login@subscriber_password 的 Microsoft SQL Server 登入資訊。如果您在連接到「訂閱者」時需要使用「SQL Server 驗證」,請指定這些參數。
    • 此訂閱之「散發代理程式」作業的排程。如需詳細資訊,請參閱<How to: Specify Synchronization Schedules (Replication Transact-SQL Programming)>。
    ms146912.security(zh-tw,SQL.90).gif安全性注意事項:
    利用遠端「散發者」來建立「發行者」上的發送訂閱時,提供給所有參數的值 (包括 job_loginjob_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 使用該認證。
      ms146912.note(zh-tw,SQL.90).gif附註:
      使用「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 驗證」,請指定這些值。
    • 此訂閱之「合併代理程式」作業的排程。如需詳細資訊,請參閱<How to: Specify Synchronization Schedules (Replication Transact-SQL Programming)>。
    ms146912.security(zh-tw,SQL.90).gif安全性注意事項:
    利用遠端「散發者」來建立「發行者」上的發送訂閱時,提供給所有參數的值 (包括 job_loginjob_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'AdventureWorksReplica';

--Add a push subscription to a transactional publication.
USE [AdventureWorks]
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

下列範例會建立合併式發行集的發送訂閱。Login and password values are supplied at run time by using sqlcmd scripting variables.

-- 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'AdventureWorksReplica'; 
SET @hostname = N'adventure-works\david8'

-- Add a push subscription to a merge publication.
USE [AdventureWorks]
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

請參閱

工作

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

其他資源

訂閱發行集
以指令碼變數使用 sqlcmd

說明及資訊

取得 SQL Server 2005 協助