Vorgehensweise: Konfigurieren der Peer-to-Peer-Transaktionsreplikation (Replikationsprogrammierung mit Transact-SQL)

In diesem Thema wird beschrieben, wie eine Peer-to-Peer-Replikationstopologie mithilfe gespeicherter Prozeduren konfiguriert und gepflegt werden kann. Zuerst wird gezeigt, wie eine Topologie mit drei Knoten erstellt wird, und anschließend wird beschrieben, wie ein neuer Knoten hinzugefügt und verbunden wird. Es werden getrennte Vorgehensweisen zum Hinzufügen von Knoten, auf denen SQL Server 2005 ausgeführt wird, und zum Hinzufügen von Knoten, auf denen SQL Server 2008 oder eine höhere Version von SQL Server ausgeführt wird, veranschaulicht. Dieses Thema enthält keine Informationen zu den Parametern, die zum Erkennen von Konflikten in einer Peer-to-Peer-Replikation verwendet werden. Weitere Informationen zur Konflikterkennung finden Sie unter Vorgehensweise: Konfigurieren der Konflikterkennung für die Peer-to-Peer-Transaktionsreplikation (Replikationsprogrammierung mit Transact-SQL).

Die Konfiguration der Topologie ähnelt stark der Konfiguration einer Reihe von standardmäßigen Transaktionsveröffentlichungen und -abonnements. Zu beachten ist hier vor allem, wie die Knoten initialisiert und welche Werte für den @sync_type-Parameter von sp_addsubscription angegeben werden:

  • Der erste Knoten einer Topologie enthält die ursprüngliche Veröffentlichungsdatenbank. Daher muss er nicht mit Schema und Daten initialisiert werden. Sie geben deshalb den Wert replication support only für Abonnements an, die Daten anderer Knoten auf dem ersten Knoten replizieren. Mit dieser Option wird sichergestellt, dass die für die Replikation erforderlichen Objekte in den ersten Knoten kopiert werden.

  • Nachdem der erste Knoten konfiguriert wurde, werden die Knoten i. d. R. von einer Sicherung des ersten Knotens initialisiert. Sie geben deshalb den Wert initialize with backup oder replication support only für Abonnements an, die Daten aus dem ersten Knoten auf den anderen Knoten replizieren. Der Wert replication support only kann verwendet werden, wenn im System keine Aktivitäten ausgeführt werden. Wenn das System aktiv ist, muss allerdings der Wert initialize with backup angegeben werden. Durch die Angabe von initialize with backup wird sichergestellt, dass alle relevanten Transaktionen auf einem neuen Knoten repliziert werden.

  • Nachdem ein Knoten initialisiert wurde, müssen Abonnements, die Daten von anderen Knoten replizieren, den Knoten nicht erneut initialisieren. Deshalb geben Sie den Wert replication support only oder initialize from lsn an. Der Wert replication support only kann verwendet werden, wenn im System keine Aktivitäten ausgeführt werden. Wenn das System aktiv ist, muss allerdings der Wert initialize from lsn angegeben werden. Durch die Angabe von initialize from lsn wird sichergestellt, dass alle relevanten Transaktionen auf einem neuen Knoten repliziert werden.

    SQL Server 2005 unterstützt initialize from lsn nicht. Wenn eine Topologie SQL Server 2005-Knoten umfasst, können Sie einen neuen Knoten mit einem vorhandenen Knoten verbinden. Sie müssen das System jedoch in einen inaktiven Status versetzen, um Verbindungen mit mehreren Knoten herstellen zu können. Sie versetzen das System in einen inaktiven Status, indem Sie alle Aktivitäten an veröffentlichten Tabellen in allen Knoten beenden und sicherstellen, dass jeder Knoten alle Änderungen von allen anderen Knoten erhalten hat. Dieser Prozess wird im letzten Abschnitt dieses Themas ausführlich beschrieben.

Prozedur

Wenn Sie eine Topologie für aktive Datenbanken konfigurieren, gehen Sie wie folgt vor, um den ersten und den zweiten Knoten (Knoten A und Knoten B) hinzuzufügen. Verwenden Sie dann die nachfolgende Prozedur für Knoten C und alle weiteren Knoten. In der nachfolgenden Prozedur wird für @ sync_type der Wert initialize from lsn verwendet. Diese Option ermöglicht es Ihnen, bei aktivem System eine Topologie zu konfigurieren, ohne Transaktionen zu übergehen.

