Erstellen und Anwenden der AnfangsmomentaufnahmeCreate and Apply the Initial Snapshot

Anwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) JaVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceYesVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceAnwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) JaVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceYesVerwaltete Azure SQL-InstanzAzure SQL Managed Instance

In diesem Thema wird beschrieben, wie die Anfangsmomentaufnahme in SQL Server 2019 (15.x)SQL Server 2019 (15.x) mit SQL Server Management StudioSQL Server Management Studio, Transact-SQLTransact-SQLoder Replikationsverwaltungsobjekten (RMO) erstellt und übernommen wird.This topic describes how to create and apply the initial snapshot in SQL Server 2019 (15.x)SQL Server 2019 (15.x) by using SQL Server Management StudioSQL Server Management Studio, Transact-SQLTransact-SQL, or Replication Management Objects (RMO). Mergeveröffentlichungen, die parametrisierte Filter verwenden, erfordern eine zweiteilige Momentaufnahme.Merge publications that use parameterized filters require a two-part snapshot. Weitere Informationen finden Sie unter Erstellen einer Momentaufnahme für eine Mergeveröffentlichung mit parametrisierten Filtern.For more information, see Create a Snapshot for a Merge Publication with Parameterized Filters.
Momentaufnahmen werden nach dem Erstellen einer Veröffentlichung vom Momentaufnahme-Agent generiert.Snapshots are generated by the Snapshot Agent after a publication is created. Sie können folgendermaßen generiert werden:They can be generated:

  • Sofort.Immediately. Standardmäßig wird eine Momentaufnahme für eine Mergeveröffentlichung sofort nach dem Erstellen der Veröffentlichung im Assistenten für neue Veröffentlichung generiert.By default, a snapshot for a merge publication is generated immediately after the publication is created in the New Publication Wizard.
  • Zu einem geplanten Zeitpunkt.At a scheduled time. Geben Sie auf der Seite Momentaufnahme-Agent des Assistenten für neue Veröffentlichung oder beim Verwenden von gespeicherten Prozeduren bzw. Replikationsverwaltungsobjekten (RMO) einen Zeitpunkt an.Specify a schedule on the Snapshot Agent page of the New Publication Wizard or when using stored procedures or Replication Management Objects (RMO).
  • Manuell.Manually. Führen Sie den Momentaufnahme-Agent von der Eingabeaufforderung oder in SQL Server Management StudioSQL Server Management Studioaus.Run the Snapshot Agent from the command prompt or from SQL Server Management StudioSQL Server Management Studio. Weitere Informationen zum Ausführen von Agents finden Sie unter Ausführbare Konzepte für die Programmierung von Replikations-Agents und Starten und Beenden eines Replikations-Agents (SQL Server Management Studio).For more information about running agents, see Replication Agent Executables Concepts and Start and Stop a Replication Agent (SQL Server Management Studio).

Bei der Mergereplikation wird jedes Mal eine Momentaufnahme generiert, wenn der Momentaufnahme-Agent ausgeführt wird.For merge replication, a snapshot is generated every time the Snapshot Agent runs. Bei der Transaktionsreplikation hängt die Momentaufnahmegenerierung von der Einstellung der immediate_sync-Veröffentlichungseigenschaft ab.For transactional replication, snapshot generation depends on the setting of the publication property immediate_sync. Ist die Eigenschaft auf TRUE festgelegt (die Standardeinstellung bei der Verwendung des Assistenten für neue Veröffentlichung), wird bei jedem Ausführen des Momentaufnahme-Agents eine Momentaufnahme generiert, der jederzeit auf einen Abonnenten angewendet werden kann.If the property is set to TRUE (the default when using the New Publication Wizard), a snapshot is generated every time the Snapshot Agent runs, and it can be applied to a Subscriber at any time. Ist die Eigenschaft auf FALSE festgelegt (die Standardeinstellung bei der Verwendung von sp_addpublication), wird die Momentaufnahme nur dann generiert, wenn seit dem letzten Ausführen des Momentaufnahme-Agents ein neues Abonnement hinzugefügt wurde. Abonnenten können erst synchronisiert werden, nachdem der Momentaufnahme-Agent abgeschlossen ist.If the property is set to FALSE (the default when using sp_addpublication), the snapshot is generated only if a new subscription has been added since the last Snapshot Agent run; Subscribers must wait for the Snapshot Agent to complete before they can synchronize.

