データの変更をトランザクション アーティクルに反映する方法を設定する

適用対象: SQL ServerAzure SQL Managed Instance

このトピックでは、SQL Server Management Studio (SSMS) または Transact-SQL (T-SQL) を使用して、SQL Server のトランザクション アーティクルへのデータの変更の反映方法を設定する方法について説明します。

既定では、トランザクション レプリケーションは、各アーティクルのストアド プロシージャ セットを使用して変更内容をサブスクライバーに反映します。 これらのプロシージャはカスタム プロシージャに置換することができます。 詳細については、「トランザクション アーティクルに変更を反映する方法の指定」を参照してください。

開始する前に

制限事項と制約事項

  • レプリケーションによって生成されたスナップショット ファイルを編集する場合には注意が必要です。 カスタム ストアド プロシージャのカスタム ロジックをテストしてサポートします。 Microsoft ではカスタム ロジックはサポートされていません。

SQL Server Management Studio を使用する

反映方法は、パブリケーションの新規作成ウィザードからアクセスできる [アーティクルのプロパティ - <アーティクル> ダイアログ ボックスおよび [パブリケーションのプロパティ - <パブリケーション]> ダイアログ ボックスの [プロパティ] タブで指定します。 ウィザードの使用およびダイアログ ボックスへのアクセスの詳細については、「パブリケーションの作成」および「View and Modify Publication Properties」 (パブリケーション プロパティの表示および変更) を参照してください。

反映方法を指定するには

  1. パブリケーションの新規作成ウィザードの [アーティクル] ページ、または [パブリケーションのプロパティ - <パブリケーション>] ダイアログ ボックスでテーブルを選択し、 [アーティクルのプロパティ] を選択します。

  2. [反転表示されたテーブル アーティクルのプロパティを設定] を選択します。

  3. [アーティクルのプロパティ - <アーティクル> ダイアログ ボックスの [プロパティ] タブの [ステートメントの配信] セクションで、[INSERT 配信形式][UPDATE 配信形式][DELETE 配信形式] の各メニューを使用して各操作の反映方法を指定します。

  4. [OK] を選択します。

  5. [パブリケーションのプロパティ - <パブリケーション]> ダイアログ ボックスが表示されている場合は、OK を選択して保存し、ダイアログ ボックスを閉じます。

カスタム ストアド プロシージャを生成して使用するには

  1. パブリケーションの新規作成ウィザードの [アーティクル] ページ、または [パブリケーションのプロパティ - <パブリケーション>] ダイアログ ボックスでテーブルを選択し、 [アーティクルのプロパティ] を選択します。

  2. [反転表示されたテーブル アーティクルのプロパティを設定] を選択します。

    [アーティクルのプロパティ - <アーティクル> ダイアログ ボックスの [プロパティ] タブの [ステートメントの配信] セクションで、該当する配信形式メニュー ([INSERT 配信形式][UPDATE 配信形式]、または [DELETE 配信形式]) から CALL 構文を選択し、[INSERT ストアド プロシージャ][DELETE ストアド プロシージャ]、または [UPDATE ストアド プロシージャ] で使用するプロシージャ名を入力します。 CALL 構文の詳細については、「トランザクション アーティクルに変更を反映する方法の指定」の「ストアド プロシージャの呼び出し構文」を参照してください。

  3. [OK] を選択します。

  4. [パブリケーションのプロパティ - <パブリケーション]> ダイアログ ボックスが表示されている場合は、OK を選択して保存し、ダイアログ ボックスを閉じます。

  5. パブリケーションのスナップショットが生成されると、そのスナップショットには前の手順で指定したプロシージャが含まれています。 このプロシージャは指定した CALL 構文を使用しますが、レプリケーションが使用する既定のロジックを含んでいます。

    スナップショットが生成された後、このアーティクルが属するパブリケーションのスナップショット フォルダーに移動し、アーティクルと同じ名前の .sch ファイルを見つけます。 メモ帳などのテキスト エディターでこのファイルを開き、挿入、更新、または削除の各ストアド プロシージャで CREATE PROCEDURE コマンドを検索し、プロシージャ定義を編集してデータの変更を反映するためのカスタム ロジックを指定します。 スナップショットが再生成された場合は、カスタム プロシージャを再作成する必要があります。

Transact-SQL の使用

トランザクション レプリケーションでは、パブリッシャーからサブスクライバーへの変更の反映方法を制御できます。この反映メソッドは、アーティクルの作成時やその後の変更時に、レプリケーションのストアド プロシージャを使用してプログラムから設定できます。

Note

パブリッシュされたデータ行に適用される DML (データ操作言語) 操作には、挿入、更新、削除などがありますが、各種の操作に対して異なる反映メソッドを指定できます。

詳細については、「トランザクション アーティクルに変更を反映する方法の指定」を参照してください。

データ変更を Transact-SQL コマンドを使って反映するアーティクルを作成するには

  1. パブリッシャー側のパブリケーション データベースに対して、 sp_addarticleを実行します。 @publication@article、および @source_objectに、それぞれ、アーティクルが属しているパブリケーションの名前、アーティクルの名前、および、パブリッシュ対象のデータベース オブジェクトを指定し、さらに、次のパラメーターの少なくとも 1 つに SQL を指定します。

    • @ins_cmd - INSERT コマンドのレプリケーションを制御します。

    • @upd_cmd - UPDATE コマンドのレプリケーションを制御します。

    • @del_cmd - DELETE コマンドのレプリケーションを制御します。

    Note

    上記のパラメーターに対して SQL を指定すると、各種のコマンドが適切な コマンドとしてサブスクライバーにレプリケートされます。

    詳しくは、「 アーティクルを定義」をご覧ください。

データ変更を反映しないアーティクルを作成するには

  1. パブリッシャー側のパブリケーション データベースに対して、 sp_addarticleを実行します。 @publication@article、および @source_objectに、それぞれ、アーティクルが属しているパブリケーションの名前、アーティクルの名前、および、パブリッシュ対象のデータベース オブジェクトを指定し、さらに、次のパラメーターの少なくとも 1 つに NONE を指定します。

    • @ins_cmd - INSERT コマンドのレプリケーションを制御します。

    • @upd_cmd - UPDATE コマンドのレプリケーションを制御します。

    • @del_cmd - DELETE コマンドのレプリケーションを制御します。

    Note

    上記のパラメーターに対して NONE を指定すると、対応するコマンドはサブスクライバーにレプリケートされません。

    詳しくは、「 アーティクルを定義」をご覧ください。

ユーザーが変更したカスタム ストアド プロシージャを含むアーティクルを作成するには

  1. パブリッシャー側のパブリケーション データベースに対して、 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_nameCALL sp_MSupd_article_nameXCALL sp_MSupd_article_name、または MCALL sp_MSupd_article_name を指定します。ここで、 article_name@article に指定した値です。

    Note

    上記コマンド パラメーターのそれぞれについて、レプリケーションによって生成されるストアド プロシージャに独自の名前を指定できます。

    Note

    CALL、SCALL、XCALL、MCALL の各構文の詳細については、「トランザクション アーティクルに変更を反映する方法の指定」を参照してください。

    詳しくは、「 アーティクルを定義」をご覧ください。

  2. スナップショットが生成された後、このアーティクルが属するパブリケーションのスナップショット フォルダーに移動し、アーティクルと同じ名前の .sch ファイルを見つけます。 このファイルを Notepad.exe で開き、挿入、更新、削除のストアド プロシージャに対応する CREATE PROCEDURE コマンドを見つけ、そのプロシージャ定義を編集して、データ変更を反映するためのカスタム ロジックを指定します。 詳細については、「トランザクション アーティクルに変更を反映する方法の指定」を参照してください。

カスタム ストアド プロシージャにデータ変更を反映するカスタム スクリプトを含むアーティクルを作成するには

  1. パブリッシャー側のパブリケーション データベースに対して、 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_nameCALL sp_MSupd_article_nameXCALL sp_MSupd_article_nameMCALL sp_MSupd_article_name を指定します。ここで、 article_name@article に指定した値です。

    Note

    上記コマンド パラメーターのそれぞれについて、レプリケーションによって生成されるストアド プロシージャに独自の名前を指定できます。

    Note

    CALL、SCALL、XCALL、MCALL の各構文の詳細については、「トランザクション アーティクルに変更を反映する方法の指定」を参照してください。

    詳しくは、「 アーティクルを定義」をご覧ください。

  2. パブリッシャーのパブリケーション データベースで、 ALTER PROCEDURE ステートメントを使用して、挿入、更新、および削除のカスタム ストアド プロシージャに対応する CREATE PROCEDURE スクリプトが返されるように sp_scriptpublicationcustomprocs を編集します。 詳細については、「トランザクション アーティクルに変更を反映する方法の指定」を参照してください。

既存のアーティクルの変更反映メソッドを変更するには

  1. パブリッシャーのパブリケーション データベースで sp_changearticleを実行します。 @publication@articleを指定して、 @propertyins_cmdupd_cmd 、または del_cmdを指定し、さらに、該当する反映メソッドを @valueに指定します。

  2. 変更対象の各反映メソッドについて、手順 1. を繰り返します。

関連項目