Funktionsweise des Initialisierens von Publikationen und Abonnements durch die Mergereplikation

Damit der Datenfluss zwischen Verleger und Abonnent erfolgen kann, müssen beide durch die Mergereplikation initialisiert werden. Dieses Thema enthält Informationen zu den Initialisierungsschritten.

Initialisieren der Publikation

In der folgenden Liste werden die Initialisierungsschritte für eine Publikation aufgeführt. Die Schritte erfolgen, wenn Sie die einzelnen gespeicherten Prozeduren ausführen oder nachdem Sie den Assistenten für neue Publikation abgeschlossen haben. Eine weitere Initialisierung findet statt, nachdem der Snapshot-Agent für eine Publikation erstmalig ausführt wurde.

  • sp_replicationdboption
    • Die Publikationsdatenbank ist für die Replikation gekennzeichnet. Die Datenbank kann erst gelöscht werden, wenn die Replikation entfernt wurde.
    • Systemtabellen werden der Publikationsdatenbank hinzugefügt (sofern noch keine Mergepublikation in der Datenbank vorhanden ist). Eine vollständige Liste der Systemtabellen finden Sie im Abschnitt zu den Systemtabellen, die in den Publikations- und den Abonnementdatenbanken erstellt werden, in diesem Thema.
  • sp_addmergepublication
    • Einträge für die Publikation werden den Systemtabellen hinzugefügt.
  • sp_addpublication_snapshot
    • Ein Snapshot-Agent-Auftrag wird dem SQL Server-Agent-System hinzugefügt. Der Auftragsname hat das Format <Publisher>-<PublicationDatabase>-<Publication>-<Integer>.
  • sp_addmergearticle
    • Jedes replizierte Objekt wird für die Replikation gekennzeichnet. Das Objekt kann erst gelöscht werden, wenn der entsprechende Artikel aus allen Publikationen gelöscht wurde.
    • Einträge für die einzelnen Artikel werden den Systemtabellen hinzugefügt.

Die restliche Initialisierung für die Publikationsdatenbank erfolgt beim erstmaligen Ausführen des Snapshot-Agents für eine Publikation (die Publikationsdatenbank wird nicht erneut initialisiert, wenn der Snapshot-Agent anschließend wieder ausgeführt wird.) Wenn Sie den Assistenten für neue Publikation verwenden, wird der erste Snapshot standardmäßig nach Abschluss des Assistenten erstellt. Bei der Verwendung gespeicherter Prozeduren müssen Sie den Agentauftrag oder den Agent direkt ausführen. Weitere Informationen zum Ausführen von Agents finden Sie unter Vorgehensweise: Starten und Beenden eines Replikations-Agents (SQL Server Management Studio) und Programming Replication Agent Executables.

Beim ersten Ausführen des Snapshot-Agents für eine Publikation geschieht Folgendes:

  • Jeder veröffentlichten Tabelle wird eine Spalte mit dem Namen rowguid hinzugefügt, es sei denn, für die Tabelle wurde bereits eine Spalte des uniqueidentifier-Datentyps mit der ROWGUIDCOL-Eigenschaft angegeben (dann wird diese Spalte verwendet). Mithilfe der rowguid-Spalte werden die einzelnen Zeilen in jeder veröffentlichten Tabelle eindeutig bezeichnet. Beim Löschen der Tabelle aus der Publikation wird auch die rowguid-Spalte entfernt. Wurde eine vorhandene Spalte zur Nachverfolgung verwendet, wird die Spalte nicht entfernt.
  • Die folgenden Objekte werden für jede veröffentlichte Tabelle in der Publikationsdatenbank erstellt (alle Objekte werden im dbo-Schema erstellt):
    • INSERT-, UPDATE- und DELETE-Trigger werden veröffentlichten Tabellen hinzugefügt, damit Änderungen nachverfolgt werden können. Die Trigger werden jeweils im folgenden Format benannt: MSmerge_ins_<GUID>, MSmerge_upd_<GUID> und MSmerge_del_<GUID>. Der GUID-Wert wird von dem Eintrag für den Artikel in der sysmergearticles-Systemtabelle abgeleitet.
    • Für das Verarbeiten von Einfügungen, Aktualisierungen und Löschungen bei veröffentlichten Tabellen und für eine Reihe weiterer replikationsbezogener Vorgänge werden gespeicherte Prozeduren erstellt.
    • Zum Verwalten von Einfügungen, Aktualisierungen, Löschungen und Filterungen werden Sichten erstellt.
    • Zum Speichern von Konfliktinformationen werden Konflikttabellen erstellt. Die Konflikttabellen stimmen mit dem Schema der veröffentlichten Tabellen überein: Für jede veröffentlichte Tabelle wird ein Skript erstellt, das dann zum Erstellen der Konflikttabelle in der Publikationsdatenbank verwendet wird. Konflikttabellen werden im Format dbo.MSmerge_conflict_<Publication>_<Article> benannt.