So richten Sie die Peer-to-Peer-Replikation zwischen drei Knoten ein

  1. Konfigurieren Sie jeden Knoten als Verleger, und ordnen Sie den einzelnen Knoten einen lokalen Verteiler oder Remoteverteiler zu. Bei der Verwendung eines Remoteverteilers wird empfohlen, nicht den gleichen Verteiler für alle Knoten zu verwenden, um eine einzelne Fehlerquelle zu vermeiden. Weitere Informationen finden Sie unter Vorgehensweise: Konfigurieren der Veröffentlichung und Verteilung (Replikationsprogrammierung mit Transact-SQL).

  2. Führen Sie auf Knoten A sp_addpublication aus. Geben Sie den Wert true für @enabled_for_p2p, den Wert active für @status und den Wert true für @allow_initialize_from_backup an. Um der Veröffentlichung Artikel hinzuzufügen, führen Sie sp_addarticle aus.

  3. Die ursprünglichen Daten müssen in jedem Knoten vorhanden sein, bevor die Topologie konfiguriert wird. Verwenden Sie die SQL Server-Funktionen zum Sichern und Wiederherstellen, um an jedem Knoten der Topologie Daten für die Veröffentlichung zu initialisieren. Die Sicherung sollte vom ersten konfigurierten Knoten, hier Knoten A, stammen. Die Sicherung muss erstellt werden, nachdem die Veröffentlichung auf Knoten A erstellt und die Unterstützung für die Peer-to-Peer-Replikation aktiviert wurde. In diesem Thema wird davon ausgegangen, dass auf den neuen Knoten erst dann Aktivitäten ausgeführt werden, nachdem alle Knoten hinzugefügt wurden. Daher kann die gleiche Sicherung zur Initialisierung der einzelnen Knoten verwendet werden.

    Wenn auf einem neuen Knoten Aktivitäten ausgeführt werden, bevor alle Knoten hinzugefügt wurden, muss jeweils eine neue Sicherung erstellt werden, nachdem ein Knoten hinzugefügt und mindestens einmal mit Knoten A synchronisiert wurde. Damit wird sichergestellt, dass die Sicherung von Knoten A Metadaten zu allen anderen Knoten enthält. Wenn Sie beispielsweise Knoten B und Knoten C hinzufügen, wobei auf diesen Knoten Aktivitäten ausgeführt werden, dann konfigurieren und synchronisieren Sie Knoten B. Anschließend erstellen Sie eine Sicherung von Knoten A. Initialisieren Sie dann Knoten C mit der neuen Sicherung, und konfigurieren und synchronisieren Sie Knoten C.

    Weitere Informationen zum Sichern und Wiederherstellen von Datenbanken finden Sie unter Sichern und Wiederherstellen von Datenbanken in SQL Server.

    Wichtiger HinweisWichtig

    Geben Sie beim Wiederherstellen der Datenbank nicht die Option KEEP_REPLICATION (bei Transact-SQL) bzw. nicht die Option Preserve the replication settings (bei SQL Server Management Studio) an. Durch die Replikation wird die Datenbank ordnungsgemäß konfiguriert, wenn Sie den Assistenten zum Konfigurieren der Peer-to-Peer-Topologie ausführen.

    Eine Sicherung enthält eine gesamte Datenbank. Deshalb enthält jede Peerdatenbank bei ihrer Initialisierung eine vollständige Kopie der Veröffentlichungsdatenbank. Die Sicherung enthält möglicherweise Tabellen, die nicht als Artikel für die Veröffentlichung angegeben sind. Es ist Aufgabe des Administrators oder der Anwendung, alle unerwünschten Objekte oder Daten nach der Wiederherstellung der Sicherung zu entfernen. In folgenden Synchronisierungen werden Datenänderungen nur repliziert, wenn sie sich auf Tabellen beziehen, die als Artikel angeben sind.

  4. Führen Sie auf Knoten A sp_addsubscription aus. Geben Sie den Namen der in Knoten A erstellten Veröffentlichung für @publication, den Namen von Knoten B für @subscriber, den Namen der Zieldatenbank in Knoten B für @destination_db, den Wert initialize with backup für @sync_type und die geeigneten Werte für die Parameter @backupdevicetype und @backupdevicename an.

  5. Führen Sie auf Knoten A erneut sp_addsubscription aus. Geben Sie diesmal den Namen der Veröffentlichung für @publication, den Namen von Knoten C für @subscriber, den Namen der Zieldatenbank in Knoten C für @destination_db, den Wert initialize with backup für @sync_type und die geeigneten Werte für die Parameter @backupdevicetype und @backupdevicename an.

  6. Führen Sie auf Knoten B sp_addpublication aus. Geben Sie den Namen der Veröffentlichung für @publication, den Wert true für @enabled_for_p2p, den Wert active für @status und den Wert true für @allow_initialize_from_backup an. Um der Veröffentlichung Artikel hinzuzufügen, führen Sie sp_addarticle aus.

  7. Führen Sie auf Knoten B sp_addsubscription aus. Geben Sie den Namen der Veröffentlichung für @publication, den Namen von Knoten A für @subscriber, den Namen der Zieldatenbank auf Knoten A für @destination_db und den Wert replication support only für @sync_type an.

  8. Führen Sie auf Knoten B erneut sp_addsubscription aus. Geben Sie diesmal den Namen der Veröffentlichung für @publication, den Namen von Knoten C für @subscriber, den Namen der Zieldatenbank auf Knoten C für @destination_db und den Wert replication support only für @sync_type an.

  9. Führen Sie auf Knoten C sp_addpublication aus. Geben Sie den Namen der Veröffentlichung für @publication, den Wert true für @enabled_for_p2p, den Wert active für @status und den Wert true für @allow_initialize_from_backup an. Um der Veröffentlichung Artikel hinzuzufügen, führen Sie sp_addarticle aus.

  10. Führen Sie auf Knoten C sp_addsubscription aus. Geben Sie den Namen der Veröffentlichung für @publication, den Namen von Knoten A für @subscriber, den Namen der Zieldatenbank auf Knoten A für @destination_db und den Wert replication support only für @sync_type an.

  11. Führen Sie auf Knoten C erneut sp_addsubscription aus. Geben Sie diesmal den Namen der Veröffentlichung für @publication, den Namen von Knoten B für @subscriber, den Namen der Zieldatenbank auf Knoten B für @destination_db und den Wert replication support only für @sync_type an.

  12. Wenn veröffentlichte Tabellen Identitätsspalten enthalten, wird nach der Wiederherstellung der Identitätsbereich, den Sie den Tabellen auf Knoten A zugewiesen haben, auch in den Tabellen auf Knoten B und Knoten C verwendet. Sie müssen DBCC CHECKIDENT verwenden, um den Tabellen auf Knoten B und Knoten C neue Ausgangswerte zuzuweisen und damit sicherzustellen, dass für jede Tabelle ein eigener Bereich verwendet wird.

    Weitere Informationen zum Verwalten von Identitätsbereichen finden Sie im Abschnitt "Zuweisen von Bereichen für die manuelle Identitätsbereichsverwaltung" unter Replizieren von Identitätsspalten.

