Veröffentlichen von Daten und Datenbankobjekten

Gilt für:SQL ServerAzure SQL Managed Instance

Wenn Sie eine Veröffentlichung erstellen möchten, können Sie die Tabellen und anderen Datenbankobjekte auswählen, die Sie veröffentlichen möchten. Mit einer Replikation können die folgenden Datenbankobjekte veröffentlicht werden:

Datenbankobjekt Momentaufnahmereplikation und Transaktionsreplikation Mergereplikation
Tabellen X X
Partitionierte Tabellen X X
Gespeicherte Prozeduren – Definition (Transact-SQL und CLR) X X
Gespeicherte Prozeduren – Ausführung (Transact-SQL und CLR) X Nein
Ansichten X X
Indizierte Ansichten X X
Indizierte Views als Tabellen X Nein
Benutzerdefinierte Typen (CLR) X X
Benutzerdefinierte Funktionen (Transact-SQL und CLR) X X
Aliasdatentypen X X
Volltextindizes X X
Schemaobjekte (Einschränkungen, Indizes, Benutzer-DML-Trigger, erweiterte Eigenschaften und Sortierung) X X

Erstellen von Veröffentlichungen

Beim Erstellen einer Veröffentlichung sind die folgenden Informationen bereitzustellen:

  • Der Distributor.
  • Speicherort der Momentaufnahmedateien
  • Veröffentlichungsdatenbank
  • Typ der zu erstellenden Veröffentlichung (Momentaufnahmeveröffentlichung, Transaktionsveröffentlichung, Transaktionsveröffentlichung mit aktualisierbaren Abonnements oder Mergeveröffentlichung)
  • Daten und Datenbankobjekte (Artikel), die in die Veröffentlichung aufgenommen werden sollen
  • statische Zeilenfilter und Spaltenfilter (alle Veröffentlichungstypen) sowie parametrisierte Zeilenfilter und Joinfilter (Mergeveröffentlichungen)
  • Zeitplan des Snapshot-Agenten
  • Die Konten, unter denen die folgenden Agents ausgeführt werden: der Snapshot-Agent für alle Veröffentlichungen; der Protokolllese-Agent für alle Transaktionsveröffentlichungen; der Warteschlangenlese-Agent für Transaktionsveröffentlichungen, die aktualisierbare Abonnements zulassen.
  • Name und Beschreibung der Veröffentlichung.

Informationen zum Arbeiten mit Veröffentlichungen finden Sie in den folgenden Themen:

Hinweis

Beim Löschen eines Artikels oder einer Veröffentlichung werden die Objekte nicht vom Abonnenten entfernt.

Veröffentlichen von Tabellen

Tabellen sind die Objekte, die am häufigsten veröffentlicht werden. Die folgenden Links bieten weiterführende Informationen zu Themenbereichen im Zusammenhang mit der Veröffentlichung von Tabellen:

Beim Veröffentlichen einer Tabelle für die Replikation können Sie angeben, welche Schemaobjekte auf den Abonnenten kopiert werden sollen, z. B. deklarierte referenzielle Integrität (PRIMARY KEY-Einschränkungen, Referenzeinschränkungen, eindeutige Einschränkungen), Indizes, Benutzer-DML-Trigger (DDL-Trigger können nicht repliziert werden), erweiterte Eigenschaften und Sortierungen. Erweiterte Eigenschaften werden nur in der ersten Synchronisierung zwischen dem Verleger und dem Abonnenten repliziert. Wenn Sie eine erweiterte Eigenschaft nach der ersten Synchronisierung hinzufügen oder ändern, wird die Änderung nicht repliziert.

Informationen zum Angeben von Schemaoptionen finden Sie unter Angeben von Schemaoptionen oder SchemaOption.

Partitionierte Tabellen und Indizes

Die Replikation unterstützt die Veröffentlichung von partitionierten Tabellen und Indizes. Das Maß an Unterstützung hängt vom verwendeten Replikationstyp und den Optionen ab, die für die Veröffentlichung und die mit den partitionierten Tabellen verbundenen Artikel angegeben werden. Weitere Informationen finden Sie unter Replicate Partitioned Tables and Indexes.

