トランザクション アーティクル - 再生成によるスキーマ変更の反映

適用対象: SQL Server Azure SQL Managed Instance

既定では、トランザクション レプリケーションがサブスクライバー上のデータを変更する際、パブリケーション内の各テーブル アーティクルに対して内部プロシージャが生成したストアド プロシージャが必ず使われます。 3 つのプロシージャ (挿入、更新、削除用に 1 つずつ) はサブスクライバーにコピーされ、挿入、更新、削除がサブスクライバーにレプリケートされた時点で実行されます。 SQL Server パブリッシャー上のテーブルでスキーマが変更されると、レプリケーションによってスクリプト作成内部プロシージャの同じセットが呼び出され、これらのプロシージャが自動的に再生成されるため、新しいプロシージャと新しいスキーマが一致します (スキーマ変更のレプリケーションは、Oracle パブリッシャーではサポートされていません)。

カスタム プロシージャを指定して、1 つ以上の既定のプロシージャを置き換えることもできます。 スキーマ変更によってカスタム プロシージャが影響を受ける場合は、そのプロシージャを変更する必要があります。 たとえば、スキーマ変更によって削除される列をプロシージャが参照している場合には、その列への参照をプロシージャから削除する必要があります。 レプリケーションで新しいカスタム プロシージャをサブスクライバーに反映するには、2 つの方法があります。

  • 1 つ目のオプションは、カスタム スクリプト作成プロシージャを使用して、レプリケーションで使用する既定のプロシージャを置き換える方法です。

    1. sp_addarticle (Transact-SQL) を実行する場合は、@schema_option の 0x02 ビットを確実に true にします。

    2. sp_register_custom_scripting (Transact-SQL) を実行し、@type パラメーターには値 "insert"、"update"、または "delete" を、@value パラメーターにはカスタム スクリプト作成プロシージャの名前を指定します。

    次回にスキーマが変更されると、レプリケーションによってこのストアド プロシージャが呼び出され、新しくユーザーが定義したカスタム ストアド プロシージャの定義がスクリプト化されて、プロシージャが各サブスクライバーに反映されます。

  • 2 つ目のオプションは、新しいカスタム プロシージャの定義を含むスクリプトを使用する方法です。

    1. sp_addarticle (Transact-SQL) を実行するときに、@schema_option の 0x02 ビットを false に設定し、レプリケーションによってカスタム プロシージャがサブスクライバーで自動的に生成されないようにします。

    2. 各スキーマ変更の前に、新しいスクリプト ファイルを作成し、sp_register_custom_scripting (Transact-SQL) を実行してスクリプトをレプリケーションに登録します。 @type パラメーターの値として "custom_script" を指定し、@value パラメーターにパブリッシャー上のスクリプトのパスを指定します。

    次回に関連スキーマが変更されると、各サブスクライバーでは、DDL コマンドと同じトランザクション内でこのスクリプトが実行されます。 スキーマ変更が完了すると、スクリプトの登録が解除されます。 以降のスキーマ変更でこのスクリプトを実行するには、スクリプトを再登録する必要があります。