Gehen Sie wie nachfolgend beschrieben vor, um einer Topologie, die Knoten mit SQL Server 2008 oder einer höheren Version von SQL Server umfasst, einen oder mehrere Knoten hinzuzufügen.

So fügen Sie der Topologie einen Knoten hinzu, auf dem SQL Server 2008 oder eine höhere Version ausgeführt wird

  1. Konfigurieren Sie Knoten D als Verleger, und ordnen Sie ihm einen lokalen Verteiler oder einen Remoteverteiler zu.

  2. Stellen Sie eine Sicherung von Knoten A auf Knoten D wieder her.

  3. Führen Sie auf Knoten D sp_addpublication aus. Geben Sie den Namen der Veröffentlichung für @publication, den Wert true für @enabled_for_p2p, den Wert active für @status und den Wert true für @allow_initialize_from_backup an. Um der Veröffentlichung Artikel hinzuzufügen, führen Sie sp_addarticle aus.

  4. Führen Sie auf Knoten D sp_addsubscription aus. Geben Sie den Namen der Veröffentlichung für @publication, den Namen von Knoten A für @subscriber, den Namen der Zieldatenbank auf Knoten A für @destination_db und den Wert replication support only für @sync_type an.

  5. Führen Sie auf Knoten A sp_addsubscription aus. Geben Sie den Namen der Veröffentlichung für @publication, den Namen von Knoten D für @subscriber, den Namen der Zieldatenbank in Knoten D für @destination_db, den Wert initialize with backup für @sync_type und die geeigneten Werte für die Parameter @backupdevicetype und @backupdevicename an.

    Potenziell hat Knoten D über Knoten A Transaktionen von Knoten B und Knoten C erhalten. Diese Transaktionen werden im nächsten Schritt betrachtet.

  6. Fragen Sie auf Knoten D die Tabelle MSpeer_lsns ab. Ermitteln Sie anhand der Spalten originator und originator_lsn die Protokollsequenznummer (LSN, Log Sequence Number) der letzten Transaktion, die Knoten D von Knoten B empfangen hat.

  7. Führen Sie auf Knoten D sp_addsubscription aus. Geben Sie den Namen der Veröffentlichung für @publication, den Namen von Knoten B für @subscriber, den Namen der Zieldatenbank auf Knoten B für @destination_db und den Wert replication support only für @sync_type an.

  8. Führen Sie auf Knoten B sp_addsubscription aus. Geben Sie den Namen der Veröffentlichung für @publication, den Namen von Knoten D für @subscriber, den Namen der Zieldatenbank in Knoten D für @destination_db, den Wert initialize from lsn für @sync_type und die von Knoten B abgerufene Protokollsequenznummer für @subscriptionlsn an.

  9. Fragen Sie bei Knoten D die Tabelle MSpeer_lsns ab. Ermitteln Sie anhand der Spalten originator und originator_lsn die Protokollsequenznummer der letzten Transaktion, die Knoten D von Knoten C empfangen hat.

  10. Führen Sie auf Knoten D sp_addsubscription aus. Geben Sie den Namen der Veröffentlichung für @publication, den Namen von Knoten C für @subscriber, den Namen der Zieldatenbank auf Knoten C für @destination_db und den Wert replication support only für @sync_type an.

  11. Führen Sie auf Knoten C sp_addsubscription aus. Geben Sie den Namen der Veröffentlichung für @publication, den Namen von Knoten D für @subscriber, den Namen der Zieldatenbank in Knoten D für @destination_db, den Wert initialize from lsn für @sync_type und die von Knoten C abgerufene Protokollsequenznummer für @subscriptionlsn an.

  12. Wenn veröffentlichte Tabellen Identitätsspalten enthalten, wird nach der Wiederherstellung der Identitätsbereich, den Sie den Tabellen auf Knoten A zugewiesen haben, auch in den Tabellen auf Knoten D verwendet. Sie müssen DBCC CHECKIDENT verwenden, um den Tabellen auf Knoten D neue Ausgangswerte zuzuweisen und damit sicherzustellen, dass für jede Tabelle ein eigener Bereich verwendet wird.

    Weitere Informationen zum Verwalten von Identitätsbereichen finden Sie im Abschnitt "Zuweisen von Bereichen für die manuelle Identitätsbereichsverwaltung" unter Replizieren von Identitätsspalten.