Veröffentlichen gespeicherter Prozeduren

Bei allen Replikationstypen können Sie Definitionen gespeicherter Prozeduren replizieren: Das CREATE PROCEDURE wird an jeden Abonnenten kopiert. Bei CLR-gespeicherten Prozeduren (Common Language Runtime) wird auch die zugehörige Assembly kopiert. Änderungen an den Prozeduren werden auf die Abonnenten repliziert, während Änderungen an den zugehörigen Assemblys nicht repliziert werden.

Bei der Transaktionsreplikation ist jedoch nicht nur die Definition einer gespeicherten Prozedur replizierbar, sondern Sie können auch die Ausführung der gespeicherten Prozeduren replizieren. Dies ist bei der Replikation der Ergebnisse von wartungsorientierten gespeicherten Prozeduren hilfreich, die sich möglicherweise auf große Datenmengen auswirken. Weitere Informationen finden Sie unter Veröffentlichen der Ausführung gespeicherter Prozeduren in der Transaktionsreplikation.

Ansichten veröffentlichen

Mit allen Replikationstypen können Sie Sichten replizieren. Dabei kann die Sicht (und der zugehörige Index, sofern es sich um eine indizierte Sicht handelt) auf den Abonnenten kopiert werden, in jedem Fall muss aber auch die Basistabelle repliziert werden.

Bei indizierten Sichten ist es bei der Transaktionsreplikation auch möglich, die indizierte Sicht als Tabelle und nicht als Sicht zu replizieren. Dadurch entfällt die Notwendigkeit, die Basistabelle mit zu replizieren. Geben Sie dazu eine der „indexed view logbased“-Optionen für den @type-Parameter von sp_addarticle (Transact-SQL) an. Weitere Informationen zum Verwenden von sp_addarticle finden Sie unter Define an Article.

Veröffentlichen benutzerdefinierter Funktionen

Die CREATE FUNCTION Anweisungen für CLR-Funktionen und Transact-SQL-Funktionen werden an jeden Abonnenten kopiert. Bei CLR-Funktionen wird auch die zugehörige Assembly kopiert. Änderungen an den Funktionen werden auf die Abonnenten repliziert, während Änderungen an den zugehörigen Assemblys nicht repliziert werden.

Veröffentlichen von benutzerdefinierten Typen und Aliasdatentypen

Spalten, die benutzerdefinierte Typen oder Aliasdatentypen verwenden, werden genauso wie alle anderen Spalten auf die Abonnenten repliziert. Die CREATE TYPEAnweisung für jeden replizierten Typ wird beim Abonnenten ausgeführt, bevor die Tabelle erstellt wird. Bei benutzerdefinierten Typen wird die zugehörige Assembly ebenfalls an jeden Abonnenten kopiert. Änderungen an benutzerdefinierten Typen oder Aliasdatentypen werden nicht auf die Abonnenten repliziert.

Wenn ein Typ in einer Datenbank definiert, beim Erstellen einer Veröffentlichung aber nicht in einer Spalte referenziert ist, wird der Typ nicht auf die Abonnenten kopiert. Wenn Sie später in der Datenbank eine Spalte dieses Typs erstellen und diesen Typ replizieren möchten, müssen Sie zunächst manuell den Typ (und bei benutzerdefiniertem Typ die zugehörige Assembly) auf alle Abonnenten kopieren.

Veröffentlichen von Volltextindizes

Die CREATE FULLTEXT INDEX Anweisung wird in jeden Abonnenten kopiert, und der Volltextindex wird beim Abonnenten erstellt. Änderungen, die an den verwendeten ALTER FULLTEXT INDEX Volltextindizes vorgenommen wurden, werden nicht repliziert.

Ausführen von Schemaänderungen an veröffentlichten Objekten

