Hinzufügen und Löschen von Artikeln aus vorhandenen VeröffentlichungenAdd Articles to and Drop Articles from Existing Publications

Anwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) JaVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceYesVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceAnwendungsbereich:Applies to: JaSQL ServerSQL Server (alle unterstützten Versionen) yesSQL ServerSQL Server (all supported versions) JaVerwaltete Azure SQL-InstanzAzure SQL Managed InstanceYesVerwaltete Azure SQL-InstanzAzure SQL Managed Instance

Nachdem eine Veröffentlichung erstellt wurde, können ihr Artikel hinzugefügt oder Artikel aus der Veröffentlichung gelöscht werden.After a publication is created, it is possible to add and drop articles. 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.Articles can be added at any time, but the actions required for dropping articles depend on the type of replication and when the article is dropped.

Hinzufügen von ArtikelnAdding Articles

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.Adding an article involves: adding the article to the publication; creating a new snapshot for the publication; synchronizing the subscription to apply the schema and data for the new article.

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_changemergearticle eine Verarbeitungsreihenfolge für die beiden Artikel angeben.If you add an article to a merge publication and an existing article depends on the new article, you must specify a processing order for both articles using the @processing_order parameter of sp_addmergearticle and sp_changemergearticle. Angenommen, Sie veröffentlichen eine Tabelle, aber Sie veröffentlichen keine Funktion, die auf die Tabelle verweist.Consider the following scenario: you publish a table but you do not publish a function that the table references. Wenn Sie die Funktion nicht veröffentlichen, kann die Tabelle nicht auf dem Abonnenten erstellt werden.If you do not publish the function, the table cannot be created at the Subscriber. Wenn Sie die Funktion einer Veröffentlichung hinzufügen, geben Sie einen Wert von 1 für den @processing_order-Parameter von sp_addmergearticle, und geben Sie einen Wert von 2 für den @processing_order-Parameter von sp_changemergearticle an. Geben Sie dann den Tabellennamen für den @article-Parameter an.When you add the function to the publication: specify a value of 1 for the @processing_order parameter of sp_addmergearticle; and specify a value of 2 for the @processing_order parameter of sp_changemergearticle, specifying the table name for the parameter @article. Durch diese Verarbeitungsreihenfolge wird sichergestellt, dass Sie die Funktion auf dem Abonnenten vor der Tabelle erstellen, die davon abhängt.This processing order ensures that you create the function at the Subscriber before the table that depends on it. 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.You can use different numbers for each article, as long as the number for the function is lower than the number for the table.

  1. Zum Hinzufügen einzelner oder mehrerer Artikel stehen die folgenden Methoden zur Verfügung:Add one or more articles through one of the following methods:

  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.After adding an article to a publication, you must create a new snapshot for the publication (and all partitions if it is a merge publication with parameterized filters). 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).The Distribution Agent or Merge Agent then copies the schema and data for the new article to the Subscriber (it does not reinitialize the entire publication).

  3. Synchronisieren Sie nach Abschluss der Momentaufnahmeerstellung das Abonnement, um das Schema und die Daten für den neuen Artikel zu kopieren.After the snapshot is created, synchronize the subscription to copy the schema and data for the new article.

Löschung von ArtikelnDropping Articles

