Erstellen und wenden Sie den ersten Snapshot an

Gilt für:SQL ServerAzure SQL Managed Instance

Dieser Artikel beschreibt, wie man den ersten Schnappschuss in SQL Server erstellt und anwendet, indem man SQL Server Management Studio, Transact-SQL oder Replication Management Objects (RMO) verwendet. Mergeveröffentlichungen, die parametrisierte Filter verwenden, erfordern eine zweiteilige Momentaufnahme. Weitere Informationen finden Sie unter Erstellen einer Momentaufnahme für eine Mergeveröffentlichung mit parametrisierten Filtern.
Der Momentaufnahme-Agent generiert Momentaufnahmen, nachdem eine Veröffentlichung erstellt wurde. Du kannst Snapshots generieren:

Für die Merge-Replikation erzeugt der Momentaufnahmen-Agent jedes Mal einen Snapshot, wenn er ausgeführt wird. Bei der transaktionalen Replikation hängt die Snapshot-Generierung von der Einstellung der Veröffentlichungseigenschaft immediate_sync ab. Wenn die Eigenschaft auf TRUE gesetzt ist (der Standard bei Verwendung des New Publication Wizard), erzeugt der Momentaufnahmen-Agent jedes Mal einen Snapshot und kann den Snapshot jederzeit auf einen Abonnenten anwenden. Wenn die Eigenschaft auf FALSE gesetzt ist (der Standard bei Verwendung von sp_addpublication), erzeugt der Momentaufnahmen-Agent einen Snapshot nur, wenn seit dem letzten Momentaufnahmen-Agent Lauf ein neues Abonnement hinzugefügt wurde; Abonnenten müssen warten, bis der Momentaufnahmen-Agent abgeschlossen ist, bevor sie synchronisieren können.

Standardmäßig speichert der Momentaufnahmen-Agent generierte Snapshots im Standard-Snapshot-Ordner auf dem Distributor. Sie können Snapshot-Dateien auch auf Wechselmedien wie Ferndisks, CD-ROMs oder an anderen Orten als dem Standard-Snapshot-Ordner speichern. Man kann die Dateien auch komprimieren, um sie leichter zu speichern und übertragen zu lassen, und Skripte vor oder nach dem Anwenden des Snapshots durch den Momentaufnahmen-Agent beim Abonnenten ausführen. Weitere Informationen zu diesen Optionen finden Sie unter Snapshot Options.

Wenn der Snapshot für eine Merge-Publikation ist, die parametrisierte Filter verwendet, erstellt der Momentaufnahmen-Agent den Snapshot mithilfe eines zweiteiligen Prozesses. Zuerst erstellt es ein Schema-Snapshot, das die Replikationsskripte und das Schema der veröffentlichten Objekte enthält, aber nicht die Daten. Jedes Abonnement initialisiert dann mit einem Snapshot, der die Skripte und das Schema enthält, die aus dem Schema-Snapshot kopiert wurden, sowie die Daten, die zur Partition des Abonnements gehören. Weitere Informationen finden Sie unter Snapshots for Merge Publications with Parameterized Filters.

Nachdem der Momentaufnahmen-Agent das Snapshot beim Publisher erstellt und an einem Standard- oder alternativen Snapshot-Speicherort gespeichert hat, kannst du das Snapshot an den Abonnenten übertragen und anwenden. Der Verteilungs-Agent (für Snapshot oder transaktionale Replikation) oder Merge-Agent (für Merge-Replikation) überträgt den Snapshot und wendet das Schema und die Datendateien während der initialen Synchronisation auf die Abonnementdatenbank des Subscribers an. Standardmäßig erfolgt die anfängliche Synchronisation unmittelbar nach der Erstellung eines Abonnements, wenn du den New Subscription Wizard verwendest. Die Option "Initialisieren wann" auf der Seite "Initialisieren von Abonnements" des Wizards steuert dieses Verhalten. Wenn der Momentaufnahmen-Agent nach der Initialisierung eines Abonnements Snapshots generiert, werden diese nicht auf einen Abonnenten angewendet, es sei denn, man markiert ein Abonnement zur Neuinitialisierung. Weitere Informationen finden Sie unter Erneutes Initialisieren von Abonnements.

Nachdem der Verteilungs-Agent bzw. der Merge-Agent den Anfangssnapshot übernommen hat, überträgt der Agent nachfolgende Aktualisierungen und andere Datenänderungen. Wenn Momentaufnahmen an Abonnenten verteilt und auf ihnen angewendet werden, sind nur die Abonnenten betroffen, die auf eine Anfangsmomentaufnahme oder neue Momentaufnahmen warten. Andere Abonnenten dieser Publikation (diejenigen, die bereits Einfüge, Aktualisierungen, Löschungen oder andere Änderungen an den veröffentlichten Daten erhalten) sind nicht betroffen.

