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

È possibile creare pubblicazioni a livello di programmazione tramite le stored procedure di replica. Le stored procedure utilizzate dipenderanno dal tipo di pubblicazione creato.

Nota sulla protezioneNota sulla protezione

Se possibile, utilizzare l'autenticazione di Windows. Se possibile, richiedere agli utenti di immettere le credenziali di protezione in fase di esecuzione. Se è necessario archiviare le credenziali in un file script, è fondamentale proteggere il file per evitare accessi non autorizzati.

Per creare una pubblicazione snapshot o transazionale

  1. Nel database di pubblicazione del server di pubblicazione eseguire sp_replicationdboption (Transact-SQL) per attivare la pubblicazione del database corrente utilizzando la replica snapshot o transazionale.

  2. Per una pubblicazione transazionale, determinare se esiste un processo dell'agente di lettura log per il database di pubblicazione. Questo passaggio non è necessario per le pubblicazioni snapshot.

    • Se per il database di pubblicazione esiste un processo dell'agente di lettura log, procedere con il passaggio 3.

    • Per sapere se un processo dell'agente di lettura log esiste per un database pubblicato, eseguire sp_helplogreader_agent (Transact-SQL) nel database di pubblicazione del server di pubblicazione.

    • Se il set di risultati è vuoto, creare un processo dell'agente di lettura log. Nel server di pubblicazione eseguire sp_addlogreader_agent (Transact-SQL). Specificare le credenziali di Microsoft Windows utilizzate per l'esecuzione dell'agente per @job_name e @job_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 MicrosoftSQL Server per @publisher_login e @publisher_password. Procedere al passaggio 3.

  3. Nel server di pubblicazione eseguire sp_addpublication (Transact-SQL). Specificare il nome della pubblicazione per @publication e per il parametro @repl_freq specificare il valore snapshot per una pubblicazione snapshot o il valore continuous per una pubblicazione transazionale. Specificare eventuali altre opzioni della pubblicazione. In questo modo viene definita la pubblicazione.

    [!NOTA]

    I nomi delle pubblicazioni non possono includere i caratteri seguenti:

    % * [ ] | : " ? \ / < >

  4. Nel server di pubblicazione eseguire sp_addpublication_snapshot (Transact-SQL). Specificare il nome della pubblicazione utilizzato al passaggio 3 per @publication e le credenziali di Windows utilizzate per l'agente snapshot per snapshot_job_name e @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 Server per @publisher_login e @publisher_password. Verrà creato un processo dell'agente snapshot per la pubblicazione.

    Nota sulla protezioneNota sulla protezione

     Quando si configura un server di pubblicazione con un server di distribuzione remoto, i valori specificati per tutti i parametri, inclusi job_login e job_password, vengono inviati al server di distribuzione come testo normale. È consigliabile crittografare la connessione tra il server di pubblicazione e il server di distribuzione remoto prima di eseguire questa stored procedure. Per ulteriori informazioni, vedere Crittografia delle connessioni a SQL Server.

  5. Aggiungere articoli alla pubblicazione. Per ulteriori informazioni, vedere Procedura: Definizione di un articolo (programmazione Transact-SQL della replica).

  6. Avviare il processo dell'agente snapshot per generare lo snapshot iniziale per la pubblicazione. Per ulteriori informazioni, vedere Procedura: Creazione dello snapshot iniziale (programmazione Transact-SQL della replica).

Per creare una pubblicazione di tipo merge

  1. Nel database di pubblicazione sp_replicationdboption (Transact-SQL) per attivare la pubblicazione del database corrente utilizzando la replica di tipo merge.

  2. Nel database di pubblicazione del server di pubblicazione eseguire sp_addmergepublication (Transact-SQL). Specificare il nome della pubblicazione per @publication e eventuali altre opzioni della pubblicazione. In questo modo viene definita la pubblicazione.

    [!NOTA]

    I nomi delle pubblicazioni non possono includere i caratteri seguenti:

    % * [ ] | : " ? \ / < >

  3. Nel server di pubblicazione eseguire sp_addpublication_snapshot (Transact-SQL). Specificare il nome della pubblicazione utilizzato al passaggio 2 per @publication e le credenziali di Windows utilizzate per l'agente snapshot per snapshot_job_name e @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 Server per @publisher_login e @publisher_password. Verrà creato un processo dell'agente snapshot per la pubblicazione.

    Nota sulla protezioneNota sulla protezione

     Quando si configura un server di pubblicazione con un server di distribuzione remoto, i valori specificati per tutti i parametri, inclusi job_login e job_password, vengono inviati al server di distribuzione come testo normale. È consigliabile crittografare la connessione tra il server di pubblicazione e il server di distribuzione remoto prima di eseguire questa stored procedure. Per ulteriori informazioni, vedere Crittografia delle connessioni a SQL Server.

  4. Aggiungere articoli alla pubblicazione. Per ulteriori informazioni, vedere Procedura: Definizione di un articolo (programmazione Transact-SQL della replica).

  5. Avviare il processo dell'agente snapshot per generare lo snapshot iniziale per la pubblicazione. Per ulteriori informazioni, vedere Procedura: Creazione dello snapshot iniziale (programmazione Transact-SQL della replica).

Esempio

In questo esempio viene creata una pubblicazione transazionale. Per passare le credenziali di Windows necessarie per la creazione di processi per l'agente snapshot e per l'agente di lettura log, vengono utilizzate variabili di scripting.

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

DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks'; 
SET @publication = N'AdvWorksProductTran'; 
-- Windows account used to run the Log Reader and Snapshot Agents.
SET @login = $(Login); 
-- This should be passed at runtime.
SET @password = $(Password); 

-- Enable transactional or snapshot 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 new transactional publication with the required properties. 
EXEC sp_addpublication 
    @publication = @publication, 
    @status = N'active',
    @allow_push = N'true',
    @allow_pull = N'true',
    @independent_agent = N'true';

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

In questo esempio viene creata una pubblicazione di tipo merge. Per passare le credenziali di Windows necessarie per la creazione del processo per l'agente snapshot, vengono utilizzate variabili di scripting.

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

--Declarations for adding a merge publication
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks'; 
SET @publication = N'AdvWorksSalesOrdersMerge'; 
SET @login = $(Login);
SET @password = $(Password);

-- Enable merge replication on the publication database, using defaults.
USE master
EXEC sp_replicationdboption 
  @dbname=@publicationDB, 
  @optname=N'merge publish',
  @value = N'true' 

-- Create a new merge publication, explicitly setting the defaults. 
USE [AdventureWorks]
EXEC sp_addmergepublication 
-- These parameters are optional.
  @publication = @publication,
  -- optional parameters 
  @description = N'Merge publication of AdventureWorks.',
  @publication_compatibility_level  = N'90RTM';

-- Create a new snapshot job for the publication.
EXEC sp_addpublication_snapshot 
  @publication = @publication, 
  @job_login = @login, 
  @job_password = @password;
GO