Artikel können jederzeit aus einer Veröffentlichung gelöscht werden, wobei jedoch Folgendes zu beachten ist:Articles can be dropped from a publication at any time, but you must take into account the following behaviors:

  • 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.Dropping an article from a publication does not remove the object from the publication database or the corresponding object from the subscription database. Verwenden Sie DROP <Object>, um diese Objekte ggf. zu entfernen.Use DROP <Object> to remove these objects if necessary. 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, das die entsprechenden DROP <Object>-Anweisungen enthält.When you drop an article that is related to other published articles through foreign key constraints, we recommend that you drop the table at the Subscriber manually or by using on-demand script execution: specify a script that includes the appropriate DROP <Object> statements. Weitere Informationen finden Sie unter Ausführen von Skripts während der Synchronisierung (Replikationsprogrammierung mit Transact-SQL).For more information, see Execute Scripts During Synchronization (Replication Transact-SQL Programming).

  • 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.For merge publications with a compatibility level of 90RTM or higher, articles can be dropped at any time, but a new snapshot is required. Außerdem zu beachten:Additionally:

    • 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.If an article is a parent article in a join filter or logical record relationship, the relationships must be dropped first, which requires reinitialization.

    • Wenn der Artikel den letzten parametrisierten Filter in einer Veröffentlichung hat, müssen die Abonnements erneut initialisiert werden.If an article has the last parameterized filter in a publication, subscriptions must be reinitialized.

  • 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.For merge publications with a compatibility level lower than 90RTM, articles can be dropped with no special considerations prior to the initial synchronization of subscriptions. Wird ein Artikel nach der Synchronisierung von Abonnements gelöscht, müssen die Abonnements gelöscht, neu erstellt und dann synchronisiert werden.If an article is dropped after one or more subscriptions is synchronized, the subscriptions must be dropped, re-created, and synchronized.

  • Bei Momentaufnahme- oder Transaktionsveröffentlichungen können Artikel ohne weiteres gelöscht werden, solange noch keine Abonnements erstellt wurden.For snapshot or transactional publications, articles can be dropped with no special considerations prior to subscriptions being created. Wird ein Artikel nach der Erstellung von Abonnements gelöscht, müssen die Abonnements gelöscht, neu erstellt und dann synchronisiert werden.If an article is dropped after one or more subscriptions is created, the subscriptions must be dropped, recreated, and synchronized. Weitere Informationen zum Löschen von Abonnements finden Sie unter Abonnieren von Veröffentlichungen und sp_dropsubscription (Transact-SQL).For more information about dropping subscriptions, see Subscribe to Publications and sp_dropsubscription (Transact-SQL). Mitsp_dropsubscription können Sie einen einzelnen Artikel aus dem Abonnement löschen, statt das gesamte Abonnement zu löschen.sp_dropsubscription allows you to drop a single article from the subscription rather than the entire subscription.

  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.Dropping an article from a publication involves dropping the article and creating a new snapshot for the publication. Durch das Löschen eines Artikels wird die aktuelle Momentaufnahme ungültig, sodass eine neue Momentaufnahme erstellt werden muss.Dropping an article invalidates the current snapshot; therefore a new snapshot must be created.

  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.After dropping an article from a publication, you must create a new snapshot for the publication (and all partitions if it is a merge publication with parameterized filters).

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.As noted above, in some cases dropping an article requires subscriptions to be dropped, recreated, and then synchronized. Weitere Informationen finden Sie unter Abonnieren von Veröffentlichungen und Synchronisieren von Daten.For more information, see Subscribe to Publications and Synchronize Data.

Hinweis

SQL Server 2014 (12.x)SQL Server 2014 (12.x)Service Pack 2 oder höher und SQL Server 2016 (13.x)SQL Server 2016 (13.x) Service Pack 1 oder höher unterstützen das Löschen einer Tabelle mit dem DROP TABLE-DLL-Befehl für Artikel, die an einer Transaktionsreplikation beteiligt sind.SQL Server 2014 (12.x)SQL Server 2014 (12.x) Service Pack 2 or above and SQL Server 2016 (13.x)SQL Server 2016 (13.x) Service Pack 1 or above support dropping a table using DROP TABLE DLL command for articles participating in Transactional Replication. 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.If a DROP TABLE DDL is supported by the publication(s), then the DROP TABLE operation will drop the table from the publication and the database. 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.The log reader agent will post a cleanup command for the distribution database of the dropped table and do the cleanup of the publisher metadata. 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.If the log reader hasn't processed all the log records that refer to the dropped table, then it will ignore new commands that are associated with the dropped table. Bereits verarbeitete Datensätze werden an die Verteilungsdatenbank übermittelt.Already processed records will be delivered to distribution database. Sie können auf die Abonnentendatenbank angewendet werden, wenn der Verteilungs-Agent sie verarbeitet, bevor der Protokollleser veraltete (gelöschte) Artikel bereinigt.They may be applied on Subscriber database if the Distribution Agent processes them before Log Reader cleans up the obsolete (dropped) article(s). Die Standard-Einstellung für alle Veröffentlichungen für Transaktionsreplikationen unterstützt keine DROP TABLE-DLL.The default setting for all transactional replication publications is to not support DROP TABLE DLL. KB 3170123 enthält weitere detaillierte Informationen zu dieser Verbesserung.KB 3170123 has more details about this improvement.

Weitere InformationenSee Also

Veröffentlichen von Daten und Datenbankobjekten Publish Data and Database Objects
Erneutes Initialisieren von Abonnements Reinitialize Subscriptions
Vornehmen von Schemaänderungen in VeröffentlichungsdatenbankenMake Schema Changes on Publication Databases