Generierte Momentaufnahmen werden im Standardmomentaufnahmeordner auf dem Verteiler gespeichert.By default, when snapshots are generated, they are saved in the default snapshot folder located on the Distributor. Sie können Momentaufnahmedateien aber auch auf Wechselmedien wie z. B. Wechseldatenträgern, CD-ROMs oder an anderen Speicherorten als dem Standardmomentaufnahmeordner speichern.You can also save snapshot files on removable media such as removable disks, CD-ROMs, or in locations other than in the default snapshot folder. Darüber hinaus können Sie die Momentaufnahmedateien komprimieren, sodass sie leichter zu speichern und zu übertragen sind, und Skripts vor oder nach der Anwendung der Momentaufnahme auf den Abonnenten ausführen.Additionally, you can compress the files so that they are easier to store and transfer, and execute scripts before or after the snapshot is applied at the Subscriber. Weitere Informationen zu diesen Optionen finden Sie unter Snapshot Options.For more information about these options, see Snapshot Options.

Handelt es sich um eine Momentaufnahme für eine Mergeveröffentlichung, die parametrisierte Filter verwendet, wird die Momentaufnahme mit einem zweiteiligen Prozess erstellt.If the snapshot is for a merge publication that uses parameterized filters, the snapshot is created using a two-part process. Zuerst wird eine Schemamomentaufnahme erstellt, die die Replikationsskripts und das Schema der veröffentlichten Objekte enthält, nicht jedoch die Daten.First a schema snapshot is created that contains the replication scripts and the schema of the published objects, but not the data. Jedes Abonnement wird dann mit einer Momentaufnahme initialisiert, die die aus der Schemamomentaufnahme kopierten Skripts und das Schema sowie die Daten enthält, die zur Partition des Abonnements gehören.Each subscription is then initialized with a snapshot that includes the scripts and schema copied from the schema snapshot and the data that belongs to the subscription's partition. Weitere Informationen finden Sie unter Snapshots for Merge Publications with Parameterized Filters.For more information, see Snapshots for Merge Publications with Parameterized Filters.

Nachdem die Momentaufnahme auf dem Verleger erstellt und am standardmäßigen bzw. einem anderen Momentaufnahmespeicherort gespeichert wurde, kann sie an den Abonnenten übertragen und auf diesen angewendet werden.After the snapshot is created at the Publisher and stored in a default or alternate snapshot location, the snapshot can be transferred to the Subscriber and applied. Der Verteilungs-Agent (bei Momentaufnahme- oder Transaktionsreplikation) bzw. der Merge-Agent (bei Mergereplikation) überträgt die Momentaufnahme und wendet die Schema- und Datendateien während der Erstsynchronisierung auf die Abonnement-Datenbank auf dem Abonnenten an.The Distribution Agent (for snapshot or transactional replication) or Merge Agent (for merge replication) transfers the snapshot and applies the schema and data files to the subscription database on the Subscriber during the initial synchronization. Standardmäßig erfolgt die Erstsynchronisierung unmittelbar nach dem Erstellen einer Abonnements, wenn Sie den Assistenten für neue Veröffentlichung verwenden.By default, the initial synchronization occurs immediately after a subscription is created if you use the New Subscription Wizard. Dieses Verhalten wird von der Option Initialisierungszeitpunkt auf der Seite Abonnements initialisieren des Assistenten gesteuert.This behavior is controlled by the Initialize When option on the Initialize Subscriptions page of the wizard. Wenn Momentaufnahmen generiert werden, nachdem ein Abonnement initialisiert wurde, werden sie nicht auf den Abonnenten angewendet, es sei denn, ein Abonnement ist für die erneute Initialisierung markiert.When snapshots are generated after a subscription is initialized, they are not applied to a Subscriber unless a subscription is marked for reinitialization. Weitere Informationen finden Sie unter Erneutes Initialisieren von Abonnements.For more information, see Reinitialize Subscriptions.

Nachdem der Verteilungs- bzw. der Merge-Agent die Anfangsmomentaufnahme angewendet hat, gibt er nachfolgende Updates und andere Datenänderungen weiter.After the Distribution Agent or Merge Agent applies the initial snapshot, the agent propagates subsequent updates and other data modifications. Wenn Momentaufnahmen an Abonnenten verteilt und auf ihnen angewendet werden, sind nur die Abonnenten betroffen, die auf eine Anfangsmomentaufnahme oder neue Momentaufnahmen warten.When snapshots are distributed and applied to Subscribers, only those Subscribers waiting for initial or new snapshots are affected. Andere Abonnenten dieser Veröffentlichung (diejenigen, die bereits Einfügungen, Updates, Löschungen oder andere Änderungen der veröffentlichten Daten empfangen) sind nicht betroffen.Other Subscribers to that publication (those that are already receiving inserts, updates, deletes, or other modifications to the published data) are not affected.

Informationen zum Anzeigen oder Ändern des Standardspeicherorts für den Momentaufnahmeordner finden Sie im entsprechenden Abschnitt.To view or modify the default snapshot folder location, see

Standardspeicherort für MomentaufnahmenDefault snapshot location

