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
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.
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).
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).
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
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.
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.
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).
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
Vedere anche