Vorgehensweise: Erstellen eines Pullabonnements (Replikationsprogrammierung mit Transact-SQL)

Pullabonnements können mithilfe von gespeicherten Replikationsprozeduren programmgesteuert erstellt werden. Die verwendeten gespeicherten Prozeduren hängen vom Typ der Veröffentlichung ab, zu der das Abonnement gehört.

So erstellen Sie ein Pullabonnement für eine Snapshot- oder Transaktionsveröffentlichung

  1. Überprüfen Sie auf dem Verleger, ob die Veröffentlichung Pullabonnements unterstützt, indem Sie sp_helppublication (Transact-SQL) ausführen.

    • Wenn allow_pull im Resultset den Wert 1 hat, unterstützt die Veröffentlichung Pullabonnements.

    • Wenn allow_pull den Wert 0 hat, führen Sie sp_changepublication (Transact-SQL) aus, und geben Sie allow_pull für @property und true für @value an.

  2. Führen Sie auf dem Abonnenten sp_addpullsubscription (Transact-SQL) aus. Geben Sie @publisher und @publication an. Informationen zum Aktualisieren von Abonnements finden Sie unter Vorgehensweise: Erstellen eines aktualisierbaren Abonnements für eine Transaktionsveröffentlichung (Replikationsprogrammierung mit Transact-SQL).

  3. Führen Sie auf dem Abonnenten sp_addpullsubscription_agent (Transact-SQL) aus. Geben Sie Folgendes an:

    • Die Parameter @publisher, @publisher_db und @publication

    • Die Microsoft Windows-Anmeldeinformationen, unter denen der Verteilungs-Agent auf dem Abonnenten ausgeführt wird, für @job_login und @job_password an.

      HinweisHinweis

      Für Verbindungen, die mit der integrierten Windows-Authentifizierung hergestellt werden, werden immer die mit @job_login und @job_password angegebenen Windows-Anmeldeinformationen verwendet. Der Verteilungs-Agent stellt die lokale Verbindung mit dem Abonnenten immer mithilfe der integrierten Windows-Authentifizierung her. Standardmäßig stellt der Agent mithilfe der integrierten Windows-Authentifizierung eine Verbindung mit dem Verteiler her.

    • (Optional) Den Wert 0 für @distributor_security_mode und die MicrosoftSQL Server-Anmeldeinformationen für @distributor_login und @distributor_password, wenn die SQL Server-Authentifizierung für den Verbindungsaufbau mit dem Verteiler verwendet werden muss.

    • Einen Zeitplan für den Verteilungs-Agentauftrag für dieses Abonnement. Weitere Informationen finden Sie unter Vorgehensweise: Synchronisierungszeitpläne (Replikationsprogrammierung mit Transact-SQL).

  4. Führen Sie auf dem Verleger sp_addsubscription (Transact-SQL) aus, um das Pullabonnement zu registrieren. Geben Sie @publication, @subscriber und @destination_db an. Geben Sie den Wert pull für @subscription_type an.