Bei jedem Ausführen des Snapshot-Agents werden die folgenden Dateitypen (mit den entsprechenden Dateierweiterungen) für jeden Artikel in der Publikationsdatenbank erstellt:

  • Schema (SCH)
  • Einschränkungen und Indizes (DRI)
  • Trigger (TRG)
  • Systemtabellendaten (SYS)
  • Konflikttabellen (CFT)
  • Daten (BCP) -- werden für Publikationen mit parametrisierten Filtern nicht erstellt.
    Wenn die Publikation keine parametrisierten Filter verwendet, enthält der Snapshot die Daten für die veröffentlichten Tabellen in einem Satz von BCP-Dateien. Verwendet die Publikation parametrisierte Filter (typisch bei Mergepublikationen), enthält der erste Snapshot keine Daten. Die Daten werden anhand eines Snapshots für eine Abonnentenpartition bereitgestellt (dies wird im Abschnitt zum Initialisieren eines Abonnements erläutert).

Initialisieren eines Abonnements

Jedes Abonnement wird initialisiert, wenn der Merge-Agent für das Abonnement ausgeführt wird und den ursprünglichen Snapshot in die Abonnementdatenbank kopiert. Neben dem Schema und den Daten aus replizierten Objekten enthält der Snapshot die Systemtabellen, Sichten, Trigger und gespeicherten Prozeduren, die in der Publikationsdatenbank vorhanden sind (eine oder zwei zusätzliche Systemtabellen werden ebenfalls in die Abonnementdatenbank kopiert). Eine vollständige Liste der Systemtabellen finden Sie im Abschnitt zu den Systemtabellen, die den Publikations- und den Abonnementdatenbanken erstellt werden, in diesem Thema. Beim erneuten Initialisieren eines Abonnements werden alle replizierten Objekte und Replikationssystemobjekte überschrieben.

Wenn keine der Tabellen in der Publikationsdatenbank parametrisierte Filter verwendet, wird derselbe Publikationssnapshot auf jeden Abonnenten kopiert. Werden ein oder mehrere parametrisierte Filter verwendet, bestimmt die folgende Logik, auf welche Weise die einzelnen Abonnements initialisiert werden:

  • Führen Sie folgende Aufgaben aus, wenn der Snapshotspeicherort in der Befehlszeile für den Merge-Agent angegeben wird:
    • Wenden Sie den Snapshot von diesem Speicherort an.
  • Wenn der Snapshot vorab generiert wurde, gehen Sie folgendermaßen vor:
    • Rufen Sie den Speicherort des Snapshots aus MSmerge_dynamic_snapshots in der Publikationsdatenbank ab, und wenden Sie den Snapshot von diesem Speicherort an.
  • Wenn die Publikation das Initialisieren von Snapshots durch Abonnenten zulässt, gehen Sie folgendermaßen vor:
    • Wurde ein Snapshot bereits für einen anderen Abonnenten mit derselben Partition generiert, dann wenden Sie diesen Snapshot auf den Abonnenten an.
    • Anderenfalls generieren Sie einen Snapshot, und wenden Sie ihn auf den Abonnenten an.
  • Initialisieren Sie ansonsten den Abonnenten mithilfe von SELECT-Anweisungen für die Tabellen in der Publikation. Diese Vorgehensweise ist erheblich langsamer als die Verwendung eines Snapshots für die Partition des Abonnenten.

Falls das Übertragen des Snapshots an einer Stelle unterbrochen wird, wird es anschließend automatisch fortgesetzt. Bereits vollständig übertragene Dateien werden nicht noch einmal gesendet. Teilweise übermittelte Dateien müssen vollständig neu übermittelt werden, da beim Snapshot-Agent die BCP-Datei für jeden Publikationsartikel zur Übermittlung verwendet wird. Das Fortsetzen der Snapshotübertragung kann jedoch die Menge der übermittelten Daten erheblich reduzieren und eine rechtzeitige Übermittlung des Snapshots auch bei einer unzuverlässigen Verbindung sicherstellen. Weitere Informationen zum Erstellen von Snapshots finden Sie unter Snapshots für Mergepublikationen mit parametrisierten Filtern.

