Hinzufügen und Löschen von Artikeln aus vorhandenen Veröffentlichungen

Gilt für:SQL ServerAzure SQL Managed Instance

Nachdem eine Veröffentlichung erstellt wurde, können Artikel hinzugefügt oder entfernt werden. Während das Hinzufügen von Artikeln jederzeit erfolgen kann, hängen die Schritte zum Löschen von Artikeln vom jeweiligen Replikationstyp und dem Zeitpunkt ab, zu dem der Artikel gelöscht wird.

Hinzufügen von Artikeln

Das Hinzufügen eines Artikels umfasst Folgendes: das Hinzufügen des Artikels zur Veröffentlichung; das Erstellen eines neuen Snapshots für die Veröffentlichung; das Synchronisieren des Abonnements, damit Schema und Daten für den neuen Artikel angewendet werden.

Hinweis

Wenn Sie einer Mergeveröffentlichung einen Artikel hinzufügen und ein vorhandener Artikel von diesem neuen Artikel abhängt, müssen Sie mithilfe des @processing_order -Parameters von sp_addmergearticle und sp_changemergearticleeine Verarbeitungsreihenfolge für die beiden Artikel angeben. Angenommen, Sie veröffentlichen eine Tabelle, aber Sie veröffentlichen keine Funktion, die auf die Tabelle verweist. Wenn Sie die Funktion nicht veröffentlichen, kann die Tabelle beim Subscriber nicht erstellt werden. Wenn Sie die Funktion einer Veröffentlichung hinzufügen, geben Sie einen Wert von 1 für den @processing_order -Parameter von sp_addmergearticlean, und geben Sie einen Wert von 2 für den @processing_order -Parameter von sp_changemergearticlean. Geben Sie dann den Tabellennamen für den @article-Parameter an. Durch diese Verarbeitungsreihenfolge wird sichergestellt, dass Sie die Funktion auf dem Abonnenten vor der Tabelle erstellen, die davon abhängt. Sie können unterschiedliche Nummern für die einzelnen Artikel verwenden, dabei muss jedoch die Nummer für die Funktion kleiner als die Nummer der Tabelle sein.

  1. Zum Hinzufügen einzelner oder mehrerer Artikel stehen die folgenden Methoden zur Verfügung:

  2. Nachdem Sie einer Veröffentlichung einen Artikel hinzugefügt haben, müssen Sie eine neue Momentaufnahme für die Veröffentlichung (sowie – bei Mergeveröffentlichungen mit parametrisierten Filtern – für alle Partitionen) erstellen. Der Verteilungs-Agent oder der Merge-Agent kopiert dann das Schema und die Daten für den neuen Artikel auf den Abonnenten (ohne dabei die gesamte Veröffentlichung neu zu initialisieren).

  3. Synchronisieren Sie nach Abschluss der Momentaufnahmeerstellung das Abonnement, um das Schema und die Daten für den neuen Artikel zu kopieren.

Löschung von Artikeln

