Erneutes Generieren von Transaktionsprozeduren zur Erfassung von Schemaänderungen

Änderungen von Daten auf den Abonnenten werden bei der Transaktionsreplikation standardmäßig mithilfe von gespeicherten Prozeduren vorgenommen, die durch interne Prozeduren für jeden Tabellenartikel in der Veröffentlichung generiert werden. Die drei Prozeduren (eine für Einfügungen, eine für Aktualisierungen und eine für Löschungen) werden auf den Abonnenten kopiert und ausgeführt, wenn eine Einfügung, Aktualisierung oder Löschung auf den Abonnenten repliziert wird. Wenn bei einer Tabelle auf einem SQL Server-Verleger eine Schemaänderung vorgenommen wird, werden diese Prozeduren bei der Replikation automatisch erneut generiert, indem derselbe Satz interner Skriptprozeduren aufgerufen wird, damit die neuen Prozeduren dem neuen Schema entsprechen (die Replikation von Schemaänderungen wird bei Oracle-Verlegern nicht unterstützt).

Es ist auch möglich, benutzerdefinierte Prozeduren anzugeben, die an die Stelle einer oder mehrerer Standardprozedur(en) treten. Benutzerdefinierte Prozeduren müssen immer dann geändert werden, wenn sich die Schemaänderung auf die jeweilige Prozedur auswirkt. Wenn eine Prozedur z. B. auf eine Spalte verweist, die in einer Schemaänderung gelöscht wurde, müssen die Verweise auf diese Spalte aus der Prozedur entfernt werden. Für die Weitergabe einer neuen benutzerdefinierten Prozedur an Abonnenten durch Replikation gibt es die folgenden beiden Möglichkeiten:

  • Die erste Möglichkeit besteht in der Verwendung einer benutzerdefinierten Skriptprozedur zum Ersetzen der von der Replikation verwendeten Standardprozeduren:

    1. Stellen Sie beim Ausführen von sp_addarticle (Transact-SQL) sicher, dass für das @schema_option-0x02-Bit true festgelegt ist.

    2. Führen Sie sp_register_custom_scripting (Transact-SQL) aus, und geben Sie für den @type-Parameter 'insert', 'update' oder 'delete' und für den @value-Parameter den Namen der benutzerdefinierten Skriptprozedur an.

    Wenn das nächste Mal eine Schemaänderung vorgenommen wird, ruft die Replikation diese gespeicherte Prozedur auf, um die Definition für die neue benutzerdefinierte gespeicherte Prozedur auszugeben. Anschließend wird die Prozedur an die einzelnen Abonnenten weitergegeben.

  • Die zweite Möglichkeit besteht darin, ein Skript zu verwenden, das eine neue benutzerdefinierte Prozedurdefinition enthält:

    1. Legen Sie bei der Ausführung von sp_addarticle (Transact-SQL) für das @schema_option-0x02-Bit den Wert false fest, damit die Replikation nicht automatisch benutzerdefinierte Prozeduren auf dem Abonnenten generiert.

    2. Erstellen Sie vor jeder Schemaänderung eine neue Skriptdatei, und registrieren Sie das Skript bei der Replikation, indem Sie sp_register_custom_scripting (Transact-SQL) ausführen. Geben Sie für den @type-Parameter den Wert 'custom_script' und für den @value-Parameter den Pfad zum Skript auf dem Verleger an.

    Bei der nächsten relevanten Schemaänderung wird dieses Skript innerhalb derselben Transaktion wie der DDL-Befehl auf allen Abonnenten ausgeführt. Nach Abschluss der Schemaänderung wird die Registrierung des Skripts aufgehoben. Damit das Skript bei einer weiteren Schemaänderung wieder ausgeführt wird, müssen Sie es erneut registrieren.