Procedura: Creazione di una sottoscrizione aggiornabile di una pubblicazione transazionale (programmazione Transact-SQL della replica)

[!NOTA]

Questa caratteristica verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.

La replica transazionale consente di ripropagare al server di pubblicazione le modifiche apportate a un Sottoscrittore utilizzando sottoscrizioni ad aggiornamento immediato o ad aggiornamento in coda. È possibile creare una sottoscrizione ad aggiornamento a livello di programmazione tramite le stored procedure di replica.

Per creare una sottoscrizione pull ad aggiornamento immediato

  1. Nel server di pubblicazione eseguire sp_helppublication per verificare che la pubblicazione supporti le sottoscrizioni ad aggiornamento immediato.

  2. Nel server di pubblicazione eseguire sp_helppublication per verificare che la pubblicazione supporti le sottoscrizioni pull.

    • 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 specificando allow_pull per @property e true per @value.

  3. Nel Sottoscrittore eseguire sp_addpullsubscription. Specificare @publisher e @publication e uno dei valori seguenti per @update_mode:

    • synctran: consente di attivare la sottoscrizione per l'aggiornamento immediato.

    • failover: consente di attivare la sottoscrizione per l'aggiornamento immediato sostituito dall'aggiornamento in coda in caso di failover.

      [!NOTA]

      Con l'opzione failover è necessario che la pubblicazione sia attivata anche per le sottoscrizioni ad aggiornamento in coda.

  4. Nel Sottoscrittore eseguire sp_addpullsubscription_agent. Specificare le opzioni 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 connette 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 MicrosoftSQL Server nei parametri @distributor_login e @distributor_password, se è necessario utilizzare l'autenticazione di SQL Server per la connessione al server di distribuzione.

    • 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).

  5. Nel database di sottoscrizione del Sottoscrittore eseguire sp_link_publication. Specificare @publisher, @publication, il nome del database di pubblicazione per @publisher_db e uno dei valori seguenti per @security_mode:

    • 0: consente di utilizzare l'autenticazione di SQL Server quando si eseguono aggiornamenti nel server di pubblicazione. Questa opzione richiede di specificare un account di accesso valido nel server di pubblicazione per @login e @password.

    • 1: consente di utilizzare il contesto di protezione dell'utente che esegue le modifiche nel Sottoscrittore quando ci si connette al server di pubblicazione. Per informazioni sulle restrizioni correlate a questa modalità di protezione, vedere sp_link_publication.

    • 2: consente di utilizzare un account di accesso esistente e definito dall'utente per il server collegato, creato con sp_addlinkedserver.

  6. Nel server di pubblicazione eseguire sp_addsubscription specificando @publication, @subscriber, @destination_db, il valore pull per @subscription_type e lo stesso valore specificato al passaggio 3 per @update_mode.

    La sottoscrizione pull verrà registrata nel server di pubblicazione.

Per creare una sottoscrizione push ad aggiornamento immediato

  1. Nel server di pubblicazione eseguire sp_helppublication per verificare che la pubblicazione supporti le sottoscrizioni ad aggiornamento immediato.

  2. Nel server di pubblicazione eseguire sp_helppublication per verificare che la pubblicazione supporti le sottoscrizioni push.

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

    • Se il valore di allow_push è 0, eseguire sp_changepublication specificando allow_push per @property e true per @value.

  3. Nel server di pubblicazione eseguire sp_addsubscription. Specificare @publication, @subscriber, @destination_db e uno dei valori seguenti per @update_mode:

    • synctran: consente di attivare il supporto per l'aggiornamento immediato.

    • failover: consente di attivare il supporto per l'aggiornamento immediato sostituito dall'aggiornamento in coda in caso di failover.

      [!NOTA]

      Con l'opzione failover è necessario che la pubblicazione sia attivata anche per le sottoscrizioni ad aggiornamento in coda.

  4. Nel server di pubblicazione eseguire sp_addpushsubscription_agent. Specificare i parametri seguenti:

    • @subscriber, @subscriber_db e @publication.

    • Le credenziali di Windows utilizzate per l'esecuzione dell'agente di distribuzione nel server di distribuzione per @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 esegue sempre la connessione locale al server di distribuzione utilizzando l'autenticazione integrata di Windows. Per impostazione predefinita, l'agente si connette al Sottoscrittore utilizzando l'autenticazione integrata di Windows.

    • (Facoltativo) Impostare il valore 0 per @subscriber_security_mode e specificare le informazioni sull'account di accesso di SQL Server nei parametri @subscriber_login e @subscriber_password, se è necessario utilizzare l'autenticazione di SQL Server per la connessione al Sottoscrittore.

    • 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).

  5. Nel database di sottoscrizione del Sottoscrittore eseguire sp_link_publication. Specificare @publisher, @publication, il nome del database di pubblicazione per @publisher_db e uno dei valori seguenti per @security_mode:

    • 0: consente di utilizzare l'autenticazione di SQL Server quando si eseguono aggiornamenti nel server di pubblicazione. Questa opzione richiede di specificare un account di accesso valido nel server di pubblicazione per @login e @password.

    • 1: consente di utilizzare il contesto di protezione dell'utente che esegue le modifiche nel Sottoscrittore quando ci si connette al server di pubblicazione. Per informazioni sulle restrizioni correlate a questa modalità di protezione, vedere sp_link_publication.

    • 2: consente di utilizzare un account di accesso esistente e definito dall'utente per il server collegato, creato con sp_addlinkedserver.

