トランザクション アーティクルに対するデータ変更の反映メソッドを設定する方法 (レプリケーション Transact-SQL プログラミング)
既定では、変更をサブスクライバに反映するためのストアド プロシージャがレプリケーションによって自動的に生成されます。トランザクション レプリケーションでは、パブリッシャからサブスクライバへの変更の反映方法を制御できます。この反映メソッドは、アーティクルの作成時やその後の変更時に、レプリケーションのストアド プロシージャを使用してプログラムから設定できます。
メモ : |
---|
パブリッシュされたデータ行に適用される DML (データ操作言語) 操作には、挿入、更新、削除などがありますが、各種の操作に対して異なる反映メソッドを指定できます。 |
詳細については、「トランザクション アーティクルに変更を反映する方法の指定」を参照してください。
データ変更を Transact-SQL コマンドを使って反映するアーティクルを作成するには
パブリッシャ側のパブリケーション データベースに対して、sp_addarticle を実行します。@publication、@article、および @source_object に、それぞれ、アーティクルが属しているパブリケーションの名前、アーティクルの名前、および、パブリッシュ対象のデータベース オブジェクトを指定し、さらに、次のパラメータの少なくとも 1 つに SQL を指定します。
- @ins_cmd - INSERT コマンドのレプリケーションを制御します。
- @upd_cmd - UPDATE コマンドのレプリケーションを制御します。
- @del_cmd - DELETE コマンドのレプリケーションを制御します。
メモ : 上記のパラメータに対して SQL を指定すると、各種のコマンドが適切な Transact-SQL コマンドとしてサブスクライバにレプリケートされます。 詳細については、「アーティクルを定義する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。
データ変更を反映しないアーティクルを作成するには
パブリッシャ側のパブリケーション データベースに対して、sp_addarticle を実行します。@publication、@article、および @source_object に、それぞれ、アーティクルが属しているパブリケーションの名前、アーティクルの名前、および、パブリッシュ対象のデータベース オブジェクトを指定し、さらに、次のパラメータの少なくとも 1 つに NONE を指定します。
- @ins_cmd - INSERT コマンドのレプリケーションを制御します。
- @upd_cmd - UPDATE コマンドのレプリケーションを制御します。
- @del_cmd - DELETE コマンドのレプリケーションを制御します。
メモ : 上記のパラメータに対して NONE を指定すると、対応するコマンドはサブスクライバにレプリケートされません。 詳細については、「アーティクルを定義する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。
ユーザーが変更したカスタム ストアド プロシージャを含むアーティクルを作成するには
パブリッシャ側のパブリケーション データベースに対して、sp_addarticle を実行します。@publication、@article、および @source_object に、それぞれ、アーティクルが属しているパブリケーションの名前、アーティクルの名前、および、パブリッシュ対象のデータベース オブジェクトを指定します。さらに、@schema_option にビットマスク 0x02 を指定し、次のいずれかのパラメータを指定します。
- @ins_cmd - CALL sp_MSins_article_name を指定します。ここで、article_name は @article に指定した値です。
- @del_cmd - CALL sp_MSdel_article_name または XCALL sp_MSdel_article_name 値を指定します。ここで、article_name は @article に指定した値です。
- @upd_cmd - SCALL sp_MSupd_article_name、CALL sp_MSupd_article_name、XCALL sp_MSupd_article_name、または MCALL sp_MSupd_article_name を指定します。ここで、article_name は @article に指定した値です。
メモ : 上記コマンド パラメータのそれぞれについて、レプリケーションによって生成されるストアド プロシージャに独自の名前を指定できます。 メモ : CALL、SCALL、XCALL、MCALL の各構文の詳細については、「トランザクション アーティクルに変更を反映する方法の指定」を参照してください。 詳細については、「アーティクルを定義する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。
スナップショットが生成された後、このアーティクルが属するパブリケーションのスナップショット フォルダに移動し、アーティクルと同じ名前の .sch ファイルを見つけます。このファイルを Notepad.exe で開き、挿入、更新、削除のストアド プロシージャに対応する CREATE PROCEDURE コマンドを見つけ、そのプロシージャ定義を編集して、データ変更を反映するためのカスタム ロジックを指定します。詳細については、「トランザクション アーティクルに変更を反映する方法の指定」を参照してください。
注意 : レプリケーションによって生成されたスナップショット ファイルを編集する場合には注意が必要です。カスタム ストアド プロシージャのカスタム ロジックは自分でテストおよびサポートする必要があります。Microsoft では、カスタム ロジックに対するサポートは提供していません。
カスタム ストアド プロシージャにデータ変更を反映するカスタム スクリプトを含むアーティクルを作成するには
パブリッシャ側のパブリケーション データベースに対して、sp_addarticle を実行します。@publication、@article、および @source_object に、それぞれ、アーティクルが属しているパブリケーションの名前、アーティクルの名前、および、パブリッシュ対象のデータベース オブジェクトを指定します。さらに、@schema_option にビットマスク 0x02 (カスタム ストアド プロシージャの自動生成を有効にする) を指定し、次のいずれかのパラメータを指定します。
- @ins_cmd - CALL sp_MSins_article_name を指定します。ここで、article_name は @article に指定した値です。
- @del_cmd - CALL sp_MSdel_article_name または XCALL sp_MSdel_article_name を指定します。ここで、article_name は @article に指定した値です。
- @upd_cmd - SCALL sp_MSupd_article_name、CALL sp_MSupd_article_name、XCALL sp_MSupd_article_name、MCALL sp_MSupd_article_name を指定します。ここで、article_name は @article に指定した値です。
メモ : 上記コマンド パラメータのそれぞれについて、レプリケーションによって生成されるストアド プロシージャに独自の名前を指定できます。 メモ : CALL、SCALL、XCALL、MCALL の各構文の詳細については、「トランザクション アーティクルに変更を反映する方法の指定」を参照してください。 詳細については、「アーティクルを定義する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。
パブリッシャのパブリケーション データベースで、ALTER PROCEDURE ステートメントを使用して、挿入、更新、および削除のカスタム ストアド プロシージャに対応する CREATE PROCEDURE スクリプトが返されるように sp_scriptpublicationcustomprocs を編集します。詳細については、「トランザクション アーティクルに変更を反映する方法の指定」を参照してください。
注意 : sp_scriptpublicationcustomprocs を編集する場合には注意が必要です。このストアド プロシージャのカスタム ロジックは自分でテストおよびサポートする必要があります。Microsoft では、カスタム ロジックまたはシステム ストアド プロシージャへの変更に対するサポートは提供していません。
既存のアーティクルの変更反映メソッドを変更するには
パブリッシャのパブリケーション データベースで sp_changearticle を実行します。@publication と @article を指定して、@property に ins_cmd、upd_cmd、または del_cmd を指定し、さらに、該当する反映メソッドを @value に指定します。
変更対象の各反映メソッドについて、手順 1. を繰り返します。