Die Replikation unterstützt eine breite Palette von Schemaänderungen an veröffentlichten Objekten. Wenn Sie eine der folgenden Schemaänderungen am entsprechenden veröffentlichten Objekt auf einem SQL Server-Verleger vornehmen, wird diese Änderung standardmäßig an alle SQL Server-Abonnenten weitergegeben:

  • ALTER TABLE

  • ALTER VIEW

  • ALTER PROCEDURE

  • ALTER FUNCTION

  • ALTER TRIGGER

Weitere Informationen finden Sie unter Vornehmen von Schemaänderungen in Veröffentlichungsdatenbanken.

Überlegungen zum Veröffentlichen

Beachten Sie beim Veröffentlichen von Datenbankobjekten Folgendes:

  • Die Datenbank ist für Benutzer während der Erstellung der Publikation und der anfänglichen Momentaufnahme zugänglich, es empfiehlt sich jedoch, Publikationen zu Zeiten geringerer Aktivität beim Verleger zu erstellen.

  • Datenbanken können nicht mehr umbenannt werden, nachdem in ihnen eine Veröffentlichung erstellt wurde. Wenn eine solche Datenbank umbenannt werden soll, müssen Sie zunächst die Replikation aus der Datenbank entfernen.

  • Wenn Sie ein Datenbankobjekt veröffentlichen, das von mindestens einem weiteren Datenbankobjekt abhängt, müssen Sie alle Objekte veröffentlichen, auf die verwiesen wird. Wenn Sie beispielsweise eine Sicht veröffentlichen, die von einer Tabelle abhängt, muss auch die Tabelle veröffentlicht 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. Diese Reihenfolge der Verarbeitung stellt sicher, dass Sie die Funktion beim Abonnenten vor der davon abhängigen Tabelle erstellen. Sie können unterschiedliche Nummern für jeden Artikel verwenden, solange die Nummer für die Funktion niedriger ist als die Nummer für die Tabelle.

  • Veröffentlichungsnamen dürfen die folgenden Zeichen nicht enthalten: % * [ ] | : " ? \ / <>.

Beschränkungen für das Veröffentlichen von Objekten

  • Die maximale Anzahl von Artikeln und Spalten, die veröffentlicht werden können, ist je nach Veröffentlichungstyp unterschiedlich. Weitere Informationen finden Sie im Abschnitt „Replikationsobjekte“ Spezifikationen der maximalen Kapazität für SQL Server.

  • Gespeicherte Prozeduren, Sichten, Trigger und benutzerdefinierte Funktionen, die mit WITH ENCRYPTION definiert wurden, können nicht als Teil der SQL Server-Replikation veröffentlicht werden.

  • Es ist möglich, XML-Schemaauflistungen zu replizieren, Änderungen werden aber nach der Anfangsmomentaufnahme nicht mehr repliziert.

  • Für die Transaktionsreplikation veröffentlichte Tabellen müssen einen Primärschlüssel haben. Wenn sich eine Tabelle in einer Veröffentlichung für die Transaktionsreplikation befindet, können Sie keine Indizes deaktivieren, die mit Primärschlüsselspalten verknüpft sind. weil diese Indizes von der Replikation benötigt werden. Wenn Sie einen Index deaktivieren möchten, müssen Sie zuerst die Tabelle aus der Veröffentlichung löschen.

  • Gebundene Standardwerte, die mit sp_bindefault (Transact-SQL) erstellt wurden, werden nicht repliziert (gebundene Standardwerte sind veraltet und wurden durch Standardwerte ersetzt, die mit dem DEFAULTSchlüsselwort von ALTER TABLE oder CREATE TABLE erstellt wurden).

  • Funktionen, die den NOEXPAND -Hinweis für indizierte Sichten enthalten, können nicht in derselben Veröffentlichung wie die Tabellen, auf die verwiesen wird, und die indizierten Sichten veröffentlicht werden. Dies liegt an der Reihenfolge, in der sie vom Verteilungs-Agent übermittelt werden. Um dieses Problem zu umgehen, nehmen Sie die Erstellung der Tabelle und der indizierten Ansichten in eine erste Veröffentlichung auf, und fügen Sie Funktionen, die den NOEXPAND-Hinweis für die indizierten Ansichten enthalten, zu einer zweiten Veröffentlichung hinzu, die Sie erst veröffentlichen, nachdem die erste Veröffentlichung abgeschlossen ist. Oder erstellen Sie Scripts für diese Funktionen und stellen Sie das Script über den @post_snapshot_script-Parameter von sp_addpublication bereit.

