Share via


Aggiornamento di script di replica (programmazione Transact-SQL della replica)

I file di script Transact-SQL possono essere usati per configurare a livello di codice una topologia di replica. Per altre informazioni, vedere Concetti di base relativi alle stored procedure del sistema di replica.

Importante

Sebbene non sia necessario aggiornare gli script eseguiti da membri del ruolo sysadmin, si consiglia di modificare gli script esistenti come descritto in questo argomento. Specificare un account con autorizzazioni minime per ogni agente di replica, come descritto nella sezione relativa alle autorizzazioni necessarie per gli agenti dell'argomento Replication Agent Security Model.

Questi miglioramenti alla sicurezza, che consentono un maggiore controllo sulle autorizzazioni, consentendo di specificare in modo esplicito gli account di Microsoft Windows in cui vengono eseguiti i processi dell'agente di replica, influiscono sulle stored procedure seguenti negli script esistenti:

  • sp_addpublication_snapshot

    È ora necessario specificare le credenziali di Windows come @job_login e @job_password durante l'esecuzione di sp_addpublication_snapshot (Transact-SQL) per creare il processo in cui viene eseguito il agente di snapshot nel server di distribuzione.

  • sp_addpushsubscription_agent

    È ora necessario eseguire sp_addpushsubscription_agent (Transact-SQL) per aggiungere in modo esplicito un processo e specificare le credenziali di Windows (@job_login e @job_password) in cui viene eseguito il processo agente di distribuzione nel server di distribuzione. Nelle versioni di SQL Server precedenti SQL Server 2005, questa operazione viene eseguita automaticamente al momento della creazione di una sottoscrizione push.

  • sp_addmergepushsubscription_agent

    È ora necessario eseguire sp_addmergepushsubscription_agent (Transact-SQL) per aggiungere in modo esplicito un processo e specificare le credenziali di Windows (@job_login e @job_password) in cui viene eseguito il processo agente di merge nel server di distribuzione. Nelle versioni di SQL Server precedenti SQL Server 2005, questa operazione viene eseguita automaticamente al momento della creazione di una sottoscrizione push.

  • sp_addpullsubscription_agent

    È ora necessario specificare le credenziali di Windows come @job_login e @job_password durante l'esecuzione di sp_addpullsubscription_agent (Transact-SQL) per creare il processo in cui viene eseguito il agente di distribuzione nel Sottoscrittore.

  • sp_addmergepullsubscription_agent

    È ora necessario specificare le credenziali di Windows come @job_login e @job_password durante l'esecuzione di sp_addmergepullsubscription_agent (Transact-SQL) per creare il processo in cui viene eseguito il agente di merge nel Sottoscrittore.

  • sp_addlogreader_agent

    A questo punto è necessario eseguire sp_addlogreader_agent (Transact-SQL) per aggiungere manualmente il processo e specificare le credenziali di Windows in cui viene eseguito l'agente di lettura log nel server di distribuzione. Nelle versioni di SQL Server precedenti SQL Server 2005, questa operazione viene eseguita automaticamente al momento della creazione di una pubblicazione transazionale.

  • sp_addqreader_agent

    A questo punto è necessario eseguire sp_addqreader_agent (Transact-SQL) per aggiungere manualmente il processo e specificare le credenziali di Windows in cui viene eseguito l'agente di lettura coda nel server di distribuzione. Nelle versioni di SQL Server precedenti SQL Server 2005, questa operazione viene eseguita automaticamente quando è stata creata una pubblicazione transazionale che supporta l'aggiornamento in coda.

Nel modello di sicurezza introdotto in SQL Server 2005, gli agenti di replica effettuano sempre connessioni all'istanza locale di SQL Server con l'autenticazione di Windows usando le credenziali fornite in @job_name e @job_password. Per informazioni sui requisiti degli account di Windows utilizzati quando si eseguono processi dell'agente di replica, vedere Replication Agent Security Model.

Importante

Se possibile, richiedere agli utenti di immettere le credenziali di sicurezza in fase di esecuzione. Se si archiviano le credenziali in un file script, assicurarsi che quest'ultimo sia protetto.

