Vorgehensweise: Erstellen des Anfangssnapshots (RMO-Programmierung)

Snapshots werden nach dem Erstellen einer Veröffentlichung vom Snapshot-Agent generiert. Sie können diese Snapshots mit Replikationsverwaltungsobjekten (RMO) und dem direkten Zugriff von verwaltetem Code auf Funktionen des Replikations-Agents programmgesteuert generieren. Welche Objekte Sie verwenden, hängt vom Typ der Replikation ab. Der Snapshot-Agent kann synchron mit dem SnapshotGenerationAgent-Objekt oder asynchron mit dem Agentauftrag gestartet werden. Nachdem der Anfangssnapshot generiert wurde, wird er an den Abonnenten übertragen und auf diesen angewendet, sobald die erste Synchronisierung für das Abonnement durchgeführt wird. Sie müssen den Agent immer dann erneut ausführen, wenn der vorhandene Snapshot keine gültigen und aktuellen Daten mehr enthält. Weitere Informationen finden Sie unter Verwalten von Veröffentlichungen.

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

SicherheitshinweisSicherheitshinweis

Benutzer sollten nach Möglichkeit dazu aufgefordert werden, Anmeldeinformationen zur Laufzeit einzugeben. Wenn Sie Anmeldeinformationen speichern müssen, verwenden Sie die Kryptografiedienste von Microsoft Windows .NET Framework.

So generieren Sie den Anfangssnapshot für eine Snapshot- oder Transaktionsveröffentlichung durch Starten des Snapshot-Agentauftrags (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 false zurückgibt, wurden die Veröffentlichungseigenschaften in Schritt 2 entweder falsch definiert, oder die Veröffentlichung ist nicht vorhanden.

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

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

  6. (Optional) Wenn der Wert von SnapshotAvailable auf true lautet, steht der Snapshot den Abonnenten zur Verfügung.

So generieren Sie den Anfangssnapshot für eine Snapshot- oder Transaktionsveröffentlichung durch Ausführen des Snapshot-Agents (synchron)

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

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

  3. Rufen Sie die GenerateSnapshot-Methode auf.

So generieren Sie den Anfangssnapshot für eine Mergeveröffentlichung durch Starten des Snapshot-Agentauftrags (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 false zurückgibt, wurden entweder die Veröffentlichungseigenschaften in Schritt 2 falsch definiert, oder die Veröffentlichung ist nicht vorhanden.

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

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

  6. (Optional) Wenn der Wert von SnapshotAvailable auf true lautet, steht der Snapshot den Abonnenten zur Verfügung.

So generieren Sie den Anfangssnapshot für eine Mergeveröffentlichung durch Ausführen des Snapshot-Agents (synchron)

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

  2. Legen Sie den Wert Merge für ReplicationType fest.

  3. Rufen Sie die GenerateSnapshot-Methode auf.

Beispiel

In diesem Beispiel wird der Snapshot-Agent synchron ausgeführt, um den Anfangssnapshot für eine Transaktionsveröffentlichung zu generieren.

         // Set the Publisher, publication database, and publication names.
            string publicationName = "AdvWorksProductTran";
            string publicationDbName = "AdventureWorks2008R2";
            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 = "AdventureWorks2008R2"
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 den Anfangssnapshot für eine Transaktionsveröffentlichung zu generieren.

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