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

Gilt für: SQL Server Azure SQL Managed Instance

Nachdem eine Veröffentlichung erstellt wurde, können ihr Artikel hinzugefügt oder Artikel aus der Veröffentlichung gelöscht 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

Hinzufügen eines Artikels beinhaltet Folgendes: Hinzufügen des Artikels zur Veröffentlichung; Erstellen einer neuen Momentaufnahme für die Veröffentlichung und Synchronisieren des Abonnements zum Zuweisen des Schemas und der Daten für den neuen Artikel.

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 nicht auf dem Abonnenten 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 möchten, der über Fremdschlüsseleinschränkungen mit anderen veröffentlichten Artikeln verknüpft ist, sollten Sie die Tabelle auf dem Abonnenten manuell oder mithilfe einer bedarfsgesteuerten Skriptausführung löschen. Geben Sie ein Skript an, dass die entsprechenden DROP <Objekt>-Anweisungen enthält. Weitere Informationen finden Sie unter Ausführen von Skripts während der Synchronisierung (Replikationsprogrammierung mit Transact-SQL).

  • Bei Mergeveröffentlichungen mit einem Kompatibilitätsgrad von 90RTM oder höher können Artikel jederzeit gelöscht werden. Es ist jedoch eine neue Momentaufnahme erforderlich. Außerdem wurde Folgendes durchgeführt:

    • Wenn der Artikel ein übergeordneter Artikel in einer Joinfilter- oder logischen Datensatzbeziehung ist, müssen zunächst die Beziehungen gelöscht werden, was eine erneute Initialisierung erforderlich macht.

    • 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 nach der Erstellung von Abonnements gelöscht, müssen die Abonnements gelöscht, neu erstellt und dann 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 Löschen eines Artikels aus einer Veröffentlichung umfasst das eigentliche Löschen des Artikels und das Erstellen einer neuen Momentaufnahme 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 Löschen einer Tabelle mit dem DDL-Befehl DROP TABLE für Artikel, die an einer Transaktionsreplikation beteiligt sind. Wenn eine DROP TABLE-DDL durch die Publikation(en) unterstützt wird, löscht der DROP TABLE-Vorgang die Tabelle aus der Veröffentlichung 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 Veröffentlichungen für Transaktionsreplikationen ist, dass der DDL-Befehl DROP TABLE nicht unterstützt wird. KB 3170123 enthält weitere detaillierte Informationen zu dieser Verbesserung.