Per aggiornare gli script di configurazione di una pubblicazione snapshot o transazionale

  1. Nello script esistente, prima di sp_addpublication (Transact-SQL), eseguire sp_addlogreader_agent (Transact-SQL) nel server di pubblicazione nel database di pubblicazione. Specificare le credenziali di Windows in cui viene eseguito l'agente di lettura log per @job_name e @job_password. Se l'agente userà SQL Server Authentication durante la connessione al server di pubblicazione, è necessario specificare anche il valore 0 per @publisher_security_mode e le informazioni di accesso SQL Server per @publisher_login e @publisher_password. Verrà creato un processo dell'agente di lettura log per il database di pubblicazione.

    Nota

    Questo passaggio è necessario solo per le pubblicazioni transazionali, non per le pubblicazioni snapshot.

  2. (Facoltativo) Prima di sp_addpublication (Transact-SQL), eseguire sp_addqreader_agent (Transact-SQL) nel database di distribuzione del server di distribuzione. Specificare le credenziali di Windows in cui viene eseguito l'agente di lettura coda per @job_name e @job_password. Verrà creato un processo dell'agente di lettura coda per il server di distribuzione.

    Nota

    Questo passaggio è necessario solo per le pubblicazioni transazionali che supportano Sottoscrittori ad aggiornamento in coda.

  3. (Facoltativo) Aggiornare l'esecuzione di sp_addpublication (Transact-SQL) per impostare i valori non predefiniti per i parametri che implementano nuove funzionalità di replica.

  4. Dopo sp_addpublication (Transact-SQL), eseguire sp_addpublication_snapshot (Transact-SQL) nel server di pubblicazione nel database di pubblicazione. Specificare @publication e le credenziali di Windows in cui viene eseguito il agente di snapshot per @job_name e @job_password. Se l'agente userà SQL Server Authentication durante la connessione al server di pubblicazione, è necessario specificare anche il valore 0 per @publisher_security_mode e le informazioni di accesso SQL Server per @publisher_login e @publisher_password. Verrà creato un processo dell'agente snapshot per la pubblicazione.

  5. (Facoltativo) Aggiornare l'esecuzione di sp_addarticle (Transact-SQL) per impostare i valori non predefiniti per i parametri che implementano nuove funzionalità di replica.

Per aggiornare gli script per l'aggiunta di sottoscrizioni di una pubblicazione snapshot o transazionale

  1. Dopo avere eseguito la stored procedure di creazione della sottoscrizione, assicurarsi di eseguire la stored procedure di creazione di un processo dell'agente di distribuzione per sincronizzare la sottoscrizione. La stored procedure utilizzata varia in base al tipo di sottoscrizione.

Per aggiornare gli script di configurazione di una pubblicazione di tipo merge

  1. (Facoltativo) Nello script esistente aggiornare l'esecuzione di sp_addmergepublication (Transact-SQL) per impostare i valori non predefiniti per i parametri che implementano nuove funzionalità di replica.

  2. Dopo sp_addmergepublication (Transact-SQL) eseguire sp_addpublication_snapshot (Transact-SQL) nel server di pubblicazione nel database di pubblicazione. Specificare @publication e le credenziali di Windows in cui viene eseguito il agente di snapshot per @job_name e @job_password. Se l'agente userà SQL Server Authentication durante la connessione al server di pubblicazione, è necessario specificare anche il valore 0 per @publisher_security_mode e le informazioni di accesso SQL Server per @publisher_login e @publisher_password. Verrà creato un processo dell'agente snapshot per la pubblicazione.

  3. (Facoltativo) Aggiornare l'esecuzione di sp_addmergearticle (Transact-SQL) per impostare i valori non predefiniti per i parametri che implementano nuove funzionalità di replica.

Per aggiornare gli script per l'aggiunta di sottoscrizioni di una pubblicazione di tipo merge

  1. Dopo avere eseguito la stored procedure di creazione della sottoscrizione, assicurarsi di eseguire la stored procedure di creazione di un processo dell'agente di merge per sincronizzare la sottoscrizione. La stored procedure utilizzata varia in base al tipo di sottoscrizione.