Geben Sie den standardmäßigen Momentaufnahmespeicherort im Verteilungskonfigurations-Assistenten auf der Seite Snapshotordner an.Specify the default snapshot location on the Snapshot Folder page of the Configure Distribution Wizard. Weitere Informationen zum Verwenden dieses Assistenten finden Sie unter Konfigurieren der Veröffentlichung und der Verteilung.For more information about using this wizard, see Configure Publishing and Distribution. Wenn Sie eine Veröffentlichung auf einem Server erstellen, der nicht als Verteiler konfiguriert ist, geben Sie im Assistenten für neue Veröffentlichung auf der Seite Momentaufnahmeordner einen standardmäßigen Momentaufnahmespeicherort an.If you create a publication on a server that is not configured as a Distributor, specify a default snapshot location on the Snapshot Folder page of the New Publication Wizard. Weitere Informationen zum Zugreifen auf diesen Assistenten finden Sie unter Erstellen einer Veröffentlichung.For more information about using this wizard, see Create a Publication.

Ändern Sie auf der Seite Verleger den standardmäßigen Momentaufnahmespeicherort im Dialogfeld Verteilereigenschaften – <Distributor> .Modify the default snapshot location on the Publishers page of the Distributor Properties - <Distributor> dialog box. Weitere Informationen finden Sie unter Anzeigen und Ändern der Verteiler- und Verlegereigenschaften.For more information, see View and Modify Distributor and Publisher Properties. Bestimmen Sie den Momentaufnahmeordner für die einzelnen Veröffentlichungen im Dialogfeld Veröffentlichungseigenschaften – <Publication> .Set the snapshot folder for each publication in the Publication Properties - <Publication> dialog box. Weitere Informationen finden Sie unter View and Modify Publication Properties.For more information, see View and Modify Publication Properties.

Ändern des Standardspeicherorts für MomentaufnahmenModify the default snapshot location

  1. Klicken Sie auf der Seite Verleger des Dialogfelds Verteilereigenschaften – <Distributor> auf die Eigenschaftenschaltfläche ( ... ) für den Verleger, dessen standardmäßiger Momentaufnahmespeicherort geändert werden soll.On the Publishers page of the Distributor Properties - <Distributor> dialog box, click the properties button (...) for the Publisher for which you want to change the default snapshot location.

  2. Geben Sie im Dialogfeld Verlegereigenschaften – <Publisher> einen Wert für die Eigenschaft Standardmomentaufnahmeordner ein.In the Publisher Properties - <Publisher> dialog box, enter a value for the Default Snapshot Folder property.

    Hinweis

    Der Momentaufnahme-Agent muss Schreibberechtigungen für das angegebene Verzeichnis und der Verteilungs-Agent oder Merge-Agent muss Leseberechtigungen besitzen.The Snapshot Agent must have write permissions for the directory you specify, and the Distribution Agent or Merge Agent must have read permissions. Bei Verwendung von Pullabonnements müssen Sie ein freigegebenes Verzeichnis als UNC-Pfad angeben, wie z.B. \\Computername\Momentaufnahme.If pull subscriptions are used, you must specify a shared directory as a universal naming convention (UNC) path, such as \\computername\snapshot. Weitere Informationen finden Sie unter Schützen des Momentaufnahmeordners.For more information, see Secure the Snapshot Folder.

  3. Klicken Sie auf OK.Click OK.

Erstellen einer MomentaufnahmeCreate snapshot

Wenn der SQL Server-Agent ausgeführt wird, wird vom Momentaufnahmen-Agent standardmäßig sofort eine Momentaufnahme generiert, nachdem mit dem Assistenten für neue Veröffentlichung eine Veröffentlichung erstellt wurde.By default, if SQL Server Agent is running, a snapshot is generated by the Snapshot Agent immediately after a publication is created with the New Publication Wizard. Diese Momentaufnahme wird dann standardmäßig vom Verteilungs-Agent (bei der Momentaufnahme- und der Transaktionsreplikation) oder vom Merge-Agent (bei Mergeabonnement) für alle Abonnements angewendet.By default, it is then applied by the Distribution Agent (for snapshot and transactional replication) or Merge Agent (for merge subscriptions) for all subscriptions. Eine Momentaufnahme kann auch mit SQL Server Management StudioSQL Server Management Studio und dem Replikationsmonitor generiert werden.A snapshot can also be generated using SQL Server Management StudioSQL Server Management Studio and Replication Monitor. Informationen zum Starten des Replikationsmonitors finden Sie unter Starten des Replikationsmonitors.For information about starting Replication Monitor, see Start the Replication Monitor.