Snapshotspeicherort

Der Snapshotspeicherort hängt von Folgendem ab: dem für den standardmäßigen oder alternativen Snapshotspeicherort angegebenen Pfad, ob die Publikation einen UNC-Pfad oder eine FTP-Freigabe für den Snapshotordner aufweist und ob für die Publikation parametrisierte Filter verwendet werden. Bei diesen Beispielen wird von folgendem Speicherort für den Snapshotordner ausgegangen: \\<MyComputer>\<MyFolder>\:

  • Wenn die Publikation einen UNC-Pfad aufweist, lautet der erste Teil wie folgt: \\<MyComputer>\<MyFolder>\unc\. Bei einer FTP-Freigabe lautet er: \\<MyComputer>\<MyFolder>\ftp\.
  • Weist die Publikation einen UNC-Pfad, aber keine parametrisierten Filter auf, lautet der Pfad: \\<MyComputer>\<MyFolder>\unc\<Publisher>_<Publicationdb>_<publication>
  • Werden für die Publikation ein UNC-Pfad und parametrisierte Filter verwendet, basiert der Speicherort auf dem Pfad für den Snapshotordner und den Kriterien für parametrisierte Zeilenfilter der Publikation: Wenn der Artikel z. B. mit der HOST_NAME()-Funktion gefiltert wird und HOST_NAME() den Wert 'SalesLaptop' für die Partition aufweist, lautet der Pfad zum Snapshot für diese Partition wie folgt: \\<MyComputer>\<MyFolder>\unc\<Publisher>_<Publicationdb>_<publication>\ SalesLaptop_12\, wobei 12 die intern für die Partition verwendete ID ist.

In den Publikations- und den Abonnementdatenbanken erstellte Systemtabellen

Die folgenden Tabellen werden in der Publikationsdatenbank und den einzelnen Abonnementdatenbanken erstellt.

Tabelle Beschreibung

MSdynamicsnapshotjobs (Transact-SQL)

Enthält Informationen zu Snapshotaufträgen für Publikationen mit parametrisierten Filtern.

MSdynamicsnapshotviews (Transact-SQL)

Verfolgt alle temporären Snapshotsichten nach, die der Snapshot-Agent erstellt hat. Wird vom System für einen Cleanup der Sichten verwendet, wenn der SQL Server-Agent oder der Snapshot-Agent nicht normal heruntergefahren wurde.

MSmerge_altsyncpartners (Transact-SQL)

Verfolgt nach, welche aktuellen Synchronisierungspartner einem Verleger zugeordnet sind.

MSmerge_articlehistory (Transact-SQL)

Verfolgt Änderungen an Artikeln nach, die der Merge-Agent während einer Synchronisierungssitzung vorgenommen hat. Für jeden geänderten Artikel wird jeweils eine Zeile aufgenommen.

MSmerge_conflicts_info (Transact-SQL)

Verfolgt Konflikte nach, die beim Synchronisieren eines Abonnements mit einer Mergepublikation auftreten.

MSmerge_contents (Transact-SQL)

Enthält eine Zeile für jede Zeile, die in der aktuellen Datenbank geändert wurde, seit diese veröffentlicht wurde. Diese Tabelle wird vom Mergeprozess verwendet, um die geänderten Zeilen zu ermitteln.

MSmerge_current_partition_mappings

Enthält eine Zeile für jede Partition, zu der eine bestimmte geänderte Zeile gehört.

MSmerge_dynamic_snapshots (Transact-SQL)

Verfolgt den Speicherort des Snapshots für jede Partition nach, die für eine Mergepublikation definiert ist.

MSmerge_errorlineage (Transact-SQL)

Enthält Zeilen, die auf dem Abonnenten gelöscht wurden, deren Löschung aber nicht an den Verleger weitergegeben wurde.

MSmerge_generation_partition_mappings (Transact-SQL)

Verfolgt nach, ob eine bestimmte Generierung Änderungen enthält, die für eine bestimmte Partition relevant sind.

MSmerge_genhistory (Transact-SQL)