Informationen zum Anzeigen oder Ändern des Standardordnerspeicherorts für Momentaufnahmen finden Sie unter

Standard-Speicherort für Snapshots

Geben Sie den standardmäßigen Momentaufnahmespeicherort im Verteilungskonfigurations-Assistenten auf der Seite Snapshotordner an. Weitere Informationen zum Verwenden dieses Assistenten finden Sie unter Konfigurieren der Veröffentlichung und der Verteilung. Wenn Sie eine Veröffentlichung auf einem Server erstellen, der nicht als Distributor konfiguriert ist, geben Sie auf der Seite Momentaufnahmeordner im Assistenten für neue Veröffentlichungen einen Standardspeicherort für Momentaufnahmen an. Weitere Informationen zum Zugreifen auf diesen Assistenten finden Sie unter Erstellen einer Veröffentlichung.

Ändern Sie den standardmäßigen Momentaufnahmespeicherort im Dialogfeld Verteilereigenschaften - <Distributor> auf der Seite Verleger. Weitere Informationen finden Sie unter Anzeigen und Ändern der Verteiler- und Verlegereigenschaften. Bestimmen Sie den Momentaufnahmeordner für die einzelnen Veröffentlichungen im Dialogfeld Veröffentlichungseigenschaften - <Veröffentlichung>. Weitere Informationen finden Sie unter View and Modify Publication Properties.

Ändern Sie den Standardspeicherort für Snapshots

  1. Auf der Seite Publishers im Dialogfeld Distributor Properties - <Distributor> wählen Sie die Properties-Schaltfläche (...) für den Publisher, für den Sie den Standard-Snapshot-Standort ändern möchten.

  2. Geben Sie im Dialogfeld Veröffentlichungseigenschaften - <Publisher> einen Wert für die Eigenschaft Standardsnapshotordner ein.

    Hinweis

    Der Momentaufnahmen-Agent benötigt Schreibrechte für das von Ihnen angegebene Verzeichnis, und der Verteilungs-Agent oder Merge-Agent benötigt Leseberechtigungen. Wenn Sie Pull-Abonnements verwenden, müssen Sie ein gemeinsames Verzeichnis als universellen Namenskonventionspfad (UNC) angeben, wie zum Beispiel \\computername\snapshot. Weitere Informationen finden Sie unter Absichern des Snapshot-Ordners.

  3. Wählen Sie OK aus.

Erstellen einer Momentaufnahme

Standardmäßig erzeugt der Momentaufnahmen-Agent, wenn der SQL Server-Agent läuft, unmittelbar nachdem Sie eine Veröffentlichung erstellt haben, mithilfe des New Publication Wizard einen Snapshot. Standardmäßig wendet der Verteilungs-Agent (für Snapshot und Transaktionale Replikation) oder der Merge-Agent (für Merge-Abonnements) den Snapshot für alle Abonnements an. Du kannst auch einen Schnappschuss generieren, indem du SQL Server Management Studio und Replication Monitor verwendest. Informationen zum Starten des Replikationsmonitors finden Sie unter Starten des Replikationsmonitors.

Verwendung von SQL Server Management Studio

  1. Stellen Sie mit dem Herausgeber in Management Studio eine Verbindung her, und erweitern Sie dann den Serverknoten.
  2. Erweitern Sie den Ordner Replikation , und erweitern Sie dann den Ordner Lokale Veröffentlichungen .
  3. Klicken Sie mit der rechten Maustaste auf die Publikation, für die Sie einen Snapshot erstellen möchten, und wählen Sie dann View Momentaufnahmen-Agent Status.
  4. Im Dialogfeld Status des Momentaufnahme-Agents anzeigen - <Publication> wählen Sie Start.
    Wenn die Momentaufnahmen-Agent die Snapshot-Erstellung abgeschlossen hat, zeigt sie eine Nachricht an, wie zum Beispiel "[100%] Ein Schnappschuss von 17 Artikel(n) wurde generiert."

Im Replikationsmonitor

  1. Erweitern Sie im Replikationsmonitor im linken Bereich eine Verlegergruppe, und erweitern Sie dann einen Verleger.
  2. Klicken Sie mit der rechten Maustaste auf die Publikation, für die Sie einen Snapshot erstellen möchten, und wählen Sie dann Snapshot generieren.
  3. Um den Status des Momentaufnahmen-Agent anzuzeigen, wählen Sie den Reiter Agents aus. Für detailliertere Informationen klicken Sie mit der rechten Maustaste auf den Momentaufnahmen-Agent im Raster und wählen Sie dann View Details.