Esempio

Di seguito è riportato un esempio di script SQL Server 2000 che crea una pubblicazione transazionale per la tabella Product. Questa pubblicazione supporta l'aggiornamento immediato sostituito dall'aggiornamento in coda come soluzione di failover. I parametri predefiniti sono stati rimossi per una maggiore leggibilità.

USE [Northwind]
GO

DECLARE @publication AS sysname
DECLARE @publicationDB AS sysname
DECLARE @article AS sysname
SET @publication = N'NwdProductTran'
SET @publicationDB = N'Northwind'
SET @article = N'Products'

-- Enable the replication database.
EXEC sp_replicationdboption 
    @dbname = @publicationDB, 
    @optname = N'publish', 
    @value = N'true'

-- Add the transactional publication.
EXEC sp_addpublication 
    @publication = @publication, 
    @sync_method = N'native', 
    @status = N'active', 
    @repl_freq = N'continuous', 
    @description = N'Transactional publication of Northwind.', 
    @allow_push = N'true', 
    @allow_pull = N'true', 
    @allow_sync_tran = N'true', 
    @autogen_sync_procs = N'true', 
    @allow_queued_tran = N'true'

-- Add a snapshot job.
EXEC sp_addpublication_snapshot 
    @publication = @publication

-- Add the transactional articles.
EXEC sp_addarticle 
    @publication = @publication, 
    @article = @article, 
    @source_owner = N'dbo', 
    @source_object = @article, 
    @destination_table = @article, 
    @type = N'logbased', 
    @schema_option = 0x00000000000080F3, 
    @ins_cmd = N'CALL sp_MSins_Products', 
    @del_cmd = N'XCALL sp_MSdel_Products', 
    @upd_cmd = N'XCALL sp_MSupd_Products', 
    @auto_identity_range = N'false'
GO

Esempio

Di seguito è riportato un esempio di aggiornamento dello script precedente, che crea una pubblicazione transazionale, per l'esecuzione corretta per SQL Server 2005 e versioni successive. Questa pubblicazione supporta l'aggiornamento immediato sostituito dall'aggiornamento in coda come soluzione di failover. I valori predefiniti dei nuovi parametri sono stati dichiarati in modo esplicito.

Nota

Le credenziali di Windows vengono specificate in fase di esecuzione mediante variabili di scripting sqlcmd .

-- To avoid storing the login and password in the script file, the value 
-- is passed into SQLCMD as a scripting variable. 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 at the Distributor.
USE [distribution]

DECLARE @login AS sysname;
DECLARE @password AS sysname;
-- Specify the Windows account to run the Queue Reader Agent.
SET @login = $(Login); 
-- Pass the password at runtime.
SET @password = $(Password); 

-- Execute sp_addqreader_agent to create the Queue Reader Agent job. 
EXEC sp_addqreader_agent 
    @job_login = @login, 
    @job_password = @password;
GO

-- Execute at the Publisher.
USE [Northwind]
GO

DECLARE @publication AS sysname;
DECLARE @publicationDB AS sysname;
DECLARE @article AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publication = N'NwdProductTran';
SET @publicationDB = N'Northwind';
SET @article = N'Products';
-- Specify the Windows account to run the Log Reader and Snapshot Agents.
SET @login = $(Login); 
-- Pass the password at runtime.
SET @password = $(Password); 

-- Enable the replication database.
EXEC sp_replicationdboption 
    @dbname = @publicationDB, 
    @optname = N'publish', 
    @value = N'true';

-- Execute sp_addlogreader_agent to create the agent job. 
EXEC sp_addlogreader_agent 
    @job_login = @login, 
    @job_password = @password, 
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;

-- Add the transactional publication.
EXEC sp_addpublication 
    @publication = @publication, 
    @sync_method = N'native', 
    @repl_freq = N'continuous', 
    @status = N'active',
    @description = N'Transactional publication of Northwind.', 
    @allow_push = N'true', 
    @allow_pull = N'true', 
    @allow_sync_tran = N'true', 
    @autogen_sync_procs = N'true', 
    @allow_queued_tran = N'true',
    @replicate_ddl = 1,
    @enabled_for_p2p = N'false';

