Procedura: Creazione di una sottoscrizione pull (programmazione Transact-SQL della replica)

È possibile creare sottoscrizioni pull a livello di programmazione tramite le stored procedure di replica. Le stored procedure utilizzate dipenderanno dal tipo di pubblicazione a cui appartiene la sottoscrizione.

Per creare una sottoscrizione pull di una pubblicazione snapshot o transazionale

  1. Nel server di pubblicazione verificare che la pubblicazione supporti sottoscrizioni pull eseguendo sp_helppublication (Transact-SQL).

    • Se il valore di allow_pull nel set di risultati è 1, la pubblicazione supporta le sottoscrizioni pull.

    • Se il valore di allow_pull è 0, eseguire sp_changepublication (Transact-SQL) specificando allow_pull per @property e true per @value.

  2. Nel Sottoscrittore eseguire sp_addpullsubscription (Transact-SQL). Specificare i parametri @publisher e @publication. Per informazioni sull'aggiornamento delle sottoscrizioni, vedere Procedura: Creazione di una sottoscrizione aggiornabile di una pubblicazione transazionale (programmazione Transact-SQL della replica).

  3. Nel Sottoscrittore eseguire sp_addpullsubscription_agent (Transact-SQL). Specificare le informazioni seguenti:

    • I parametri @publisher, @publisher_db e @publication.

    • Le credenziali di Microsoft Windows per l'esecuzione dell'agente di distribuzione nel Sottoscrittore nei parametri @job_login e @job_password.

      Nota

      Per le connessioni attivate con l'autenticazione integrata di Windows vengono sempre utilizzate le credenziali di Windows specificate nei parametri @job_login e @job_password. L'agente di distribuzione attiva sempre la connessione locale al Sottoscrittore utilizzando l'autenticazione integrata di Windows. Per impostazione predefinita, l'agente si connetterà al server di distribuzione con l'autenticazione integrata di Windows.

    • (Facoltativo) Impostare il valore 0 per @distributor_security_mode e specificare le informazioni di accesso di Microsoft SQL Server nei parametri @distributor_login e @distributor_password, se è necessario utilizzare l'autenticazione di SQL Server per la connessione al server di distribuzione.

    • Specificare una pianificazione per il processo dell'agente di distribuzione da eseguire per la sottoscrizione. Per ulteriori informazioni, vedere Procedura: Impostazione di pianificazioni della sincronizzazione (programmazione Transact-SQL della replica).

  4. Nel server di pubblicazione eseguire sp_addsubscription (Transact-SQL) per registrare la sottoscrizione pull. Specificare i parametri @publication, @subscriber e @destination_db. Specificare il valore pull per @subscription_type.

Per creare una sottoscrizione pull di una pubblicazione di tipo merge

  1. Nel server di pubblicazione verificare che la pubblicazione supporti sottoscrizioni pull eseguendo sp_helpmergepublication (Transact-SQL).

    • Se il valore di allow_pull nel set di risultati è 1, la pubblicazione supporta le sottoscrizioni pull.

    • Se il valore di allow_pull è 0, eseguire sp_changemergepublication (Transact-SQL) specificando allow_pull per @property e true per @value.

  2. Nel Sottoscrittore eseguire sp_addmergepullsubscription (Transact-SQL). Specificare i parametri @publisher, @publisher_db, @publication e i parametri seguenti:

    • @subscriber_type: specificare local per una sottoscrizione client e global per una sottoscrizione server.

    • @subscription_priority: specificare la priorità della sottoscrizione (l'intervallo di valori consentito è compreso tra 0,00 e 99,99). Questo parametro è obbligatorio solo per una sottoscrizione server.

      Per ulteriori informazioni, vedere Rilevamento e risoluzione avanzati dei conflitti nella replica di tipo merge.

  3. Nel Sottoscrittore eseguire sp_addmergepullsubscription_agent (Transact-SQL). Specificare i parametri seguenti:

    • @publisher, @publisher_db e @publication.

    • Le credenziali di Windows per l'esecuzione dell'agente di merge nel Sottoscrittore nei parametri @job_login e @job_password.

      Nota

      Per le connessioni attivate con l'autenticazione integrata di Windows vengono sempre utilizzate le credenziali di Windows specificate nei parametri @job_login e @job_password. L'agente di merge attiva sempre la connessione locale al Sottoscrittore utilizzando l'autenticazione integrata di Windows. Per impostazione predefinita, l'agente si connetterà al server di distribuzione e al server di pubblicazione con l'autenticazione integrata di Windows.

    • (Facoltativo) Impostare il valore 0 per @distributor_security_mode e specificare le informazioni di accesso di SQL Server nei parametri @distributor_login e @distributor_password, se è necessario utilizzare l'autenticazione di SQL Server per la connessione al server di distribuzione.

    • (Facoltativo) Impostare il valore 0 per @publisher_security_mode e specificare le informazioni sull'account di accesso di SQL Server nei parametri @publisher_login e @publisher_password, se è necessario utilizzare l'autenticazione di SQL Server per la connessione al server di pubblicazione.

    • Specificare una pianificazione per il processo dell'agente di merge da eseguire per la sottoscrizione. Per ulteriori informazioni, vedere Procedura: Impostazione di pianificazioni della sincronizzazione (programmazione Transact-SQL della replica).

  4. Nel server di pubblicazione eseguire sp_addmergesubscription (Transact-SQL). Specificare i parametri @publication, @subscriber, @subscriber_db e impostare il valore pull per @subscription_type. In questo modo la sottoscrizione pull viene registrata.

Esempio

Nell'esempio seguente viene creata una sottoscrizione pull di una pubblicazione transazionale. Il primo batch viene eseguito nel Sottoscrittore e il secondo batch viene eseguito nel server di pubblicazione. I valori per l'account di accesso e la relativa password vengono specificati in fase di esecuzione tramite variabili di scripting 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".

-- 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'AdventureWorks2008R2';

-- At the subscription database, create a pull subscription 
-- to a transactional publication.
USE [AdventureWorks2008R2Replica]
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'AdventureWorks2008R2Replica';

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

Nell'esempio seguente viene creata una sottoscrizione pull di una pubblicazione di tipo merge. Il primo batch viene eseguito nel Sottoscrittore e il secondo batch viene eseguito nel server di pubblicazione. I valori per l'account di accesso e la relativa password vengono specificati in fase di esecuzione tramite variabili di scripting 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".

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

-- At the subscription database, create a pull subscription 
-- to a merge publication.
USE [AdventureWorks2008R2Replica]
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'AdventureWorks2008R2Replica';

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