Abilitazione delle sottoscrizioni aggiornabili per le pubblicazioni transazionaliEnable Updating Subscriptions for Transactional Publications

In questo argomento viene descritto come abilitare l'aggiornamento delle sottoscrizioni per pubblicazioni transazionali in SQL Server 2017SQL Server 2017 tramite SQL Server Management StudioSQL Server Management Studio o Transact-SQLTransact-SQL.This topic describes how to enable updating subscriptions for transactional publications in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL.

NOTANOTE!! Questa funzionalità verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server.This feature will be removed in a future version of Microsoft SQL Server. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

Prima di iniziare Before You Begin

Sicurezza Security

Se possibile, richiedere agli utenti di immettere le credenziali di sicurezza in fase di esecuzione.When possible, prompt users to enter security credentials at runtime. Se è necessario archiviare le credenziali in un file script, è fondamentale proteggere il file per evitare accessi non autorizzati.If you must store credentials in a script file, you must secure the file to prevent unauthorized access.

Utilizzo di SQL Server Management Studio Using SQL Server Management Studio

Abilitare le sottoscrizioni aggiornabili per le pubblicazioni transazionali nella pagina Tipo di pubblicazione della Creazione guidata nuova pubblicazione.Enable updating subscriptions for transactional publications on the Publication Type page of the New Publication Wizard.

Per utilizzare le sottoscrizioni aggiornabili, è inoltre necessario configurare le opzioni della Creazione guidata nuova sottoscrizione.To use updating subscriptions, you must also configure options in the New Subscription Wizard.

Per attivare le sottoscrizioni aggiornabiliTo enable updating subscriptions

  1. Nella pagina Tipo di pubblicazione della Creazione guidata nuova pubblicazione, selezionare Pubblicazione transazionale con sottoscrizioni aggiornabili.On the Publication Type page of the New Publication Wizard, select Transactional publication with updatable subscriptions.

  2. Nella pagina Sicurezza agente , specificare le impostazioni di sicurezza per l'agente di lettura coda, per l'agente snapshot e per l'agente di lettura log.On the Agent Security page, specify security settings for the Queue Reader Agent in addition to the Snapshot Agent and Log Reader Agent. Per ulteriori informazioni sulle autorizzazioni necessarie per l'account con cui viene eseguito l'agente di lettura coda, vedere Replication Agent Security Model.For more information about the permissions required for the account under which the Queue Reader Agent runs, see Replication Agent Security Model.

    NOTA: L'agente di lettura coda viene configurato anche se si usano solo le sottoscrizioni ad aggiornamento immediato.NOTE: The Queue Reader Agent is configured even if you use only immediate updating subscriptions.

Utilizzo di Transact-SQL Using Transact-SQL

Quando si crea una pubblicazione transazionale a livello di programmazione utilizzando stored procedure di replica, è possibile abilitare sottoscrizioni ad aggiornamento immediato o in coda.When creating a transactional publication programmatically using replication stored procedures, you can enable either immediate or queued updating subscriptions.

Per creare una pubblicazione che supporta sottoscrizioni ad aggiornamento immediatoTo create a publication that supports immediate updating subscriptions

  1. Se necessario, creare un processo dell'agente di lettura log per il database di pubblicazione.If necessary, create a Log Reader Agent job for the publication database.

    • Se per il database di pubblicazione esiste già un processo dell'agente di lettura log, procedere con il passaggio 2.If a Log Reader Agent job already exists for the publication database, proceed to step 2.

    • Per sapere se un processo dell'agente di lettura log esiste già per un database pubblicato, eseguire sp_helplogreader_agent (Transact-SQL) nel database di pubblicazione nel server di pubblicazione.If you are unsure whether a Log Reader Agent job exists for a published database, execute sp_helplogreader_agent (Transact-SQL) at the Publisher on the publication database. Se il set di risultati è vuoto, sarà necessario creare un processo dell'agente di lettura log.If the result set is empty, a Log Reader Agent job must be created.

    • Nel server di pubblicazione eseguire sp_addlogreader_agent (Transact-SQL).At the publisher, execute sp_addlogreader_agent (Transact-SQL). Specificare le credenziali di MicrosoftMicrosoft Windows utilizzate per l'esecuzione dell'agente per @job_name e @password.Specify the MicrosoftMicrosoft Windows credentials under which the agent runs for @job_name and @password. Se l'agente utilizza l'autenticazione di SQL Server per la connessione al server di pubblicazione, è inoltre necessario specificare il valore 0 per @publisher_security_mode e le informazioni sull'account di accesso di MicrosoftMicrosoft SQL ServerSQL Server per @publisher_login e @publisher_password.If the agent will use SQL Server Authentication when connecting to the Publisher, you must also specify a value of 0 for @publisher_security_mode and the MicrosoftMicrosoft SQL ServerSQL Server login information for @publisher_login and @publisher_password.

  2. Eseguire sp_addpublication (Transact-SQL), specificando il valore true per il parametro @allow_sync_tran.Execute sp_addpublication (Transact-SQL), specifying a value of true for the parameter @allow_sync_tran.

  3. Nel server di pubblicazione eseguire sp_addpublication_snapshot (Transact-SQL).At the Publisher, execute sp_addpublication_snapshot (Transact-SQL). Specificare il nome della pubblicazione usato nel passaggio 2 per @publication e le credenziali di Windows con cui viene eseguito l'agente snapshot per @job_name e @password.Specify the publication name used in step 2 for @publication and the Windows credentials under which the Snapshot Agent runs for @job_name and @password. Se l'agente utilizza l'autenticazione di SQL Server per la connessione al server di pubblicazione, è inoltre necessario specificare il valore 0 per @publisher_security_mode e le informazioni sull'account di accesso di SQL ServerSQL Server per @publisher_login e @publisher_password.If the agent will use SQL Server Authentication when connecting to the Publisher, you must also specify a value of 0 for @publisher_security_mode and the SQL ServerSQL Server login information for @publisher_login and @publisher_password. Verrà creato un processo dell'agente snapshot per la pubblicazione.This creates a Snapshot Agent job for the publication.

  4. Aggiungere articoli alla pubblicazione.Add articles to the publication. Per altre informazioni, vedere Define an Article.For more information, see Define an Article.

  5. Nel Sottoscrittore creare una sottoscrizione aggiornabile per la pubblicazione.At the Subscriber, create an updating subscription to this publication.