-- Create a new snapshot job for the publication, using a default schedule.
EXEC sp_addpublication_snapshot 
    @publication = @publication, 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;

-- Add a transactional article.
EXEC sp_addarticle 
  @publication = @publication, 
  @article = @article, 
  @source_owner = N'dbo', 
  @source_object = @article, 
  @destination_table = @article, 
  @type = N'logbased', 
  @schema_option = 0x00000000000080F3, 
  @ins_cmd = N'CALL sp_MSins_Products', 
  @del_cmd = N'XCALL sp_MSdel_Products', 
  @upd_cmd = N'XCALL sp_MSupd_Products', 
  @auto_identity_range = N'false',
  @identityrangemanagementoption = N'manual',
  @fire_triggers_on_snapshot = N'false';
GO

Esempio

Di seguito è riportato un esempio di script SQL Server 2000 che crea una pubblicazione di tipo merge per la tabella Customers. I parametri predefiniti sono stati rimossi per una maggiore leggibilità.

-- Enable the replication database.
USE [Northwind]
GO

DECLARE @publicationDB AS sysname
DECLARE @publication AS sysname
DECLARE @article AS sysname
SET @publicationDB = N'Northwind' 
SET @publication = N'NwdCustomersMerge' 
SET @article = N'Customers' 

EXEC sp_replicationdboption 
    @dbname = @publicationDB, 
    @optname = N'merge publish', 
    @value = N'true'

-- Add the merge publication.
EXEC sp_addmergepublication 
    @publication = @publication, 
    @description = N'Merge publication of Northwind.', 
    @retention = 14, 
    @sync_mode = N'native', 
    @centralized_conflicts = N'true', 
    @dynamic_filters = N'false', 
    @keep_partition_changes = N'false'
 
EXEC sp_addpublication_snapshot 
    @publication = @publication

-- Add the merge articles.
EXEC sp_addmergearticle 
    @publication = @publication, 
    @article = @article, 
    @source_owner = N'dbo', 
    @source_object = @article, 
    @type = N'table', 
    @description = null, 
    @column_tracking = N'true', 
    @schema_option = 0x000000000000CFF1
 GO

Esempio

Di seguito è riportato un esempio dello script precedente, che crea una pubblicazione di tipo merge, aggiornata per essere eseguita correttamente per SQL Server 2005 e versioni successive. I valori predefiniti dei nuovi parametri sono stati dichiarati in modo esplicito.

Nota

Le credenziali di Windows vengono specificate in fase di esecuzione mediante variabili di scripting sqlcmd .

-- To avoid storing the login and password in the script file, the value 
-- is passed into SQLCMD as a scripting variable. 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".

-- Enabling the replication database
-- Enable the replication database.
USE [Northwind]
GO

DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @article AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'Northwind';
SET @publication = N'NwdCustomersMerge';
SET @article = N'Customers';
-- Specify the Windows account to run the Snapshot Agent.
SET @login = $(Login); 
-- Supply the password at runtime.
SET @password = $(Password); 

EXEC sp_replicationdboption 
    @dbname = @publicationDB, 
    @optname = N'merge publish', 
    @value = N'true';

-- Add the merge publication.
EXEC sp_addmergepublication 
    @publication = @publication, 
    @description = N'Merge publication of Northwind.', 
    @retention = 14, 
    @sync_mode = N'native', 
    @dynamic_filters = N'false', 
    @keep_partition_changes = N'false',
    -- Only set to '90RTM' if all Subscribers are SQL Server 2005.
    @publication_compatibility_level = N'90RTM',
    @replicate_ddl = 1,
    @allow_subscriber_initiated_snapshot = N'true',
    @allow_web_synchronization = N'false',
    @allow_partition_realignment = N'true',
    @retention_period_unit = N'day',
    @automatic_reinitialization_policy = 0,
    @conflict_logging = N'both';
 
