適用対象:SQL Server
Azure SQL Managed Instance
このトピックでは、SQL Server Management Studio (SSMS) または Transact-SQL (T-SQL) を使用して、SQL Server のトランザクション アーティクルへのデータの変更の反映方法を設定する方法について説明します。
既定では、トランザクション レプリケーションは、各アーティクルのストアド プロシージャ セットを使用して変更内容をサブスクライバーに反映します。 これらのプロシージャはカスタム プロシージャに置換することができます。 詳細については、「トランザクション アーティクルに変更を反映する方法の指定」を参照してください。
制限事項と制約事項
- レプリケーションによって生成されたスナップショット ファイルを編集する場合には注意が必要です。 カスタム ストアド プロシージャのカスタム ロジックをテストしてサポートします。 Microsoft ではカスタム ロジックはサポートされていません。
SQL Server Management Studio を使用する
反映方法は、新規パブリケーション ウィザードおよび > ダイアログ ボックスで使用できる > ダイアログ ボックスの [プロパティ] タブで指定します。 ウィザードの使用およびダイアログ ボックスへのアクセスの詳細については、「パブリケーションの作成」および「View and Modify Publication Properties」 (パブリケーション プロパティの表示および変更) を参照してください。
反映方法を指定するには
パブリケーションの新規作成ウィザードの [アーティクル] ページ、または [パブリケーションのプロパティ - <パブリケーション>] ダイアログ ボックスでテーブルを選択し、 [アーティクルのプロパティ] を選択します。
選択した表記事のプロパティを設定 を選択します。
[] ダイアログ ボックスの [<] セクションで、>配信形式、配信形式、およびINSERTUPDATEメニューを使用して、各操作の伝達方法を指定します。
[OK] を選択します。
[パブリケーションのプロパティ - <パブリケーション]> ダイアログ ボックスが表示されている場合は、OK を選択して保存し、ダイアログ ボックスを閉じます。
カスタム ストアド プロシージャを生成して使用するには
パブリケーションの新規作成ウィザードの [アーティクル] ページ、または [パブリケーションのプロパティ - <パブリケーション>] ダイアログ ボックスでテーブルを選択し、 [アーティクルのプロパティ] を選択します。
選択した表記事のプロパティを設定 を選択します。
Properties タブのArticle Properties - ダイアログ ボックスで、Article Statement Delivery セクションの適切な配信形式メニュー( 、配信形式 、または配信形式 )から CALL 構文を選択し、次に配信形式 、ストアド プロシージャ 、またはストアド プロシージャ に、使用するプロシージャの名前を入力します。 CALL 構文の詳細については、「トランザクション アーティクルに変更を反映する方法の指定」の「ストアド プロシージャの呼び出し構文」を参照してください。ストアド プロシージャ [OK] を選択します。
[パブリケーションのプロパティ - <パブリケーション]> ダイアログ ボックスが表示されている場合は、OK を選択して保存し、ダイアログ ボックスを閉じます。
パブリケーションのスナップショットが生成されると、そのスナップショットには前の手順で指定したプロシージャが含まれています。 このプロシージャは指定した CALL 構文を使用しますが、レプリケーションが使用する既定のロジックを含んでいます。
スナップショットが生成された後、このアーティクルが属するパブリケーションのスナップショット フォルダーに移動し、アーティクルと同じ名前の .sch ファイルを見つけます。 メモ帳または別のテキスト エディターを使用してこのファイルを開き、ストアド プロシージャの挿入、更新、または削除の CREATE PROCEDURE コマンドを見つけて、プロシージャ定義を編集して、データ変更を反映するためのカスタム ロジックを指定します。 スナップショットが再生成された場合は、カスタム プロシージャを再作成する必要があります。
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 コマンドとしてサブスクライバーに複製されます。
詳しくは、「 アーティクルを定義」をご覧ください。
データ変更を反映しないアーティクルを作成するには
パブリッシャー側のパブリケーション データベースに対して、 sp_addarticleを実行します。 @publication、 @article、および @source_objectに、それぞれ、アーティクルが属しているパブリケーションの名前、アーティクルの名前、および、パブリッシュ対象のデータベース オブジェクトを指定し、さらに、次のパラメーターの少なくとも 1 つに NONE を指定します。
@ins_cmd - INSERT コマンドのレプリケーションを制御します。
@upd_cmd - UPDATE コマンドのレプリケーションを制御します。
@del_cmd - DELETE コマンドのレプリケーションを制御します。
注
上記のパラメーターに対して NONE を指定すると、対応するコマンドはサブスクライバーにレプリケートされません。
詳しくは、「 アーティクルを定義」をご覧ください。
ユーザーが変更したカスタム ストアド プロシージャを含むアーティクルを作成するには
パブリッシャー側のパブリケーション データベースに対して、 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 の各構文の詳細については、「トランザクション アーティクルに変更を反映する方法の指定」を参照してください。
詳しくは、「 アーティクルを定義」をご覧ください。
スナップショットが生成された後、このアーティクルが属するパブリケーションのスナップショット フォルダーに移動し、アーティクルと同じ名前の .sch ファイルを見つけます。 Notepad.exeを使用してこのファイルを開き、ストアド プロシージャの挿入、更新、または削除の CREATE PROCEDURE コマンドを見つけて、プロシージャ定義を編集して、データ変更を伝達するためのカスタム ロジックを指定します。 詳細については、「トランザクション アーティクルに変更を反映する方法の指定」を参照してください。
カスタム ストアド プロシージャにデータ変更を反映するカスタム スクリプトを含むアーティクルを作成するには
パブリッシャー側のパブリケーション データベースに対して、 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 の各構文の詳細については、「トランザクション アーティクルに変更を反映する方法の指定」を参照してください。
詳しくは、「 アーティクルを定義」をご覧ください。
パブリケーション データベースのPublisherで、ALTER PROCEDURE ステートメントを使用してsp_scriptpublicationcustomprocsを編集し、カスタム ストアド プロシージャの挿入、更新、および削除のCREATE PROCEDURE スクリプトを返します。 詳細については、「トランザクション アーティクルに変更を反映する方法の指定」を参照してください。
既存のアーティクルの変更反映メソッドを変更するには
パブリッシャーのパブリケーション データベースで sp_changearticleを実行します。 @publicationと @articleを指定して、 @propertyに ins_cmd、 upd_cmd 、または del_cmdを指定し、さらに、該当する反映メソッドを @valueに指定します。
変更対象の各反映メソッドについて、手順 1. を繰り返します。