Per creare una pubblicazione che supporta sottoscrizioni ad aggiornamento in codaTo create a publication that supports queued updating subscriptions

  1. Se necessario, creare un processo dell'agente di lettura log per il database di pubblicazione.If necessary, create a Log Reader Agent job for the publication database.

    • Se per il database di pubblicazione esiste già un processo dell'agente di lettura log, procedere con il passaggio 2.If a Log Reader Agent job already exists for the publication database, proceed to step 2.

    • Per sapere se un processo dell'agente di lettura log esiste già per un database pubblicato, eseguire sp_helplogreader_agent (Transact-SQL) nel database di pubblicazione nel server di pubblicazione.If you are unsure whether a Log Reader Agent job exists for a published database, execute sp_helplogreader_agent (Transact-SQL) at the Publisher on the publication database. Se il set di risultati è vuoto, sarà necessario creare un processo dell'agente di lettura log.If the result set is empty, then a Log Reader Agent job must be created.

    • Nel server di pubblicazione eseguire sp_addlogreader_agent (Transact-SQL).At the publisher, execute sp_addlogreader_agent (Transact-SQL). Specificare le credenziali di Windows utilizzate per l'esecuzione dell'agente per @job_name e @password.Specify the Windows credentials under which the agent runs for @job_name and @password. Se l'agente utilizza l'autenticazione di SQL Server per la connessione al server di pubblicazione, è inoltre necessario specificare il valore 0 per @publisher_security_mode e le informazioni sull'account di accesso di SQL ServerSQL Server per @publisher_login e @publisher_password.If the agent will use SQL Server Authentication when connecting to the Publisher, you must also specify a value of 0 for @publisher_security_mode and the SQL ServerSQL Server login information for @publisher_login and @publisher_password.

  2. Se necessario, creare un processo dell'agente di lettura coda per il server di distribuzione.If necessary, create a Queue Reader Agent job for the Distributor.

    • Se per il database di distribuzione esiste già un processo dell'agente di lettura coda, procedere con il passaggio 3.If a Queue Reader Agent job already exists for the distribution database, proceed to step 3.

    • Per sapere se un processo dell'agente di lettura coda esiste già per un database di distribuzione, eseguire sp_helpqreader_agent (Transact-SQL) nel database di distribuzione nel server di distribuzione.If you are unsure whether a Queue Reader Agent job exists for the distribution database, execute sp_helpqreader_agent (Transact-SQL) at the Distributor on the distribution database. Se il set di risultati è vuoto, sarà necessario creare un processo dell'agente di lettura coda.If the result set is empty, then a Queue Reader Agent job must be created.

    • Nel database di distribuzione eseguire sp_addqreader_agent (Transact-SQL).At the Distributor, execute sp_addqreader_agent (Transact-SQL). Specificare le credenziali di Windows utilizzate per l'esecuzione dell'agente per @job_name e @password.Specify the Windows credentials under which the agent runs for @job_name and @password. Queste credenziali vengono utilizzate quando l'agente di lettura coda si connette al server di pubblicazione e al Sottoscrittore.These credentials are used when the Queue Reader Agent connects to the Publisher and Subscriber. Per altre informazioni, vedere Replication Agent Security Model.For more information, see Replication Agent Security Model.

  3. Eseguire sp_addpublication (Transact-SQL), specificando il valore true per il parametro @allow_queued_tran e il valore pub wins, sub reinit o sub wins per @conflict_policy.Execute sp_addpublication (Transact-SQL), specifying a value of true for the parameter @allow_queued_tran and a value of pub wins, sub reinit, or sub wins for @conflict_policy.

  4. Nel server di pubblicazione eseguire sp_addpublication_snapshot (Transact-SQL).At the Publisher, execute sp_addpublication_snapshot (Transact-SQL). Specificare il nome della pubblicazione utilizzato al passaggio 3 per @publication e le credenziali di Windows con cui viene eseguito l'agente snapshot per @snapshot_job_name e @password.Specify the publication name used in step 3 for @publication and the Windows credentials under which the Snapshot Agent runs for @snapshot_job_name and @password. Se l'agente utilizza l'autenticazione di SQL Server per la connessione al server di pubblicazione, è inoltre necessario specificare il valore 0 per @publisher_security_mode e le informazioni sull'account di accesso di SQL ServerSQL Server per @publisher_login e @publisher_password.If the agent will use SQL Server Authentication when connecting to the Publisher, you must also specify a value of 0 for @publisher_security_mode and the SQL ServerSQL Server login information for @publisher_login and @publisher_password. Verrà creato un processo dell'agente snapshot per la pubblicazione.This creates a Snapshot Agent job for the publication.

  5. Aggiungere articoli alla pubblicazione.Add articles to the publication. Per altre informazioni, vedere Define an Article.For more information, see Define an Article.

  6. Nel Sottoscrittore creare una sottoscrizione aggiornabile per la pubblicazione.At the Subscriber, create an updating subscription to this publication.