Verwenden von Transact-SQL

Sie können initiale Snapshots programmatisch erstellen, indem Sie einen Momentaufnahmen-Agent-Job erstellen und ausführen oder die ausführbare Datei des Momentaufnahmen-Agent aus einer Batch-Datei ausführen. 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. Wenn du den Momentaufnahmen-Agent aus einer Eingabeaufforderung oder einer Batch-Datei ausführst, musst du den Agenten neu ausführen, sobald der bestehende Snapshot ungültig wird.

Wichtig

Fordern Sie Benutzer nach Möglichkeit auf, Sicherheitsanmeldeinformationen zur Laufzeit einzugeben. Wenn Sie Anmeldeinformationen in einer Skriptdatei speichern müssen, sollten Sie die Datei schützen, um nicht autorisierten Zugriff zu verhindern.

  1. Erstellen Sie eine Snapshot-, Transaktions- oder Mergeveröffentlichung. Weitere Informationen finden Sie unter Create a Publication.

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

    • Das @job_login , das die Anmeldeinformationen für die Windows-Authentifizierung definiert, mit denen der Momentaufnahme-Agent beim Verteiler ausgeführt wird.

    • Das @job_password, das das Kennwort für die angegebenen Windows-Anmeldeinformationen ist.

    • (Optional) Ein Wert von 0 für @publisher_security_mode, wenn der Agent SQL Server Authentifizierung verwendet, wenn er sich mit dem Publisher verbindet. In diesem Fall müssen Sie auch die Anmeldeinformationen für die SQL Server-Authentifizierung für @publisher_login und @publisher_passwordangeben.

    • (Optional) Ein Synchronisierungsplan für den Snapshot-Agent-Auftrag. Weitere Informationen finden Sie unter Angeben von Synchronisierungszeitplänen.

    Wichtig

    Wenn Sie ein Publisher mit einem entfernten Distributor konfigurieren, werden die von Ihnen bereitgestellten Werte für alle Parameter, einschließlich job_login und job_password, als Klartext an den Distributor gesendet. Verschlüsseln Sie die Verbindung zwischen dem Publisher und seinem entfernten Distributor, bevor Sie dieses gespeicherte Verfahren ausführen. Weitere Informationen finden Sie unter Aktivieren von verschlüsselten Verbindungen zur Datenbank-Engine (SQL Server-Konfigurations-Manager).

  3. Fügen Sie der Veröffentlichung Artikel hinzu. Weitere Informationen finden Sie unter Definieren eines Artikels.

  4. Führen Sie beim Publisher in der Veröffentlichungsdatenbank sp_startpublication_snapshot (Transact-SQL) aus, wobei Sie den Wert von @publication aus Schritt 1 angeben.

Snapshot anwenden

Verwendung von SQL Server Management Studio

Nachdem der Snapshot erstellt wurde, synchronisieren Sie das Abonnement mit dem Verteilungs-Agent oder dem Merge-Agent, um ihn anzuwenden:

  • Wenn der Agent kontinuierlich ausgeführt wird (der Standard für transaktionale Replikation), wendet er das Snapshot automatisch nach der Generierung an.

  • Wenn der Agent nach einem Zeitplan läuft, wendet er den Snapshot beim nächsten Mal an.

  • Wenn der Agent auf Abruf läuft, wendet er den Snapshot beim nächsten Mal an.

    Weitere Informationen zum Synchronisieren von Abonnements finden Sie unter Synchronisieren eines Pushabonnements und Synchronisieren eines Pullabonnements.

Verwenden von Transact-SQL

  1. Erstellen Sie eine Snapshot-, Transaktions- oder Mergeveröffentlichung. Weitere Informationen finden Sie unter Create a Publication.

  2. Fügen Sie der Veröffentlichung Artikel hinzu. Weitere Informationen finden Sie unter Definieren eines Artikels.

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

    • -Publikation
    • -Publisher
    • -Distributor
    • -PublisherDB
    • -ReplicationType

    Wenn Sie SQL Server-Authentifizierung verwenden, geben Sie auch folgende Argumente an:

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

Beispiele (Transact-SQL)

In diesem Beispiel wird gezeigt, wie eine Transaktionsveröffentlichung erstellt und der neuen Veröffentlichung ein Auftrag für den Snapshot-Agent hinzugefügt wird (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'AdventureWorks2022'; --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 [AdventureWorks2022]
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). 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'AdventureWorks2022'; 
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.

