Freigeben über


Neuerieren von benutzerdefinierten Transaktionsprozeduren, um Schemaänderungen widerzuspiegeln

Standardmäßig nimmt die Transaktionsreplikation alle Datenänderungen bei Abonnenten durch gespeicherte Prozeduren vor, die von internen Prozeduren für jedes Tabellenobjekt in der Veröffentlichung generiert werden. Die drei Prozeduren (je eine für Einfügungen, Aktualisierungen und Löschvorgänge) werden zum Abonnenten kopiert und ausgeführt, sobald ein Einfügen, Aktualisieren oder Löschen zum Abonnenten repliziert wird. Wenn eine Schemaänderung an einer Tabelle in einem SQL Server Publisher vorgenommen wird, generiert die Replikation diese Prozeduren automatisch, indem sie denselben Satz interner Skriptprozeduren aufrufen, sodass die neuen Prozeduren mit dem neuen Schema übereinstimmen (die Replikation von Schemaänderungen wird für Oracle-Herausgeber nicht unterstützt).

Es ist auch möglich, benutzerdefinierte Prozeduren anzugeben, um eine oder mehrere der Standardprozeduren zu ersetzen. Die benutzerdefinierten Prozeduren sollten geändert werden, wenn sich die Schemaänderung auf die 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 Option besteht darin, eine benutzerdefinierte Skriptprozedur zu verwenden, um die von der Replikation verwendeten Standardwerte zu ersetzen:

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

    2. Führen Sie sp_register_custom_scripting (Transact-SQL) aus, und geben Sie einen Wert von "insert", "update" oder "delete" für den Parameter @type und den Namen der benutzerdefinierten Skriptprozedur für den Parameter @value 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 Option besteht darin, ein Skript zu verwenden, das eine neue benutzerdefinierte Prozedurdefinition enthält:

    1. Wenn Sie sp_addarticle (Transact-SQL) ausführen, legen Sie die @schema_option 0x02 Bit auf "false" fest, sodass die Replikation keine benutzerdefinierten Prozeduren beim Abonnenten generiert.

    2. Erstellen Sie vor jeder Schemaänderung eine neue Skriptdatei, und registrieren Sie das Skript mit der Replikation, indem Sie sp_register_custom_scripting (Transact-SQL) ausführen. Geben Sie einen Wert von 'custom_script' für den Parameter @type und den Pfad zum Skript in Publisher für den Parameter @value 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. Sie müssen das Skript erneut registrieren, damit es nach einer nachfolgenden Schemaänderung ausgeführt wird.

Siehe auch

Angeben, wie Änderungen für Transaktionsartikel weitergegeben werden
Vornehmen von Schemaänderungen in Veröffentlichungsdatenbanken