Verwendung von SQL Server Management StudioUsing SQL Server Management Studio

  1. Stellen Sie in Management StudioManagement Studioeine Verbindung mit dem Verleger her, und erweitern Sie dann den Serverknoten.Connect to the Publisher in Management StudioManagement Studio, and then expand the server node.
  2. Erweitern Sie den Ordner Replikation , und erweitern Sie dann den Ordner Lokale Veröffentlichungen .Expand the Replication folder, and then expand the Local Publications folder.
  3. Klicken Sie mit der rechten Maustaste auf die Veröffentlichung, für die Sie eine Momentaufnahme erstellen möchten, und klicken Sie anschließend auf Status des Momentaufnahme-Agents anzeigen.Right-click the publication for which you want to create a snapshot, and then click View Snapshot Agent Status.
  4. Klicken Sie im Dialogfeld Status des Momentaufnahmen-Agents anzeigen – <Publication> auf Start.In the View Snapshot Agent Status - <Publication> dialog box, click Start.
    Nachdem der Momentaufnahme-Agent die Momentaufnahme generiert hat, wird eine Meldung angezeigt, die beispielsweise wie folgt lautet: "[100%] Es wurde eine Momentaufnahme mit 17 Artikel(n) generiert".When the Snapshot Agent finishes generating the snapshot, a message will be displayed, such as "[100%] A snapshot of 17 article(s) was generated."

Im Replikationsmonitor:In Replication Monitor

  1. Erweitern Sie im Replikationsmonitor im linken Bereich eine Verlegergruppe, und erweitern Sie dann einen Verleger.In Replication Monitor, expand a Publisher group in the left pane, and then expand a Publisher.
  2. Klicken Sie mit der rechten Maustaste auf die Veröffentlichung, für die Sie eine Momentaufnahme generieren möchten, und klicken Sie anschließend auf Momentaufnahme generieren.Right-click the publication for which you want to generate a snapshot, and then click Generate Snapshot.
  3. Um den Status des Momentaufnahme-Agents anzuzeigen, klicken Sie auf die Registerkarte Agents . Wenn Sie genauere Informationen anzeigen möchten, klicken Sie im Raster mit der rechten Maustaste auf den Momentaufnahme-Agent, und klicken Sie dann auf Details anzeigen.To view the status of the Snapshot Agent, click the Agents tab. For more detailed information, right-click the Snapshot Agent in the grid, and then click View Details.

Verwenden von Transact-SQLUsing Transact-SQL

Sie können Anfangsmomentaufnahmen programmgesteuert erstellen, indem Sie entweder einen Momentaufnahme-Agentauftrag erstellen und ausführen oder die ausführbare Datei für den Momentaufnahme-Agent von einer Batchdatei ausführen.Initial snapshots can be programmatically created either by creating and running a Snapshot Agent job or by running the Snapshot Agent executable file from a batch file. Nachdem eine Anfangsmomentaufnahme generiert wurde, wird sie an den Abonnenten übertragen und auf diesen angewendet, sobald die erste Synchronisierung für das Abonnement durchgeführt wird.After an initial snapshot has been generated, it is transferred to and applied at the Subscriber when the subscription is first synchronized. Wenn Sie den Momentaufnahme-Agent von der Eingabeaufforderung oder einer Batchdatei ausführen, müssen Sie den Agent immer dann erneut ausführen, wenn die bestehende Momentaufnahme ungültig wird.If you run the Snapshot Agent from a command prompt or a batch file, you will need to rerun the agent whenever the existing snapshot becomes invalid.

Wichtig