EXEC sp_addpublication_snapshot 
    @publication = @publication, 
    @job_login = @login,
    @job_password = @password;

-- Add the merge article.
EXEC sp_addmergearticle 
    @publication = @publication, 
    @article = @article, 
    @source_owner = N'dbo', 
    @source_object = @article, 
    @type = N'table', 
    @description = null, 
    @column_tracking = N'true', 
    @schema_option = 0x0000000000034FD1,
    @partition_options = 0,
    @subscriber_upload_options = 0,
    @identityrangemanagementoption = N'manual',
    @delete_tracking = N'true',
    @compensate_for_errors = N'false',
    @stream_blob_columns = N'true';
GO

Esempio

Di seguito è riportato un esempio di script SQL Server 2000 che crea una sottoscrizione push in una pubblicazione transazionale. I parametri predefiniti sono stati rimossi per una maggiore leggibilità.

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'NwdProductTran' 
SET @subscriber = N'MYSUBSERVER' 
SET @subscriptionDB = N'NorthwindReplica' 

-- Add a Subscriber, using the defaults.
USE [master]
EXEC sp_addsubscriber 
    @subscriber = @subscriber

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

Esempio

Di seguito è riportato un esempio dello script precedente, che crea una sottoscrizione push a una pubblicazione transazionale, aggiornata per essere eseguita correttamente per SQL Server 2005 e versioni successive. I valori predefiniti dei nuovi parametri sono stati dichiarati in modo esplicito.

Nota

Le credenziali di Windows vengono specificate in fase di esecuzione mediante 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".

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publication = N'NwdProductTran'; 
SET @subscriber = $(Subscriber); 
SET @subscriptionDB = N'NorthwindReplica'; 
-- Specify the Windows account to run the Distribution Agent.
SET @login = $(Login); 
-- Supply the password at runtime.
SET @password = $(Password); 

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

Esempio

Di seguito è riportato un esempio di script SQL Server 2000 che crea una sottoscrizione push in una pubblicazione di tipo merge. I parametri predefiniti sono stati rimossi per una maggiore leggibilità.

DECLARE @publication AS sysname
DECLARE @subscriber AS sysname
DECLARE @subscriptionDB AS sysname
SET @publication = N'NwdCustomersMerge' 
SET @subscriber = N'SUBSERVER' 
SET @subscriptionDB = N'NorthwindReplica' 

-- Add a Subscriber, using the defaults.
USE [master]
EXEC sp_addsubscriber 
  @subscriber = @subscriber

-- Add a push subscription to a merge publication.
USE [Northwind]
EXEC sp_addmergesubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @subscription_type = N'push',
  @subscriber_type = N'local',
  @sync_type = N'automatic'
GO

Esempio

Di seguito è riportato un esempio dello script precedente, che crea una sottoscrizione push a una pubblicazione di tipo merge, aggiornata per l'esecuzione correttamente per SQL Server 2005 e versioni successive. I valori predefiniti dei nuovi parametri sono stati dichiarati in modo esplicito.

Nota

Le credenziali di Windows vengono specificate in fase di esecuzione mediante 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".

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publication = N'NwdCustomersMerge'; 
SET @subscriber = $(Subscriber); 
SET @subscriptionDB = N'NorthwindReplica'; 
-- Specify the Windows account to run the Merge Agent.
SET @login = $(Login); 
-- Supply the password at runtime.
SET @password = $(Password); 

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

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

Esempio

Di seguito è riportato un esempio di script SQL Server 2000 che crea una sottoscrizione pull a una pubblicazione transazionale. I parametri predefiniti sono stati rimossi per una maggiore leggibilità.

DECLARE @publication AS sysname
DECLARE @subscriber AS sysname
DECLARE @subscriptionDB AS sysname
SET @publication = N'NwdCustomersMerge' 
SET @subscriber = N'SUBSERVER' 
SET @subscriptionDB = N'NorthwindReplica' 

-- Add a Subscriber, using the defaults.
USE [master]
EXEC sp_addsubscriber 
  @subscriber = @subscriber

