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
Nel server di pubblicazione eseguire sp_helppublication per verificare che la pubblicazione supporti le sottoscrizioni ad aggiornamento immediato.
Se il valore di allow_sync_tran nel set di risultati è 1, la pubblicazione supporta le sottoscrizioni ad aggiornamento immediato.
Se il valore di allow_sync_tran nel set di risultati è 0, sarà necessario creare nuovamente la pubblicazione attivando le sottoscrizioni ad aggiornamento immediato. Per ulteriori informazioni, vedere Procedura: Attivazione delle sottoscrizioni aggiornabili per le pubblicazioni transazionali (programmazione Transact-SQL della replica).
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.
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.
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).
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.
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
Nel server di pubblicazione eseguire sp_helppublication per verificare che la pubblicazione supporti le sottoscrizioni ad aggiornamento immediato.
Se il valore di allow_sync_tran nel set di risultati è 1, la pubblicazione supporta le sottoscrizioni ad aggiornamento immediato.
Se il valore di allow_sync_tran nel set di risultati è 0, sarà necessario creare nuovamente la pubblicazione attivando le sottoscrizioni ad aggiornamento immediato. Per ulteriori informazioni, vedere Procedura: Attivazione delle sottoscrizioni aggiornabili per le pubblicazioni transazionali (programmazione Transact-SQL della replica).
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.
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.
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).
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
Nel server di pubblicazione eseguire sp_helppublication per verificare che la pubblicazione supporti le sottoscrizioni ad aggiornamento in coda.
Se il valore di allow_queued_tran nel set di risultati è 1, la pubblicazione supporta le sottoscrizioni ad aggiornamento immediato.
Se il valore di allow_queued_tran nel set di risultati è 0, sarà necessario creare nuovamente la pubblicazione attivando le sottoscrizioni ad aggiornamento in coda. Per ulteriori informazioni, vedere Procedura: Attivazione delle sottoscrizioni aggiornabili per le pubblicazioni transazionali (programmazione Transact-SQL della replica).
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.
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.
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).
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
Nel server di pubblicazione eseguire sp_helppublication per verificare che la pubblicazione supporti le sottoscrizioni ad aggiornamento in coda.
Se il valore di allow_queued_tran nel set di risultati è 1, la pubblicazione supporta le sottoscrizioni ad aggiornamento immediato.
Se il valore di allow_queued_tran nel set di risultati è 0, sarà necessario creare nuovamente la pubblicazione attivando le sottoscrizioni ad aggiornamento in coda. Per ulteriori informazioni, vedere Procedura: Attivazione delle sottoscrizioni aggiornabili per le pubblicazioni transazionali (programmazione Transact-SQL della replica).
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.
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.
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