Wie in der Einführung zu diesem Thema erwähnt, besteht der Hauptunterschied zwischen dem Hinzufügen eines SQL Server 2005-Knotens und dem Hinzufügen eines Knotens, auf dem eine höhere Version von SQL Server ausgeführt wird, darin, dass bei Verwendung von SQL Server 2005 das System in den inaktiven Status versetzt werden muss, damit eine Verbindung zwischen dem neuen Knoten und den vorhandenen Knoten hergestellt werden kann. Die folgende Vorgehensweise veranschaulicht anhand von Phasen, wie der vorhandenen Topologie ein SQL Server 2005-Knoten hinzugefügt wird:

  • Phase 1 wird durch die Schritte 1 bis 5 abgedeckt. In dieser Phase wird Knoten D teilweise mit der Topologie verbunden, indem Abonnements zwischen Knoten A und Knoten D erstellt werden. Dadurch werden Änderungen auf Knoten A, Knoten B und Knoten C zugelassen. Änderungen können auf Knoten D vorgenommen werden, sobald Abonnements zwischen Knoten A und Knoten D erstellt wurden. Änderungen von Knoten B und Knoten C werden auf den Knoten D bis Knoten A repliziert.

  • Phase 2 wird durch die Schritte 6 bis 9 abgedeckt. In dieser Phase wird Knoten D vollständig mit der Topologie verbunden, indem Abonnements zwischen Knoten B und Knoten D sowie zwischen Knoten C und Knoten D erstellt werden. In dieser Phase muss das System in den inaktiven Zustand versetzt werden.

    Phase 2 ist nicht erforderlich, bietet jedoch eine höhere Fehlertoleranz, als durch eine einzige Verbindung zwischen Knoten A und Knoten D gegeben ist.