Hinweis

Zeilenumbrüche wurden hinzugefügt, um die Lesbarkeit zu verbessern. In einer Batch-Datei musst du Befehle in einer einzigen Zeile erteilen.

  
REM -- Declare variables  
SET Publisher=%InstanceName%  
SET PublicationDB=AdventureWorks2022   
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)

Der Momentaufnahmen-Agent erzeugt Snapshots, nachdem Sie eine Veröffentlichung erstellt haben. Sie können diese Snapshots programmatisch generieren, indem Sie Replication Management Objects (RMO) und direkten verwalteten Codezugriff auf die Funktionalitäten der Replikationsagenten verwenden. Welche Objekte Sie verwenden, hängt vom Typ der Replikation ab. Du kannst den Momentaufnahmen-Agent synchron starten, indem du das SnapshotGenerationAgent Objekt benutzt, oder asynchron mit dem Agent-Job. Nachdem das erste Snapshot erstellt wurde, überträgt der Momentaufnahmen-Agent es an den Abonnenten und wendet es an, wenn das Abonnement erstmals synchronisiert wird. Du musst den Agenten erneut ausführen, wenn der bestehende Snapshot keine gültigen, aktuellen Daten mehr enthält. Weitere Informationen finden Sie unter Verwalten von Veröffentlichungen.

Wichtig

Fordern Sie Benutzer nach Möglichkeit auf, Sicherheitsanmeldeinformationen zur Laufzeit einzugeben. Wenn Sie Anmeldeinformationen speichern müssen, verwenden Sie die Kryptografiedienste von Microsoft Windows .NET Framework.

So generieren Sie die Anfangsmomentaufnahme für eine Momentaufnahme- oder Transaktionsveröffentlichung durch Starten des Auftrags des Momentaufnahme-Agents (asynchron)

  1. Erstellen Sie eine Verbindung mit dem Verleger, indem Sie die ServerConnection -Klasse verwenden.

  2. Erstellen Sie eine Instanz der TransPublication-Klasse. 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.

  3. Rufen Sie die LoadProperties -Methode auf, um die restlichen Objekteigenschaften zu laden. Wenn diese Methode falsch zurückgibt, sind entweder die Publikationseigenschaften in Schritt 2 falsch definiert oder die Veröffentlichung existiert nicht.

  4. Wenn der Wert für SnapshotAgentExists auf false lautet, rufen Sie CreateSnapshotAgent auf, um den Agentauftrag für die Momentaufnahme dieser Veröffentlichung zu erstellen.

  5. Rufen Sie die StartSnapshotGenerationAgentJob -Methode auf, um den Agentauftrag zu starten, der die Momentaufnahme für diese Veröffentlichung generiert.

  6. (Optional) Wenn der Wert von SnapshotAvailable auf truelautet, steht die Momentaufnahme den Abonnenten zur Verfügung.

So generieren Sie die Anfangsmomentaufnahme für eine Momentaufnahme- oder Transaktionsveröffentlichung durch Ausführen des Momentaufnahme-Agents (synchron)

  1. Erstellen Sie eine Instanz der SnapshotGenerationAgent -Klasse, und legen Sie die folgenden erforderlichen Eigenschaften fest:

    • Publisher – Name des Verlegers

    • PublisherDatabase – Name der Veröffentlichungsdatenbank

    • Publication – Name der Veröffentlichung

    • Distributor – Name des Vertriebspartners

    • PublisherSecurityMode – ein Wert von Integrated, um bei der Verbindung mit dem Publisher die Windows-Authentifizierung zu verwenden, oder ein Wert von Standard sowie Werte für PublisherLogin und , um bei der Verbindung mit dem Publisher die SQL Server-Authentifizierung zu verwenden. Die Windows-Authentifizierung wird empfohlen.

    • DistributorSecurityMode Den Wert Integrated zur Verwendung der Windows-Authentifizierung, wenn eine Verbindung mit dem Verteiler hergestellt wird, oder den Wert Standard sowie Werte für DistributorLogin und DistributorPassword zur Verwendung der SQL Server-Authentifizierung, wenn eine Verbindung mit dem Verteiler hergestellt wird. Die Windows-Authentifizierung wird empfohlen.

  2. Legen Sie den Wert Transactional oder Snapshot für ReplicationTypefest.

  3. Rufen Sie die GenerateSnapshot-Methode auf.