Per modificare i criteri per la gestione dei conflitti per una pubblicazione che consente le sottoscrizioni ad aggiornamento in codaTo change the conflict policy for a publication that allows queued updating subscriptions

  1. Nel database di pubblicazione nel server di pubblicazione eseguire sp_changepublication (Transact-SQL).At the Publisher on the publication database, execute sp_changepublication (Transact-SQL). Specificare il valore conflict_policy per @property e i criteri desiderati per la gestione dei conflitti pub wins, sub reinito sub wins per @value.Specify a value of conflict_policy for @property and the desired conflict policy mode of pub wins, sub reinit, or sub wins for @value.

Esempio (Transact-SQL) Example (Transact-SQL)

In questo esempio viene creata una pubblicazione che supporta le sottoscrizioni pull ad aggiornamento immediato e in coda.This example creates a publication that supported both immediate and queued updating pull subscriptions.

-- To avoid storing the login and password in the script file, the values 
-- are passed into SQLCMD as scripting variables. 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".

--Declarations for adding a transactional publication
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks2012'; 
SET @publication = N'AdvWorksProductTran'; 
SET @login = $(Login); 
SET @password = $(Password); 

USE [AdventureWorks]
-- Enable transactional replication on the publication 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;

-- Create a transactional publication that supports immediate updating, 
-- queued updating, and pull subscriptions. 
EXEC sp_addpublication 
	@publication = @publication, 
	@status = N'active',
	@allow_sync_tran = N'true', 
	@allow_queued_tran = N'true',
	@allow_pull = N'true',
	@independent_agent = N'true',
  -- Explicitly declare the related default properties 
	@conflict_policy = N'pub wins';

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

--Declarations for adding an article.
DECLARE @publication AS sysname;
DECLARE @article AS sysname;
DECLARE @owner AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @article = N'Product'; 
SET @owner = N'Production'; 

-- Add a horizontally and vertically filtered article for the Product table.
USE [AdventureWorks2012]
EXEC sp_addarticle 
	@publication = @publication, 
	@article = @article, 
	@source_table = @article, 
	@vertical_partition = N'false', 
	@type = N'logbased',
	@source_owner = @owner, 
	@destination_owner = @owner;
GO

Vedere ancheSee Also

Impostare le opzioni di risoluzione dei conflitti per l'aggiornamento in coda (SQL Server Management Studio) Set Queued Updating Conflict Resolution Options (SQL Server Management Studio)
Tipi di pubblicazioni per la replica transazionale Publication Types for Transactional Replication
Updatable Subscriptions for Transactional Replication Updatable Subscriptions for Transactional Replication
Creare una pubblicazione Create a Publication
Create an Updatable Subscription to a Transactional Publication Create an Updatable Subscription to a Transactional Publication
Updatable Subscriptions for Transactional Replication Updatable Subscriptions for Transactional Replication
Usare sqlcmd con variabili di scripting Use sqlcmd with Scripting Variables