Per creare una sottoscrizione pull ad aggiornamento in coda

  1. Nel server di pubblicazione eseguire sp_helppublication per verificare che la pubblicazione supporti le sottoscrizioni ad aggiornamento in coda.

  2. Nel server di pubblicazione eseguire sp_helppublication per verificare che la pubblicazione supporti le sottoscrizioni pull.

    • 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 specificando allow_pull per @property e true per @value.

  3. Nel Sottoscrittore eseguire sp_addpullsubscription. Specificare @publisher e @publication e uno dei valori seguenti per @update_mode.

    • queued tran: consente di attivare la sottoscrizione per l'aggiornamento in coda.

    • queued failover: consente di attivare il supporto per l'aggiornamento in coda sostituito dall'aggiornamento immediato in caso di failover.

      [!NOTA]

      Con l'opzione queued failover è necessario che la pubblicazione sia attivata anche per le sottoscrizioni ad aggiornamento immediato. Per eseguire il failover all'aggiornamento immediato, è necessario utilizzare sp_link_publication per definire le credenziali con cui replicare nel server di pubblicazione le modifiche apportate al Sottoscrittore.

  4. Nel Sottoscrittore eseguire sp_addpullsubscription_agent. Specificare i parametri seguenti:

    • @publisher, @publisher_db e @publication.

    • Le credenziali di 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 connette 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 SQL Server nei parametri @distributor_login e @distributor_password, se è necessario utilizzare l'autenticazione di SQL Server per la connessione al server di distribuzione.

    • 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).

  5. Nel server di pubblicazione eseguire sp_addsubscriber (Transact-SQL) per registrare il Sottoscrittore nel server di pubblicazione.

    Nel server di pubblicazione eseguire sp_addsubscription specificando @publication, @subscriber, @destination_db, il valore pull per @subscription_type e lo stesso valore specificato al passaggio 3 per @update_mode.

    La sottoscrizione pull verrà registrata nel server di pubblicazione.

Per creare una sottoscrizione push ad aggiornamento in coda

  1. Nel server di pubblicazione eseguire sp_helppublication per verificare che la pubblicazione supporti le sottoscrizioni ad aggiornamento in coda.

  2. Nel server di pubblicazione eseguire sp_helppublication per verificare che la pubblicazione supporti le sottoscrizioni push.

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

    • Se il valore di allow_push è 0, eseguire sp_changepublication specificando allow_push per @property e true per @value.

  3. Nel server di pubblicazione eseguire sp_addsubscription. Specificare @publication, @subscriber, @destination_db e uno dei valori seguenti per @update_mode:

    • queued tran: consente di attivare la sottoscrizione per l'aggiornamento in coda.

    • queued failover: consente di attivare il supporto per l'aggiornamento in coda sostituito dall'aggiornamento immediato in caso di failover.

      [!NOTA]

      Con l'opzione queued failover è necessario che la pubblicazione sia attivata anche per le sottoscrizioni ad aggiornamento immediato. Per eseguire il failover all'aggiornamento immediato, è necessario utilizzare sp_link_publication per definire le credenziali con cui replicare nel server di pubblicazione le modifiche apportate al Sottoscrittore.

  4. Nel server di pubblicazione eseguire sp_addpushsubscription_agent. Specificare i parametri seguenti:

    • @subscriber, @subscriber_db e @publication.

    • Le credenziali di Windows utilizzate per l'esecuzione dell'agente di distribuzione nel server di distribuzione per @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 esegue sempre la connessione locale al server di distribuzione utilizzando l'autenticazione integrata di Windows. Per impostazione predefinita, l'agente si connette al Sottoscrittore con l'autenticazione integrata di Windows.

    • (Facoltativo) Impostare il valore 0 per @subscriber_security_mode e specificare le informazioni sull'account di accesso di SQL Server nei parametri @subscriber_login e @subscriber_password, se è necessario utilizzare l'autenticazione di SQL Server per la connessione al Sottoscrittore.

    • 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).

Esempio

In questo esempio viene creata una sottoscrizione pull ad aggiornamento immediata di una pubblicazione che supporta le sottoscrizioni ad aggiornamento immediato. 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 @publicationDB AS sysname;
DECLARE @publisher AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS nvarchar(512);
SET @publication = N'AdvWorksProductTran';
SET @publicationDB = N'AdventureWorks';
SET @publisher = $(PubServer);
SET @login = $(Login);
SET @password = $(Password);

-- At the subscription database, create a pull subscription to a transactional 
-- publication using immediate updating with queued updating as a failover.
EXEC sp_addpullsubscription 
    @publisher = @publisher, 
    @publication = @publication, 
    @publisher_db = @publicationDB, 
    @update_mode = N'failover', 
    @subscription_type = N'pull';

-- Add an agent job to synchronize the pull subscription, 
-- which uses Windows Authentication when connecting to the Distributor.
EXEC sp_addpullsubscription_agent 
    @publisher = @publisher, 
    @publisher_db = @publicationDB, 
    @publication = @publication,
    @job_login = @login,
    @job_password = @password; 

-- Add a Windows Authentication-based linked server that enables the 
-- Subscriber-side triggers to make updates at the Publisher. 
EXEC sp_link_publication 
    @publisher = @publisher, 
    @publication = @publication,
    @publisher_db = @publicationDB, 
    @security_mode = 0,
    @login = @login,
    @password = @password;
GO

USE AdventureWorks
GO

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

-- At the Publisher, register the subscription, using the defaults.
USE [AdventureWorks]
EXEC sp_addsubscription 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @destination_db = @subscriptionDB, 
    @subscription_type = N'pull', 
    @update_mode = N'failover';
GO