Vorgehensweise: Erstellen des Anfangssnapshots (Replikationsprogrammierung mit Transact-SQL)

Sie können Anfangssnapshots programmgesteuert erstellen, indem Sie entweder einen Snapshot-Agentauftrag erstellen und ausführen oder die ausführbare Datei für den Snapshot-Agent von einer Batchdatei ausführen. Nachdem ein Anfangssnapshot generiert wurde, wird er an den Abonnenten übertragen und auf diesen angewendet, sobald die erste Synchronisierung für das Abonnement durchgeführt wird. Wenn Sie den Snapshot-Agent von der Eingabeaufforderung oder einer Batchdatei ausführen, müssen Sie den Agent immer dann erneut ausführen, wenn der bestehende Snapshot ungültig wird.

Mergeveröffentlichungen, die parametrisierte Filter verwenden, erfordern einen zweiteiligen Snapshot. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen eines Snapshots für Mergepublikationen mit parametrisierten Filtern (Replikationsprogrammierung mit Transact-SQL).

SicherheitshinweisSicherheitshinweis

Benutzer sollten nach Möglichkeit dazu aufgefordert werden, Anmeldeinformationen zur Laufzeit einzugeben. Wenn Anmeldeinformationen in einer Skriptdatei gespeichert werden müssen, muss die Datei geschützt werden, um unberechtigte Zugriffe zu verhindern.

So erstellen Sie einen Snapshot-Agentauftrag und führen ihn aus, um den Anfangssnapshot zu generieren

  1. Erstellen Sie eine Snapshot-, Transaktions- oder Mergeveröffentlichung. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen einer Veröffentlichung (Replikationsprogrammierung mit Transact-SQL).

  2. Führen Sie sp_addpublication_snapshot (Transact-SQL) aus. Geben Sie @publication und die folgenden Parameter an:

    • @job_login – gibt die Anmeldeinformationen für die Windows-Authentifizierung an, mit denen der Snapshot-Agent beim Verteiler ausgeführt wird.

    • @job_password – entspricht dem Kennwort für die angegebenen Windows-Anmeldeinformationen.

    • (Optional) Den Wert 0 für @publisher_security_mode, wenn der Agent die SQL Server-Authentifizierung zum Herstellen der Verbindung mit dem Verleger verwendet. In diesem Fall müssen Sie auch die Anmeldeinformationen für die SQL Server-Authentifizierung für @publisher_login und @publisher_password angeben.

    • (Optional) Einen Synchronisierungszeitplan für den Snapshot-Agentauftrag. Weitere Informationen finden Sie unter Vorgehensweise: Synchronisierungszeitpläne (Replikationsprogrammierung mit Transact-SQL).

    SicherheitshinweisSicherheitshinweis

     Beim Konfigurieren eines Verlegers mit einem Remoteverteiler werden die Werte, die für alle Parameter einschließlich job_login und job_password bereitgestellt werden, als Nur-Text an den Verteiler gesendet. Sie sollten die Verbindung zwischen dem Verleger und dem zugehörigen Remoteverteiler verschlüsseln, bevor Sie diese gespeicherte Prozedur ausführen. Weitere Informationen finden Sie unter Verschlüsseln von Verbindungen zu SQL Server.

  3. Fügen Sie der Veröffentlichung Artikel hinzu. Weitere Informationen finden Sie unter Vorgehensweise: Definieren eines Artikels (Replikationsprogrammierung mit Transact-SQL).

  4. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_startpublication_snapshot (Transact-SQL) unter Angabe des Werts aus Schritt 1 für @publication aus.

So führen Sie den Snapshot-Agent zum Generieren des Anfangssnapshots aus

  1. Erstellen Sie eine Snapshot-, Transaktions- oder Mergeveröffentlichung. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen einer Veröffentlichung (Replikationsprogrammierung mit Transact-SQL).

  2. Fügen Sie der Veröffentlichung Artikel hinzu. Weitere Informationen finden Sie unter Vorgehensweise: Definieren eines Artikels (Replikationsprogrammierung mit Transact-SQL).

  3. Starten Sie den Replikationssnapshot-Agent von der Eingabeaufforderung oder in einer Batchdatei, indem Sie die Datei snapshot.exe ausführen. Geben Sie hierzu die folgenden Befehlszeilenargumente ein:

    • -Publication

    • -Publisher

    • -Distributor

    • -PublisherDB

    • -ReplicationType

    Wenn Sie die SQL Server-Authentifizierung verwenden, müssen Sie auch die folgenden Argumente angeben:

    • -DistributorLogin

    • -DistributorPassword

    • -DistributorSecurityMode = 0

    • -PublisherLogin

    • -PublisherPassword

    • -PublisherSecurityMode = 0

Beispiel

In diesem Beispiel wird eine Transaktionsveröffentlichung erstellt und ein Snapshot-Agentauftrag für die neue Veröffentlichung hinzugefügt (mithilfe von sqlcmd-Skriptvariablen). Im Beispiel wird der Auftrag auch gestartet.

-- 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 diesem Beispiel wird eine Mergeveröffentlichung erstellt und ein Snapshot-Agentauftrag für die Veröffentlichung hinzugefügt (mithilfe von sqlcmd-Variablen). Im Beispiel wird der Auftrag auch gestartet.

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

Die folgenden Befehlszeilenargumente starten den Snapshot-Agent, um den Snapshot für eine Mergeveröffentlichung zu generieren.

HinweisHinweis

Zeilenumbrüche wurden hinzugefügt, um die Lesbarkeit zu verbessern. In einer Batchdatei müssen Befehle auf einer einzelnen Zeile geschrieben sein.

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