So fügen Sie der Topologie einen Knoten hinzu, auf dem SQL Server 2005 ausgeführt wird

  1. Konfigurieren Sie Knoten D als Verleger, und ordnen Sie ihm einen lokalen Verteiler oder einen Remoteverteiler zu.

  2. Stellen Sie eine Sicherung von Knoten A auf Knoten D wieder her.

  3. Führen Sie auf Knoten D sp_addpublication aus. Geben Sie den Namen der Veröffentlichung für @publication, den Wert true für @enabled_for_p2p, den Wert active für @status und den Wert true für @allow_initialize_from_backup an. Um der Veröffentlichung Artikel hinzuzufügen, führen Sie sp_addarticle aus.

  4. Führen Sie auf Knoten D sp_addsubscription aus. Geben Sie den Namen der Veröffentlichung für @publication, den Namen von Knoten A für @subscriber, den Namen der Zieldatenbank auf Knoten A für @destination_db und den Wert replication support only für @sync_type an.

  5. Führen Sie auf Knoten A sp_addsubscription aus. Geben Sie den Namen der Veröffentlichung für @publication, den Namen von Knoten D für @subscriber, den Namen der Zieldatenbank in Knoten D für @destination_db, den Wert initialize with backup für @sync_type und die geeigneten Werte für die Parameter @backupdevicetype und @backupdevicename an.

  6. Versetzen Sie das System in den inaktiven Zustand, indem Sie die folgenden Schritte ausführen:

    1. Beenden Sie alle Aktivitäten an allen veröffentlichten Tabellen in der Peer-to-Peer-Topologie.

    2. Führen Sie sp_requestpeerresponse auf der Datenbank auf Server A, Server B, Server C und Server D aus, und rufen Sie den @request_id-Ausgabeparameter ab.

    3. Der Verteilungs-Agent wird standardmäßig fortlaufend ausgeführt, folglich sollten Token automatisch an alle Knoten gesendet werden. Wenn der Verteilungs-Agent nicht im fortlaufenden Modus ausgeführt wird, führen Sie den Agent aus. Weitere Informationen finden Sie unter Ausführbare Konzepte für die Programmierung von Replikations-Agents oder Vorgehensweise: Starten und Beenden eines Replikations-Agents (SQL Server Management Studio).

    4. Führen Sie sp_helppeerresponses unter Angabe des in Schritt 2 abgerufenen Werts für @request_id aus. Warten Sie, bis alle Knoten angeben, dass sie die Peeranforderung empfangen haben.

    5. Weisen Sie bei Bedarf neue Identitätsbereiche auf Knoten D zu. Sie können die Topologie nun vollständig verbinden, indem Sie die übrigen Abonnements hinzufügen.

  7. Führen Sie auf Knoten D sp_addsubscription aus. Geben Sie den Namen der Veröffentlichung für @publication, den Namen von Knoten B für @subscriber, den Namen der Zieldatenbank auf Knoten B für @destination_db und den Wert replication support only für @sync_type an.

  8. Führen Sie auf Knoten D sp_addsubscription aus. Geben Sie den Namen der Veröffentlichung für @publication, den Namen von Knoten C für @subscriber, den Namen der Zieldatenbank auf Knoten C für @destination_db und den Wert replication support only für @sync_type an.

  9. Führen Sie auf Knoten B sp_addsubscription aus. Geben Sie den Namen der Veröffentlichung für @publication, den Namen von Knoten D für @subscriber, den Namen der Zieldatenbank auf Knoten D für @destination_db und den Wert replication support only für @sync_type an.

  10. Führen Sie auf Knoten C sp_addsubscription aus. Geben Sie den Namen der Veröffentlichung für @publication, den Namen von Knoten D für @subscriber, den Namen der Zieldatenbank auf Knoten D für @destination_db und den Wert replication support only für @sync_type an.