So erstellen Sie ein Pullabonnement für eine Mergeveröffentlichung

  1. Überprüfen Sie auf dem Verleger, ob die Veröffentlichung Pullabonnements unterstützt, indem Sie sp_helpmergepublication (Transact-SQL) ausführen.

    • Wenn allow_pull im Resultset den Wert 1 hat, dann unterstützt die Veröffentlichung Pullabonnements.

    • Wenn allow_pull den Wert 0 hat, führen Sie sp_changemergepublication (Transact-SQL) aus, und geben Sie allow_pull für @property und true für @value an.

  2. Führen Sie auf dem Abonnenten sp_addmergepullsubscription (Transact-SQL) aus. Geben Sie @publisher, @publisher_db, @publication und die folgenden Parameter an:

    • @subscriber_type - Geben Sie für ein Clientabonnement local und für ein Serverabonnement global an.

    • @subscription_priority - Legen Sie für das Abonnement eine Priorität fest (0.00 bis 99.99). Dies ist nur für Serverabonnements erforderlich.

      Weitere Informationen finden Sie unter Erweiterte Konflikterkennung und -lösung bei der Mergereplikation.

  3. Führen Sie auf dem Abonnenten sp_addmergepullsubscription_agent (Transact-SQL) aus. Geben Sie die folgenden Parameter an:

    • @publisher, @publisher_db und @publication

    • Die Windows-Anmeldeinformationen, unter denen der Merge-Agent auf dem Abonnenten ausgeführt wird, für @job_login und @job_password.

      HinweisHinweis

      Für Verbindungen, die mit der integrierten Windows-Authentifizierung hergestellt werden, werden immer die mit @job_login und @job_password angegebenen Windows-Anmeldeinformationen verwendet. Der Merge-Agent stellt die lokale Verbindung mit dem Abonnenten immer mithilfe der Windows-Authentifizierung her. Standardmäßig stellt der Agent mithilfe der integrierten Windows-Authentifizierung eine Verbindung mit dem Verteiler und dem Verleger her.

    • (Optional) Den Wert 0 für @distributor_security_mode und die SQL Server-Anmeldeinformationen für @distributor_login und @distributor_password, wenn die SQL Server-Authentifizierung für den Verbindungsaufbau mit dem Verteiler verwendet werden muss.

    • (Optional) Den Wert 0 für @publisher_security_mode und die SQL Server-Anmeldeinformationen für @publisher_login und @publisher_password, wenn die SQL Server-Authentifizierung für den Verbindungsaufbau mit dem Verleger verwendet werden muss.

    • Einen Zeitplan für den Merge-Agentauftrag für dieses Abonnement. Weitere Informationen finden Sie unter Vorgehensweise: Synchronisierungszeitpläne (Replikationsprogrammierung mit Transact-SQL).

  4. Führen Sie auf dem Verleger sp_addmergesubscription (Transact-SQL) aus. Geben Sie @publication, @subscriber, @subscriber_db und den Wert pull für @subscription_type an. Damit wird das Pullabonnement registriert.

Beispiel

Im folgenden Beispiel wird ein Pullabonnement für eine Transaktionsveröffentlichung erstellt. Der erste Batch wird auf dem Abonnenten ausgeführt, und der zweite Batch wird auf dem Verleger ausgeführt. Die Werte für den Anmeldenamen und das Kennwort werden zur Laufzeit mithilfe von sqlcmd-Skriptvariablen bereitgestellt.

-- 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".

-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks';

-- At the subscription database, create a pull subscription 
-- to a transactional publication.
USE [AdventureWorksReplica]
EXEC sp_addpullsubscription 
  @publisher = @publisher, 
  @publication = @publication, 
  @publisher_db = @publicationDB;

-- Add an agent job to synchronize the pull subscription.
EXEC sp_addpullsubscription_agent 
  @publisher = @publisher, 
  @publisher_db = @publicationDB, 
  @publication = @publication, 
  @distributor = @publisher, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO
-- 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".

-- Execute this batch at the Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica';

-- At the Publisher, register the subscription, using the defaults.
EXEC sp_addsubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @destination_db = @subscriptionDB, 
  @subscription_type = N'pull',
  @status = N'subscribed';
GO

Im folgenden Beispiel wird ein Pullabonnement für eine Mergeveröffentlichung erstellt. Der erste Batch wird auf dem Abonnenten ausgeführt, und der zweite Batch wird auf dem Verleger ausgeführt. Die Werte für den Anmeldenamen und das Kennwort werden zur Laufzeit mithilfe von sqlcmd-Skriptvariablen bereitgestellt.

-- 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".

-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
DECLARE @hostname AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks';
SET @hostname = N'adventure-works\david8';

-- At the subscription database, create a pull subscription 
-- to a merge publication.
USE [AdventureWorksReplica]
EXEC sp_addmergepullsubscription 
  @publisher = @publisher, 
  @publication = @publication, 
  @publisher_db = @publicationDB;

-- Add an agent job to synchronize the pull subscription. 
EXEC sp_addmergepullsubscription_agent 
  @publisher = @publisher, 
  @publisher_db = @publicationDB, 
  @publication = @publication, 
  @distributor = @publisher, 
  @job_login = $(Login), 
  @job_password = $(Password),
  @hostname = @hostname;
GO
-- Execute this batch at the Publisher.
DECLARE @myMergePub  AS sysname;
DECLARE @mySub       AS sysname;
DECLARE @mySubDB     AS sysname;

SET @myMergePub = N'AdvWorksSalesOrdersMerge';
SET @mySub = N'MYSUBSERVER';
SET @mySubDB = N'AdventureWorksReplica';

-- At the Publisher, register the subscription, using the defaults.
USE [AdventureWorks]
EXEC sp_addmergesubscription @publication = @myMergePub, 
@subscriber = @mySub, @subscriber_db = @mySubDB, 
@subscription_type = N'pull';
GO