Enthält eine Zeile für jede Generierung. Eine Generierung ist eine Auflistung von Änderungen, die an einen Verleger oder Abonnenten übermittelt wird. Generierungen werden bei jedem Ausführen des Merge-Agents geschlossen; anschließende Änderungen in einer Datenbank werden einer oder mehreren geöffneten Generierungen hinzugefügt.

MSmerge_history (Transact-SQL)

Enthält Verlaufszeilen mit genauen Beschreibungen der Ergebnisse vorheriger Auftragssitzungen des Merge-Agents.

MSmerge_identity_range (Transact-SQL)

Verfolgt die numerischen Bereiche nach, die Identitätsspalten für Publikationsabonnements zugewiesen sind, deren Bereichszuweisungen automatisch durch die Replikation verwaltet werden.

MSmerge_metadataaction_request (Transact-SQL)

Enthält eine Zeile für jede erforderliche kompensierende Aktion. Mit einer kompensierenden Aktion wird ein Rollback für eine Änderung an einem Knoten ausgeführt, falls die Änderung bei einem anderen Knoten einen Fehler verursacht.

MSmerge_partition_groups (Transact-SQL)

Enthält eine Zeile für jede vorausberechnete Partition in einer bestimmten Datenbank.

MSmerge_past_partition_mappings (Transact-SQL)

Enthält eine Zeile für jede Partition, zu der eine bestimmte geänderte Zeile einmal gehört hat, aber nicht länger gehört.

MSmerge_replinfo (Transact-SQL)

Enthält eine Zeile für jedes Abonnement. Diese Tabelle verfolgt interne Informationen zu gesendeten und empfangenen Generierungen nach.

MSmerge_sessions (Transact-SQL)

Enthält Verlaufszeilen mit den Ergebnissen vorheriger Auftragssitzungen des Merge-Agents.

MSmerge_settingshistory (Transact-SQL)

Enthält den Verlauf der Änderungen an Artikel- und Publikationseigenschaften. Für jede Änderung wird jeweils eine Zeile aufgenommen.

MSmerge_tombstone (Transact-SQL)

Enthält Informationen zu gelöschten Zeilen und lässt die Weitergabe von Löschvorgängen an andere Abonnenten zu.

MSrepl_errors (Transact-SQL)

Enthält genaue Informationen zu jedem Agentfehler.

sysmergearticles (Transact-SQL)

Enthält eine Zeile für jeden Mergeartikel.

sysmergepartitioninfo (Transact-SQL)

Enthält Informationen zu Partitionen für jeden Artikel. Für jeden Artikel wird jeweils eine Zeile aufgenommen.

sysmergepartitioninfoview (Transact-SQL)

Enthält Partitionsinformationen für Tabellenartikel.

sysmergepublications (Transact-SQL)

Enthält eine Zeile für jede Mergepublikation.

sysmergeschemaarticles (Transact-SQL)

Verfolgt Artikel vom Typ schema only nach, z. B. gespeicherte Prozeduren.

sysmergeschemachange (Transact-SQL)

Enthält Informationen zu den vom Snapshot-Agent generierten veröffentlichten Artikel.

sysmergesubscriptions (Transact-SQL)

Enthält eine Zeile für jeden Abonnent.

sysmergesubsetfilters (Transact-SQL)

Enthält Informationen zu Verknüpfungsfiltern für partitionierte Artikel.

Außerdem wird die MSsnapshotdeliveryprogress-Tabelle in jeder Abonnementdatenbank erstellt, und die MSsubscription_properties-Tabelle wird in jeder Abonnementdatenbank erstellt, die ein Pullabonnement aufweist:

Tabelle Beschreibung

MSsnapshotdeliveryprogress (Transact-SQL)

Verfolgt die Dateien nach, die beim Anwenden eines Snapshots erfolgreich an den Abonnenten übermittelt wurden. Mithilfe dieser Daten wird die Übermittlung der Dateien fortgesetzt, falls der Merge-Agent in einer Sitzung nicht alle Dateien übermitteln konnte.

MSsubscription_properties (Transact-SQL)

Enthält die Parameter, die zum Ausführen von Replikations-Agents für den Abonnenten erforderlich sind.

Siehe auch

Konzepte

Funktionsweise der Mergereplikation

Andere Ressourcen

sp_addmergearticle (Transact-SQL)
sp_addmergepublication (Transact-SQL)
sp_addpublication_snapshot (Transact-SQL)
sp_replicationdboption (Transact-SQL)

Hilfe und Informationen

Informationsquellen für SQL Server 2005