So generieren Sie die Anfangsmomentaufnahme für eine Mergeveröffentlichung durch Starten des Auftrags des Momentaufnahme-Agents (asynchron)

  1. Erstellen Sie eine Verbindung mit dem Verleger, indem Sie die ServerConnection -Klasse verwenden.

  2. Erstellen Sie eine Instanz der MergePublication-Klasse. 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.

  3. Rufen Sie die LoadProperties -Methode auf, um die restlichen Objekteigenschaften zu laden. Wenn diese Methode falsch zurückgibt, sind entweder die Publikationseigenschaften in Schritt 2 falsch definiert oder die Veröffentlichung existiert nicht.

  4. Wenn der Wert für SnapshotAgentExists auf false lautet, rufen Sie CreateSnapshotAgent auf, um den Agentauftrag für die Momentaufnahme dieser Veröffentlichung zu erstellen.

  5. Rufen Sie die StartSnapshotGenerationAgentJob -Methode auf, um den Agentauftrag zu starten, der die Momentaufnahme für diese Veröffentlichung generiert.

  6. (Optional) Wenn der Wert von SnapshotAvailable auf truelautet, steht die Momentaufnahme den Abonnenten zur Verfügung.

So generieren Sie die Anfangsmomentaufnahme für eine Mergeveröffentlichung durch Ausführen des Momentaufnahme-Agents (synchron)

  1. Erstellen Sie eine Instanz der SnapshotGenerationAgent -Klasse, und legen Sie die folgenden erforderlichen Eigenschaften fest:

    • Publisher – Name des Verlegers

    • PublisherDatabase – Name der Veröffentlichungsdatenbank

    • Publication – Name der Veröffentlichung

    • Distributor – Name des Vertriebspartners

    • PublisherSecurityMode – ein Wert von Integrated, um bei der Verbindung mit dem Publisher die Windows-Authentifizierung zu verwenden, oder ein Wert von Standard sowie Werte für PublisherLogin und , um bei der Verbindung mit dem Publisher die SQL Server-Authentifizierung zu verwenden. Die Windows-Authentifizierung wird empfohlen.

    • DistributorSecurityMode Den Wert Integrated zur Verwendung der Windows-Authentifizierung, wenn eine Verbindung mit dem Verteiler hergestellt wird, oder den Wert Standard sowie Werte für DistributorLogin und DistributorPassword zur Verwendung der SQL Server-Authentifizierung, wenn eine Verbindung mit dem Verteiler hergestellt wird. Die Windows-Authentifizierung wird empfohlen.

  2. Legen Sie den Wert Merge für ReplicationTypefest.

  3. Rufen Sie die GenerateSnapshot-Methode auf.

Beispiele (RMO)

In diesem Beispiel wird der Snapshot-Agent synchron ausgeführt, um die anfängliche Momentaufnahme für eine transaktionale Veröffentlichung zu generieren.

// Set the Publisher, publication database, and publication names.
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2022";
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 = "AdventureWorks2022"
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.

// Set the Publisher, publication database, and publication names.
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2022";
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 = "AdventureWorks2022"
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

Blockierung beim Anwenden des ersten Snapshots

Wenn Sie mehrere Publikationen haben, die Daten in einer Datenbank bei den Abonnenten veröffentlichen, stellen Sie fest, dass nur eine Publikation gleichzeitig ihren Snapshot anwenden kann, während sie die ersten Snapshots anwendet.

Sie könnten beim Durchsehen von SQL-Aktivitäten eine Warteressource ähnlich wie die folgende sehen:

APP: 18:16384:[snapshot_delivery_in_progress_Tr]:(9bcdaf92)
APP: 5:16384:[snapshot_delivery_in_progress_Er]:(3c3b7db9
)

Abfragen nach Sperrverhalten könnten Ressourcen ähnlich wie die folgenden anzeigen:

APP 16384:[appname]:(fbe42d68) XAPP 16384:[snapshot_del]:(9bcdaf92) X

Dieses Verhalten ist beabsichtigt. Es tritt auf, da eine Anwendungssperre verwendet wird, um zu verhindern, dass mehrere Replikations-Agents gleichzeitig Momentaufnahmen verschiedener Publikationen auf dieselbe Abonnentendatenbank anwenden. Da die Anwendungssperre den Namen der Abonnentendatenbank enthält, werden alle Veröffentlichungen, die in derselben Abonnentendatenbank veröffentlicht werden, betroffen. Das Ergebnis ist, dass jeweils nur eine Momentaufnahme in die Abonnentendatenbank eingefügt werden kann.

Exklusivsperren werden in dieser Situation eingesetzt, um zu verhindern, dass Replikationsagenten sich gegenseitig blockieren.

Um dieses Problem zu umgehen, geben Sie für jede Publikation eine andere Abonnentendatenbank an.