Schemas und Objektbesitz

Im Assistenten für neue Publikationen gilt für die Replikation hinsichtlich Schemas und Objektbesitz folgendes Standardverhalten:

  • Für Artikel in Mergeveröffentlichungen mit einem Kompatibilitätsgrad von 90 oder höher, Momentaufnahmeveröffentlichungen und Transaktionsveröffentlichungen gilt: Standardmäßig ist der Objekteigentümer beim Abonnenten derselbe wie der Eigentümer des entsprechenden Objekts beim Verleger. Wenn die Schemas, denen Objekte gehören, beim Abonnenten nicht vorhanden sind, werden sie automatisch erstellt.

  • Für Artikel in Mergeveröffentlichungen mit einem Kompatibilitätsgrad unter 90 gilt: Standardmäßig bleibt der Eigentümer leer und wird bei der Erstellung des Objekts auf dem Abonnenten als dbo angegeben.

  • Für Artikel in Oracle-Veröffentlichungen: Standardmäßig wird der Besitzer mit dboangegeben.

  • Für Artikel in Veröffentlichungen, die Zeichenmodus-Momentaufnahmen verwenden (werden für Nicht-SQL Server-Abonnenten und SQL Server Compact-Abonnenten verwendet): Standardmäßig wird der Besitzer leer gelassen. Als Besitzer wird standardmäßig der Besitzer verwendet, der mit dem vom Verteilungs- oder Merge-Agent zum Herstellen einer Verbindung mit dem Abonnenten verwendeten Konto verknüpft ist.

Der Objektbesitzer kann im Dialogfeld Artikeleigenschaften<Artikel> und über folgende gespeicherte Prozeduren festgelegt werden: sp_addarticle, sp_addmergearticle, sp_changearticle und sp_changemergearticle. Weitere Informationen finden Sie unter Anzeigen und Ändern von Veröffentlichungseigenschaften, Definieren eines Artikels und Anzeigen und Ändern von Artikeleigenschaften.

Veröffentlichen von Daten auf Abonnenten, auf denen eine frühere Version von SQL Server ausgeführt wird

  • Wenn Sie Daten auf einem Abonnenten veröffentlichen, auf dem eine frühere Version von SQL Server ausgeführt wird, steht nur die Funktionalität dieser früheren Version zur Verfügung, und zwar sowohl hinsichtlich der replikationsspezifischen Funktionalität als auch der Funktionalität des Produkts als Ganzes.

  • Mergeveröffentlichungen verwenden einen Kompatibilitätsgrad, der bestimmt, welche Funktionen in einer Veröffentlichung verwendet werden können, und der es Ihnen ermöglicht, Subscriber zu unterstützen, auf denen frühere Versionen von SQL Server ausgeführt werden.

Veröffentlichen von Tabellen in mehreren Veröffentlichungen

