既定では、トランザクション レプリケーションでは、パブリケーション内の各テーブル アーティクルの内部プロシージャによって生成されるストアド プロシージャを使用して、サブスクライバーのすべてのデータ変更が行われます。 3 つのプロシージャ (挿入、更新、削除用にそれぞれ 1 つ) がサブスクライバーにコピーされ、挿入、更新、または削除がサブスクライバーにレプリケートされるときに実行されます。 SQL Server パブリッシャー上のテーブルにスキーマ変更が加えられた場合、レプリケーションでは、新しいプロシージャが新しいスキーマと一致するように、同じ一連の内部スクリプト プロシージャを呼び出すことによって、これらのプロシージャが自動的に再生成されます (Oracle パブリッシャーでは、スキーマ変更のレプリケーションはサポートされていません)。
1 つ以上の既定のプロシージャを置き換えるカスタム プロシージャを指定することもできます。 スキーマの変更がプロシージャに影響を与える場合は、カスタム プロシージャを変更する必要があります。 たとえば、スキーマ変更によって削除される列をプロシージャが参照している場合には、その列への参照をプロシージャから削除する必要があります。 レプリケーションで新しいカスタム プロシージャをサブスクライバーに反映するには、2 つの方法があります。
最初のオプションは、カスタム スクリプト プロシージャを使用して、レプリケーションで使用される既定値を置き換える方法です。
sp_addarticle (Transact-SQL) を実行するときは、@schema_option 0x02 ビットが true であることを確認します。
sp_register_custom_scripting (Transact-SQL) を実行し、パラメーター @typeの値として 'insert'、'update'、または 'delete' を指定し、パラメーター @valueのカスタム スクリプト プロシージャの名前を指定します。
次回にスキーマが変更されると、レプリケーションによってこのストアド プロシージャが呼び出され、新しくユーザーが定義したカスタム ストアド プロシージャの定義がスクリプト化されて、プロシージャが各サブスクライバーに反映されます。
2 つ目のオプションは、新しいカスタム プロシージャ定義を含むスクリプトを使用することです。
sp_addarticle (Transact-SQL) を実行するときは、サブスクライバーでレプリケーションによってカスタム プロシージャが自動的に生成されないように、@schema_option 0x02 ビットを false に設定します。
各スキーマを変更する前に、新しいスクリプト ファイルを作成し、 sp_register_custom_scripting (Transact-SQL) を実行してスクリプトをレプリケーションに登録します。 パラメーター @type に値 'custom_script' を指定し、パラメーター @value にパブリッシャーのスクリプトのパスを指定します。
次回に関連スキーマが変更されると、各サブスクライバーでは、DDL コマンドと同じトランザクション内でこのスクリプトが実行されます。 スキーマ変更が完了すると、スクリプトの登録が解除されます。 後続のスキーマ変更後にスクリプトを実行するには、スクリプトを再登録する必要があります。