Benutzer sollten nach Möglichkeit dazu aufgefordert werden, Anmeldeinformationen zur Laufzeit anzugeben.When possible, prompt users to enter security credentials at runtime. Wenn Anmeldeinformationen in einer Skriptdatei gespeichert werden müssen, muss die Datei an einem sicheren Ort gespeichert werden, um unberechtigten Zugriff zu vermeiden.If you must store credentials in a script file, you must secure the file to prevent unauthorized access.

  1. Erstellen Sie eine Momentaufnahme-, Transaktions- oder Mergeveröffentlichung.Create a snapshot, transactional, or merge publication. Weitere Informationen finden Sie unter Create a Publication.For more information, see Create a Publication.

  2. Führen Sie sp_addpublication_snapshot (Transact-SQL) aus.Execute sp_addpublication_snapshot (Transact-SQL). Geben Sie @publication und die folgenden Parameter an:Specify @publication and the following parameters:

    • @job_login gibt die Anmeldeinformationen für die Windows-Authentifizierung an, mit denen der Momentaufnahme-Agent beim Verteiler ausgeführt wird.The @job_login, which specifies the Windows Authentication credentials under which the Snapshot Agent runs at the Distributor.

    • @job_password entspricht dem Kennwort für die angegebenen Windows-Anmeldeinformationen.The @job_password, which is the password for the supplied Windows credentials.

    • (Optional) Wert 0 für @publisher_security_mode, wenn der Agent die SQL Server-Authentifizierung zum Herstellen der Verbindung mit dem Verleger verwendet.(Optional) A value of 0 for @publisher_security_mode if the agent will use SQL Server Authentication when connecting to the Publisher. In diesem Fall müssen Sie auch die Anmeldeinformationen für die SQL Server-Authentifizierung für @publisher_login und @publisher_password angeben.In this case, you must also specify the SQL Server Authentication login information for @publisher_login and @publisher_password.

    • (Optional) Einen Synchronisierungszeitplan für den Momentaufnahme-Agentauftrag.(Optional) A synchronization schedule for the Snapshot Agent job. Weitere Informationen finden Sie unter Angeben von Synchronisierungszeitplänen.For more information, see Specify Synchronization Schedules.

    Wichtig

    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.When configuring a Publisher with a remote Distributor, the values supplied for all parameters, including job_login and job_password, are sent to the Distributor as plain text. Sie sollten die Verbindung zwischen dem Verleger und dem zugehörigen Remoteverteiler verschlüsseln, bevor Sie diese gespeicherte Prozedur ausführen.You should encrypt the connection between the Publisher and its remote Distributor before executing this stored procedure. Weitere Informationen finden Sie unter Aktivieren von verschlüsselten Verbindungen zur Datenbank-Engine (SQL Server-Konfigurations-Manager).For more information, see Enable Encrypted Connections to the Database Engine (SQL Server Configuration Manager).

  3. Fügen Sie der Veröffentlichung Artikel hinzu.Add articles to the publication. Weitere Informationen finden Sie unter Definieren eines Artikels.For more information, see Define an Article.

  4. Führen Sie auf dem Verleger für die Veröffentlichungsdatenbank sp_startpublication_snapshot (Transact-SQL) aus, und geben Sie dabei den Wert @publication aus Schritt 1 an.At the Publisher on the publication database, execute sp_startpublication_snapshot (Transact-SQL), specifying the value of @publication from step 1.

Anwenden einer MomentaufnahmeApply a snapshot

Verwendung von SQL Server Management StudioUsing SQL Server Management Studio

  1. Eine generierte Momentaufnahme wird angewendet, indem das Abonnement mit dem Verteilungs-Agent oder dem Merge-Agent synchronisiert wird:After the snapshot is generated, it is applied by synchronizing the subscription with the Distribution Agent or the Merge Agent:

    • Wenn der Agent fortlaufend ausgeführt wird (die Standardeinstellung bei der Transaktionsreplikation), wird die Momentaufnahme automatisch nach dem Generieren angewendet.If the agent is set to run continuously (the default for transactional replication), the snapshot is automatically applied after it is generated.
    • Wenn der Agent nach einem Zeitplan ausgeführt wird, wird die Momentaufnahme bei der nächsten geplanten Ausführung des Agents angewendet.If the agent is set to run on a schedule, the snapshot is applied the next time the agent is scheduled to run.
    • Wenn der Agent bedarfsgesteuert ausgeführt wird, wird der Snapshot bei der nächsten Ausführung des Agents angewendet.If the agent is set to run on demand, it is applied the next time you run the agent.

    Weitere Informationen zum Synchronisieren von Abonnements finden Sie unter Synchronize a Push Subscription und Synchronize a Pull Subscriptionverfügbar ist.For more information about synchronizing subscriptions, see Synchronize a Push Subscription and Synchronize a Pull Subscription.

Verwenden von Transact-SQLUse Transact-SQL

  1. Erstellen Sie eine Momentaufnahme-, Transaktions- oder Mergeveröffentlichung.Create a snapshot, transactional, or merge publication. Weitere Informationen finden Sie unter Create a Publication.For more information, see Create a Publication.

  2. Fügen Sie der Veröffentlichung Artikel hinzu.Add articles to the publication. Weitere Informationen finden Sie unter Definieren eines Artikels.For more information, see Define an Article.

  3. Starten Sie den Replication Snapshot Agent von der Eingabeaufforderung oder in einer Batchdatei, indem Sie die Datei snapshot.exeausführen. Geben Sie hierzu die folgenden Befehlszeilenargumente ein:From the command prompt or in a batch file, start the Replication Snapshot Agent by running snapshot.exe, specifying the following command-line arguments:

    • -Publication-Publication
    • -Publisher-Publisher
    • -Distributor-Distributor
    • -PublisherDB-PublisherDB
    • -ReplicationType-ReplicationType

    Wenn Sie die SQL Server-Authentifizierung verwenden, müssen Sie auch die folgenden Argumente angeben:If you are using SQL Server Authentication, you must also specify the following arguments:

    • -DistributorLogin-DistributorLogin
    • -DistributorPassword-DistributorPassword
    • -DistributorSecurityMode = 0-DistributorSecurityMode = 0
    • -PublisherLogin-PublisherLogin
    • -PublisherPassword-PublisherPassword
    • -PublisherSecurityMode = 0-PublisherSecurityMode = 0