Die Replikation unterstützt das Veröffentlichen von Artikeln in mehreren Veröffentlichungen (darunter auch das erneute Veröffentlichen von Daten), wobei die folgenden Einschränkungen gelten:

  • Wenn ein Artikel in einer Transaktionsveröffentlichung und in einer Mergeveröffentlichung veröffentlicht wird, müssen Sie sicherstellen, dass für den Mergeartikel für die @published_in_tran_pub -Eigenschaft TRUE festgelegt ist. Weitere Informationen über Einstellungseigenschaften finden Sie unter Anzeigen und Ändern von Veröffentlichungseigenschaften und Anzeigen und Ändern von Artikeleigenschaften.

    Sie sollten außerdem die @published_in_tran_pub -Eigenschaft festlegen, wenn ein Artikel Bestandteil eines Transaktionsabonnements und in einer Mergeveröffentlichung enthalten ist. Beachten Sie in diesem Fall, dass bei der Transaktionsreplikation Tabellen auf dem Abonnenten standardmäßig als schreibgeschützt behandelt werden. Werden bei der Mergereplikation Datenänderungen an einer Tabelle in einem Transaktionsabonnement vorgenommen, kann es zu einer Nichtkonvergenz der Daten kommen. Um dies zu vermeiden, empfiehlt es sich, solche Tabellen in der Mergeveröffentlichung als "nur herunterladbar" zu kennzeichnen. Dadurch wird verhindert, dass ein Mergeabonnent Datenänderungen in die Tabelle hochlädt. Weitere Informationen finden Sie unter Optimieren der Leistung der Mergereplikation durch nur herunterladbare Artikel.

  • Ein Artikel kann nicht gleichzeitig in einer Mergeveröffentlichung und einer Transaktionsveröffentlichung mit Abonnements mit Warteschlangenaktualisierung veröffentlicht werden.

  • Artikel, die in Transaktionsveröffentlichungen enthalten sind und aktualisierbare Abonnements unterstützen, können nicht erneut veröffentlicht werden.

  • Wenn ein Artikel in mehr als einer transaktionalen Veröffentlichung veröffentlicht wird, die Abonnements mit Warteschlangenaktualisierung unterstützen, müssen die folgenden Eigenschaften für den Artikel in allen Veröffentlichungen denselben Wert haben:

    Eigenschaft Parameter in sp_addarticle
    Identitätsbereichsverwaltung @auto_identity_range (als veraltet markiert) und @identityrangemangementoption
    Identitätsbereich des Verlegers @pub_identity_range
    Identitätsbereich @identity_range
    Identitätsbereich-Schwellenwert @threshold

    Weitere Informationen zu diesen Parametern finden Sie unter sp_addarticle (Transact-SQL).

  • Wenn ein Artikel in mehreren Mergeveröffentlichungen veröffentlicht wird, müssen die folgenden Eigenschaften für den Artikel in allen Veröffentlichungen denselben Wert aufweisen:

    Eigenschaft Parameter für sp_addmergearticle
    Spaltennachverfolgung @column_tracking
    Schemaoptionen @schema_option
    Spaltenfilterung @vertical_partition
    Abonnentenuploadoptionen @subscriber_upload_options
    Bedingtes Nachverfolgen von Löschvorgängen @delete_tracking
    Fehlerkompensierung @compensate_for_errors
    Identitätsbereichsverwaltung @auto_identity_range (als veraltet markiert) und @identityrangemangementoption
    Identitätsbereich des Verlegers @pub_identity_range
    Identitätsbereich @identity_range
    Identitätsbereich-Schwellenwert @threshold
    Partitionsoptionen @partition_options
    Streaming von BLOB-Spalten @stream_blob_columns
    Filtertyp @filter_type (Parameter in sp_addmergefilter)

    Weitere Informationen zu diesen Parametern finden Sie unter sp_addmergearticle (Transact-SQL) und sp_addmergefilter (Transact-SQL).

  • Die Transaktionsreplikation und die ungefilterte Mergereplikation unterstützen das Veröffentlichen einer Tabelle in mehreren Veröffentlichungen und das anschließende Abonnieren innerhalb einer einzelnen Tabelle in der Abonnementdatenbank (üblicherweise als Rollupszenario bezeichnet). Rollup wird häufig verwendet, um Teilmengen von Daten aus mehreren Standorten in einer einzigen Tabelle bei einem zentralen Abonnenten zu aggregieren. Gefilterte Mergeveröffentlichungen unterstützen das Szenario mit einem zentralen Abonnenten nicht. Bei der Mergereplikation wird das Rollup typischerweise über eine einzelne Veröffentlichung mit parametrisierten Zeilenfiltern implementiert. Weitere Informationen zu parametrisierten Zeilenfiltern finden Sie unter Parametrisierte Zeilenfilter.