-- Add a push subscription to a merge publication.
USE [Northwind]
EXEC sp_addmergesubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @subscription_type = N'push',
  @subscriber_type = N'local',
  @sync_type = N'automatic'
GO

Esempio

Di seguito è riportato un esempio dello script precedente, che crea una sottoscrizione pull a una pubblicazione transazionale, aggiornata per essere eseguita correttamente per SQL Server 2005 e versioni successive. I valori predefiniti dei nuovi parametri sono stati dichiarati in modo esplicito.

Nota

Le credenziali di Windows vengono specificate in fase di esecuzione mediante 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 at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publication = N'NwdProductTran'; 
SET @publisher = $(Publisher); 
SET @publicationDB = N'Northwind'; 
-- Specify the Windows account to run the Distribution Agent.
SET @login = $(Login); 
-- Supply the password at runtime.
SET @password = $(Password); 

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

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

-- Execute at the Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'NwdProductTran'; 
SET @subscriber = $(Subscriber); 
SET @subscriptionDB = N'NorthwindReplica'; 

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

Esempio

Di seguito è riportato un esempio di script SQL Server 2000 che crea una sottoscrizione pull a una pubblicazione di tipo merge. I parametri predefiniti sono stati rimossi per una maggiore leggibilità.

-- Execute at the Subscriber
DECLARE @publication AS sysname
DECLARE @publisher AS sysname
DECLARE @publicationDB AS sysname
DECLARE @subscriber AS sysname
DECLARE @subscriptionDB AS sysname
SET @publication = N'NwdCustomersMerge' 
SET @publisher = N'PUBSERVER' 
SET @publicationDB = N'Northwind' 
SET @subscriber = N'SUBSERVER' 
SET @subscriptionDB = N'NorthwindReplica'

-- At the subscription database, create a pull subscription 
-- to a merge publication.
USE [NorthwindReplica]
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, 
    @subscriber = @subscriber, 
    @subscriber_db = @subscriptionDB, 
    @distributor = @publisher
GO

-- Execute at the Publisher.
DECLARE @publication AS sysname
DECLARE @subscriber AS sysname
DECLARE @subscriptionDB AS sysname
SET @publication = N'NwdCustomersMerge' 
SET @subscriber = N'MYSUBSERVER' 
SET @subscriptionDB = N'NorthwindReplica' 

-- Add a Subscriber, using the defaults.
USE [master]
EXEC sp_addsubscriber 
  @subscriber = @subscriber

-- Add a pull subscription to a merge publication.
USE [Northwind]
EXEC sp_addmergesubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @subscription_type = N'pull',
  @subscriber_type = N'local',
  @sync_type = N'automatic'
GO

Esempio

Di seguito è riportato un esempio dello script precedente, che crea una sottoscrizione pull a una pubblicazione di tipo merge, aggiornata per l'esecuzione correttamente per SQL Server 2005 e versioni successive. I valori predefiniti dei nuovi parametri sono stati dichiarati in modo esplicito.

Nota

Le credenziali di Windows vengono specificate in fase di esecuzione mediante 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 at the Subscriber
DECLARE @publication  AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publication = N'NwdCustomersMerge'; 
SET @publisher = $(Publisher); 
SET @publicationDB = N'Northwind'; 
-- Specify the Windows account to run the Merge Agent.
SET @login = $(Login); 
-- Pass the password at runtime.
SET @password = $(Password); 

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

-- Execute at the Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'NwdCustomersMerge';
SET @subscriber = $(Subscriber);
SET @subscriptionDB = N'NorthwindReplica';

-- Add a pull subscription to a merge publication.
USE [Northwind]
EXEC sp_addmergesubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @subscription_type = N'pull',
  @subscriber_type = N'local',
  @sync_type = N'automatic';
GO

Vedere anche

Creare una pubblicazione
Creare una sottoscrizione push
Create a Pull Subscription
Visualizzare e modificare le impostazioni di sicurezza della replica
MSSQL_ENG021797
MSSQL_ENG021798
Replication System Stored Procedures Concepts
Aggiornare database replicati