Beispiele (Transact-SQL)Examples (Transact-SQL)

In diesem Beispiel wird eine Transaktionsveröffentlichung erstellt und ein Momentaufnahme-Agentauftrag für die neue Veröffentlichung hinzugefügt (mithilfe von sqlcmd -Skriptvariablen).This example shows how to create a transactional publication and add a Snapshot Agent job for the new publication (using sqlcmd scripting variables). Im Beispiel wird der Auftrag auch gestartet.The example also starts the job.

-- 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'AdventureWorks2012'; --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 [AdventureWorks2012]
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 Momentaufnahme-Agentauftrag für die Veröffentlichung hinzugefügt (mithilfe von sqlcmd -Variablen).This example creates a merge publication and adds a Snapshot Agent job (using sqlcmd variables) for the publication. Im Beispiel wird der Auftrag auch gestartet.This example also starts the job.

-- 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'AdventureWorks2012'; 
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 Momentaufnahme-Agent, um die Momentaufnahme für eine Mergeveröffentlichung zu generieren.The following command-line arguments start the Snapshot Agent to generate the snapshot for a merge publication.

Hinweis

Zeilenumbrüche wurden hinzugefügt, um die Lesbarkeit zu verbessern.Line breaks were added to improve readability. In einer Batchdatei müssen Befehle in einer einzelnen Zeile stehen.In a batch file, commands must be made in a single line.

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

Verwenden von Replikationsverwaltungsobjekten (RMO)Using Replication Management Objects (RMO)

Momentaufnahmen werden nach dem Erstellen einer Veröffentlichung vom Momentaufnahme-Agent generiert.The Snapshot Agent generates snapshots after a publication is created. Sie können diese Momentaufnahmen mit Replikationsverwaltungsobjekten (RMO) und dem direkten Zugriff von verwaltetem Code auf Funktionen des Replikations-Agents programmgesteuert generieren.You can generate these snapshots programmatically by using Replication Management Objects (RMO) and direct managed code access to replication agent functionalities. Welche Objekte Sie verwenden, hängt vom Typ der Replikation ab.The objects you use depend on the type of replication. Der Momentaufnahme-Agent kann synchron mit dem SnapshotGenerationAgent -Objekt oder asynchron mit dem Agentauftrag gestartet werden.The Snapshot Agent can be started synchronously using the SnapshotGenerationAgent object or asynchronously using the agent job. Nachdem die Anfangsmomentaufnahme generiert wurde, wird sie an den Abonnenten übertragen und auf diesen angewendet, sobald die erste Synchronisierung für das Abonnement durchgeführt wird.After the initial snapshot has been generated, it is transferred to and applied at the Subscriber when the subscription is first synchronized. Sie müssen den Agent immer dann erneut ausführen, wenn die vorhandene Momentaufnahme keine gültigen und aktuellen Daten mehr enthält.You will need to rerun the agent whenever the existing snapshot no longer contains valid, up-to-date data. Weitere Informationen finden Sie unter Verwalten von Veröffentlichungen.For more information, see Maintain Publications.

Wichtig

Benutzer sollten nach Möglichkeit dazu aufgefordert werden, Anmeldeinformationen zur Laufzeit anzugeben.When possible, prompt users to enter security credentials at runtime. Wenn Sie Anmeldeinformationen speichern müssen, verwenden Sie die Kryptografiedienste von MicrosoftMicrosoft Windows .NET Framework.If you must store credentials, use the cryptographic services provided by the MicrosoftMicrosoft Windows .NET Framework.

So generieren Sie die Anfangsmomentaufnahme für eine Momentaufnahme- oder Transaktionsveröffentlichung durch Starten des Auftrags des Momentaufnahme-Agents (asynchron)To generate the initial snapshot for a snapshot or transactional publication by starting the Snapshot Agent job (asynchronous)

  1. Erstellen Sie eine Verbindung mit dem Verleger, indem Sie die ServerConnection -Klasse verwenden.Create a connection to the Publisher by using the ServerConnection class.

  2. Erstellen Sie eine Instanz der TransPublication-Klasse.Create an instance of the TransPublication class. Legen Sie die Name -Eigenschaft und die DatabaseName -Eigenschaft für die Veröffentlichung fest, und legen Sie die ConnectionContext -Eigenschaft auf die in Schritt 1 erstellte Verbindung fest.Set the Name and DatabaseName properties for the publication, and set the ConnectionContext property to the connection created in step 1.

  3. Rufen Sie die LoadProperties -Methode auf, um die restlichen Objekteigenschaften zu laden.Call the LoadProperties method to load the remaining properties of the object. Wenn diese Methode falsezurückgibt, sind die Veröffentlichungseigenschaften in Schritt 2 falsch definiert, oder die Veröffentlichung ist nicht vorhanden.If this method returns false, either the publication properties in step 2 were defined incorrectly or the publication does not exist.

  4. Wenn der Wert für SnapshotAgentExists auf falselautet, rufen Sie CreateSnapshotAgent auf, um den Agentauftrag für die Momentaufnahme dieser Veröffentlichung zu erstellen.If the value of SnapshotAgentExists is false, call CreateSnapshotAgent to create the snapshot agent job for this publication.

  5. Rufen Sie die StartSnapshotGenerationAgentJob -Methode auf, um den Agentauftrag zu starten, der die Momentaufnahme für diese Veröffentlichung generiert.Call the StartSnapshotGenerationAgentJob method to start the agent job that generates the snapshot for this publication.

  6. (Optional) Wenn der Wert von SnapshotAvailable auf truelautet, steht die Momentaufnahme den Abonnenten zur Verfügung.(Optional) When the value of SnapshotAvailable is true, the snapshot is available to Subscribers.