Artikel können jederzeit aus einer Veröffentlichung gelöscht werden, wobei jedoch Folgendes zu beachten ist:

  • Durch das Löschen eines Artikels aus einer Veröffentlichung wird weder das Objekt aus der Veröffentlichungsdatenbank noch das zugehörige Objekt aus der Abonnementdatenbank entfernt. Verwenden Sie DROP <Objekt>, um diese Objekte ggf. zu entfernen. Wenn Sie einen Artikel löschen, der über Fremdschlüsseleinschränkungen mit anderen veröffentlichten Artikeln verknüpft ist, empfehlen wir, die Tabelle beim Abonnenten manuell oder mithilfe einer Skriptausführung bei Bedarf zu löschen: Geben Sie ein Skript an, das die geeigneten DROP <Object>-Anweisungen enthält. Weitere Informationen finden Sie unter Ausführen von Skripts während der Synchronisierung (Replikationsprogrammierung mit Transact-SQL).

  • Bei Mergepublikationen mit einer Kompatibilitätsstufe von 90RTM oder höher können Artikel jederzeit entfernt werden, es ist jedoch ein neuer Snapshot erforderlich. Außerdem wurde Folgendes durchgeführt:

    • Wenn ein Artikel in einer Verbundfilter- oder logischen Datensatzbeziehung als übergeordneter Artikel fungiert, müssen diese Beziehungen zunächst aufgelöst werden, wofür eine Neuinitialisierung erforderlich ist.

    • Wenn der Artikel den letzten parametrisierten Filter in einer Veröffentlichung hat, müssen die Abonnements erneut initialisiert werden.

  • Bei Mergeveröffentlichungen mit einem Kompatibilitätsgrad von unter 90RTM können Artikel ohne weiteres gelöscht werden, solange die Abonnements noch nicht zum ersten Mal synchronisiert wurden. Wird ein Artikel nach der Synchronisierung von Abonnements gelöscht, müssen die Abonnements gelöscht, neu erstellt und dann synchronisiert werden.

  • Bei Momentaufnahme- oder Transaktionsveröffentlichungen können Artikel ohne weiteres gelöscht werden, solange noch keine Abonnements erstellt wurden. Wird ein Artikel gelöscht, nachdem ein oder mehrere Abonnements erstellt wurden, müssen die Abonnements gelöscht, neu erstellt und synchronisiert werden. Weitere Informationen zum Löschen von Abonnements finden Sie unter Abonnieren von Veröffentlichungen und sp_dropsubscription (Transact-SQL). Mitsp_dropsubscription können Sie einen einzelnen Artikel aus dem Abonnement löschen, statt das gesamte Abonnement zu löschen.

  1. Das Entfernen eines Artikels aus einer Veröffentlichung umfasst das Entfernen des Artikels und das Erstellen eines neuen Snapshots für die Veröffentlichung. Durch das Löschen eines Artikels wird die aktuelle Momentaufnahme ungültig, sodass eine neue Momentaufnahme erstellt werden muss.

  2. Nachdem Sie einen Artikel aus einer Veröffentlichung gelöscht haben, müssen Sie eine neue Momentaufnahme für die Veröffentlichung (sowie – bei Mergeveröffentlichungen mit parametrisierten Filtern – für alle Partitionen) erstellen.

Wie oben bereits erwähnt, müssen die Abonnements in einigen Fällen nach dem Löschen eines Artikels gelöscht und dann neu erstellt sowie synchronisiert werden. Weitere Informationen finden Sie unter Abonnieren von Veröffentlichungen und Synchronisieren von Daten.

Hinweis

SQL Server 2014 (12.x) Service Pack 2 oder höher und SQL Server 2016 (13.x) Service Pack 1 oder höher unterstützen das Ablegen einer Tabelle mithilfe des DROP TABLE DDL-Befehls für Artikel, die an der Transaktionsreplikation teilnehmen. Wenn eine DROP TABLE DDL von der/den Publikation(en) unterstützt wird, dann löscht die DROP TABLE-Operation die Tabelle aus der Publikation und der Datenbank. Der Protokollleseagent wird einen Bereinigungsbefehl für die Verteilungsdatenbank für die gelöschte Tabelle posten und die Bereinigung der Metadaten des Verlegers durchführen. Wenn der Protokollleser noch nicht alle Protokolleinträge verarbeitet hat, die auf die gelöschte Tabelle verweisen, wird er neue Befehle ignorieren, die der gelöschten Tabelle zugeordnet sind. Bereits verarbeitete Datensätze werden an die Verteilungsdatenbank übermittelt. Sie können auf die Abonnentendatenbank angewendet werden, wenn der Verteilungs-Agent sie verarbeitet, bevor der Protokollleser veraltete (gelöschte) Artikel bereinigt. Die Standardeinstellung für alle Transaktionsreplikationspublikationen besteht darin, DDL nicht zu unterstützen DROP TABLE . KB 3170123 enthält weitere detaillierte Informationen zu dieser Verbesserung.