Condividi tramite


Procedura: Creazione dello snapshot iniziale (programmazione Transact-SQL della replica)

Gli snapshot iniziali possono essere creati a livello di programmazione creando ed eseguendo un processo dell'agente snapshot o eseguendo il file eseguibile dell'agente snapshot da un file batch. Dopo la generazione, lo snapshot iniziale viene trasferito e applicato al Sottoscrittore la prima volta che la sottoscrizione viene sincronizzata. Se si esegue l'agente snapshot da un prompt dei comandi o un file batch, sarà necessario rieseguirlo ogni volta che lo snapshot esistente diventa non valido.

Per le pubblicazioni di tipo merge che utilizzano filtri con parametri è necessario uno snapshot a due parti. Per ulteriori informazioni, vedere Procedura: Creazione di uno snapshot per una pubblicazione di tipo merge con filtri con parametri (programmazione Transact-SQL della replica).

Nota sulla protezioneNota sulla protezione

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 ed eseguire un processo dell'agente snapshot per generare lo snapshot iniziale

  1. Creare una pubblicazione snapshot, transazionale o di tipo merge. Per ulteriori informazioni, vedere Procedura: Creazione di una pubblicazione (programmazione Transact-SQL della replica).

  2. Eseguire sp_addpublication_snapshot (Transact-SQL). Specificare @publication e i parametri seguenti:

    • @job_login, che specifica le credenziali dell'autenticazione di Windows con cui l'agente snapshot viene eseguito nel server di distribuzione.

    • @job_password, che corrisponde alla password per le credenziali di Windows specificate.

    • (Facoltativo) Valore 0 per @publisher_security_mode se l'agente utilizzerà l'autenticazione di SQL Server per la connessione al server di pubblicazione. In questo caso, è necessario specificare anche le informazioni di accesso dell'autenticazione di SQL Server per @publisher_login e @publisher_password.

    • (Facoltativo) Pianificazione della sincronizzazione per il processo dell'agente snapshot. Per ulteriori informazioni, vedere Procedura: Impostazione di pianificazioni della sincronizzazione (programmazione Transact-SQL della replica).

    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.

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

  4. Nel database di pubblicazione del server di pubblicazione eseguire sp_startpublication_snapshot (Transact-SQL), specificando per @publication il valore ottenuto al passaggio 1.

Per eseguire l'agente snapshot per generare lo snapshot iniziale

  1. Creare una pubblicazione snapshot, transazionale o di tipo merge. Per ulteriori informazioni, vedere Procedura: Creazione di una pubblicazione (programmazione Transact-SQL della replica).

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

  3. Dal prompt dei comandi o in un file batch avviare l'Agente snapshot repliche eseguendo snapshot.exe con gli argomenti della riga di comando seguenti:

    • -Publication

    • -Publisher

    • -Distributor

    • -PublisherDB

    • -ReplicationType

    Se si utilizza l'autenticazione di SQL Server, è inoltre necessario specificare gli argomenti seguenti:

    • -DistributorLogin

    • -DistributorPassword

    • -DistributorSecurityMode = 0

    • -PublisherLogin

    • -PublisherPassword

    • -PublisherSecurityMode = 0

Esempio

In questo esempio viene illustrato come creare una pubblicazione transazionale e aggiungere un processo dell'agente snapshot per la nuova pubblicazione (utilizzando le variabili di scripting SQLCMD). Viene inoltre avviato il processo.

-- 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'; --publication database
SET @publication = N'AdvWorksCustomerTran'; -- transactional publication name
SET @login = $(Login);
SET @password = $(Password);

USE [AdventureWorks]

-- Enable transactional and 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 security mode used when connecting to the Publisher.
  @publisher_security_mode = 1;

-- Create new transactional publication, using the defaults. 
USE [AdventureWorks]
EXEC sp_addpublication 
  @publication = @publication, 
  @description = N'transactional publication';

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

-- Start the Snapshot Agent job.
EXEC sp_startpublication_snapshot @publication = @publication;
GO

In questo esempio viene creata una pubblicazione di tipo merge e viene aggiunto un processo dell'agente snapshot (utilizzando le variabili sqlcmd) per la pubblicazione. Viene inoltre avviato il processo.

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

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.
USE master
EXEC sp_replicationdboption 
  @dbname = @publicationDB, 
  @optname=N'merge publish',
  @value = N'true';

-- Create new merge publication, using the defaults. 
USE [AdventureWorks]
EXEC sp_addmergepublication 
  @publication = @publication, 
  @description = N'Merge publication.';

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

-- Start the Snapshot Agent job.
EXEC sp_startpublication_snapshot @publication = @publication;
GO

Con gli argomenti della riga di comando seguenti l'agente snapshot viene avviato per generare lo snapshot per una pubblicazione di tipo merge.

[!NOTA]

Le interruzioni di riga sono state aggiunte per agevolare la lettura. In un file batch i comandi devono essere inseriti in una singola riga.

REM -- Declare variables
SET Publisher=%InstanceName%
SET PublicationDB=AdventureWorks 
SET Publication=AdvWorksSalesOrdersMerge 

REM --Start the Snapshot Agent to generate the snapshot for AdvWorksSalesOrdersMerge.
"C:\Program Files\Microsoft SQL Server\100\COM\SNAPSHOT.EXE" -Publication %Publication% 
-Publisher %Publisher% -Distributor %Publisher% -PublisherDB %PublicationDB% 
-ReplicationType 2 -OutputVerboseLevel 1 -DistributorSecurityMode 1