So generieren Sie die Anfangsmomentaufnahme für eine Momentaufnahme- oder Transaktionsveröffentlichung durch Ausführen des Momentaufnahme-Agents (synchron)To generate the initial snapshot for a snapshot or transactional publication by running the Snapshot Agent (synchronous)

  1. Erstellen Sie eine Instanz der SnapshotGenerationAgent -Klasse, und legen Sie die folgenden erforderlichen Eigenschaften fest:Create an instance of the SnapshotGenerationAgent class, and set the following required properties:

  2. Legen Sie den Wert Transactional oder Snapshot für ReplicationTypefest.Set a value of Transactional or Snapshot for ReplicationType.

  3. Rufen Sie die GenerateSnapshot -Methode auf.Call the GenerateSnapshot method.

So generieren Sie die Anfangsmomentaufnahme für eine Mergeveröffentlichung durch Starten des Auftrags des Momentaufnahme-Agents (asynchron)To generate the initial snapshot for a merge publication by starting the Snapshot Agent job (asynchronous)

  1. Erstellen Sie eine Verbindung mit dem Verleger, indem Sie die ServerConnection -Klasse verwenden.Create a connection to the Publisher by using the ServerConnection class.

  2. Erstellen Sie eine Instanz der MergePublication-Klasse.Create an instance of the MergePublication class. Legen Sie die Name -Eigenschaft und die DatabaseName -Eigenschaft für die Veröffentlichung fest, und legen Sie die ConnectionContext -Eigenschaft auf die in Schritt 1 erstellte Verbindung fest.Set the Name and DatabaseName properties for the publication, and set the ConnectionContext property to the connection created in step 1.

  3. Rufen Sie die LoadProperties -Methode auf, um die restlichen Objekteigenschaften zu laden.Call the LoadProperties method to load the remaining properties of the object. Wenn diese Methode falsezurückgibt, sind die Veröffentlichungseigenschaften in Schritt 2 falsch definiert, oder die Veröffentlichung ist nicht vorhanden.If this method returns false, either the publication properties in step 2 were defined incorrectly or the publication does not exist.

  4. Wenn der Wert für SnapshotAgentExists auf falselautet, rufen Sie CreateSnapshotAgent auf, um den Agentauftrag für die Momentaufnahme dieser Veröffentlichung zu erstellen.If the value of SnapshotAgentExists is false, call CreateSnapshotAgent to create the snapshot agent job for this publication.

  5. Rufen Sie die StartSnapshotGenerationAgentJob -Methode auf, um den Agentauftrag zu starten, der die Momentaufnahme für diese Veröffentlichung generiert.Call the StartSnapshotGenerationAgentJob method to start the agent job that generates the snapshot for this publication.

  6. (Optional) Wenn der Wert von SnapshotAvailable auf truelautet, steht die Momentaufnahme den Abonnenten zur Verfügung.(Optional) When the value of SnapshotAvailable is true, the snapshot is available to Subscribers.

So generieren Sie die Anfangsmomentaufnahme für eine Mergeveröffentlichung durch Ausführen des Momentaufnahme-Agents (synchron)To generate the initial snapshot for a merge publication by running the Snapshot Agent (synchronous)

  1. Erstellen Sie eine Instanz der SnapshotGenerationAgent -Klasse, und legen Sie die folgenden erforderlichen Eigenschaften fest:Create an instance of the SnapshotGenerationAgent class, and set the following required properties:

  2. Legen Sie den Wert Merge für ReplicationTypefest.Set a value of Merge for ReplicationType.

  3. Rufen Sie die GenerateSnapshot -Methode auf.Call the GenerateSnapshot method.

Beispiele (RMO)Examples (RMO)

In diesem Beispiel wird der Momentaufnahme-Agent synchron ausgeführt, um die Anfangsmomentaufnahme für eine Transaktionsveröffentlichung zu generieren.This example synchronously runs the Snapshot Agent to generate the initial snapshot for a transactional publication.

// Set the Publisher, publication database, and publication names.
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2012";
string publisherName = publisherInstance;
string distributorName = publisherInstance;

SnapshotGenerationAgent agent;

try
{
    // Set the required properties for Snapshot Agent.
    agent = new SnapshotGenerationAgent();
    agent.Distributor = distributorName;
    agent.DistributorSecurityMode = SecurityMode.Integrated;
    agent.Publisher = publisherName;
    agent.PublisherSecurityMode = SecurityMode.Integrated;
    agent.Publication = publicationName;
    agent.PublisherDatabase = publicationDbName;
    agent.ReplicationType = ReplicationType.Transactional;

    // Start the agent synchronously.
    agent.GenerateSnapshot();

}
catch (Exception ex)
{
    // Implement custom application error handling here.
    throw new ApplicationException(String.Format(
        "A snapshot could not be generated for the {0} publication."
        , publicationName), ex);
}
' Set the Publisher, publication database, and publication names.
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2012"
Dim publisherName As String = publisherInstance
Dim distributorName As String = publisherInstance

Dim agent As SnapshotGenerationAgent

Try
    ' Set the required properties for Snapshot Agent.
    agent = New SnapshotGenerationAgent()
    agent.Distributor = distributorName
    agent.DistributorSecurityMode = SecurityMode.Integrated
    agent.Publisher = publisherName
    agent.PublisherSecurityMode = SecurityMode.Integrated
    agent.Publication = publicationName
    agent.PublisherDatabase = publicationDbName
    agent.ReplicationType = ReplicationType.Transactional

    ' Start the agent synchronously.
    agent.GenerateSnapshot()

Catch ex As Exception
    ' Implement custom application error handling here.
    Throw New ApplicationException(String.Format( _
     "A snapshot could not be generated for the {0} publication." _
     , publicationName), ex)
End Try

In diesem Beispiel wird der Agentauftrag asynchron ausgeführt, um die Anfangsmomentaufnahme für eine Transaktionsveröffentlichung zu generieren.This example asynchronously starts the agent job to generate the initial snapshot for a transactional publication.

// Set the Publisher, publication database, and publication names.
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2012";
string publisherName = publisherInstance;

TransPublication publication;

// Create a connection to the Publisher using Windows Authentication.
ServerConnection conn;
conn = new ServerConnection(publisherName);

try
{
    // Connect to the Publisher.
    conn.Connect();

    // Set the required properties for an existing publication.
    publication = new TransPublication();
    publication.ConnectionContext = conn;
    publication.Name = publicationName;
    publication.DatabaseName = publicationDbName;

    if (publication.LoadProperties())
    {
        // Start the Snapshot Agent job for the publication.
        publication.StartSnapshotGenerationAgentJob();
    }
    else
    {
        throw new ApplicationException(String.Format(
            "The {0} publication does not exist.", publicationName));
    }
}
catch (Exception ex)
{
    // Implement custom application error handling here.
    throw new ApplicationException(String.Format(
        "A snapshot could not be generated for the {0} publication."
        , publicationName), ex);
}
finally
{
    conn.Disconnect();
}
' Set the Publisher, publication database, and publication names.
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2012"
Dim publisherName As String = publisherInstance

Dim publication As TransPublication

' Create a connection to the Publisher using Windows Authentication.
Dim conn As ServerConnection
conn = New ServerConnection(publisherName)

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Set the required properties for an existing publication.
    publication = New TransPublication()
    publication.ConnectionContext = conn
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName

    If publication.LoadProperties() Then
        ' Start the Snapshot Agent job for the publication.
        publication.StartSnapshotGenerationAgentJob()
    Else
        Throw New ApplicationException(String.Format( _
         "The {0} publication does not exist.", publicationName))
    End If
Catch ex As Exception
    ' Implement custom application error handling here.
    Throw New ApplicationException(String.Format( _
     "A snapshot could not be generated for the {0} publication." _
     , publicationName), ex)
Finally
    conn.Disconnect()
End Try

Weitere InformationenSee Also

Create a Publication Create a Publication
Create a Pull Subscription Create a Pull Subscription
Create a Push Subscription Create a Push Subscription
Specify Synchronization Schedules Specify Synchronization Schedules
Initialisieren eines Abonnements mit einer Momentaufnahme Initialize a Subscription with a Snapshot
Replication Management Objects Concepts Replication Management Objects Concepts
Replication Security Best Practices Replication Security Best Practices
Replication System Stored Procedures Concepts Replication System Stored Procedures Concepts
Verwenden von sqlcmd mit SkriptvariablenUse sqlcmd with Scripting Variables