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

適用対象: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. [] ダイアログ ボックスの [<] セクションで、>配信形式、配信形式、およびINSERTUPDATEメニューを使用して、各操作の伝達方法を指定します。

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

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

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

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

  2. 選択した表記事のプロパティを設定 を選択します。

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

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

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

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

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

Transact-SQL の使用

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

注

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

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

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

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

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

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

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

    注

    上記のいずれかのパラメーターに SQL の値を指定すると、その種類のコマンドは、適切な Transact-SQL コマンドとしてサブスクライバーに複製されます。

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

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

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

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

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

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

    注

    上記のパラメーターに対して 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_name、 CALL sp_MSupd_article_name、 XCALL sp_MSupd_article_name、または MCALL sp_MSupd_article_name を指定します。ここで、 article_name は @article に指定した値です。

    注

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

    注

    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_name、 CALL sp_MSupd_article_name、 XCALL sp_MSupd_article_name、 MCALL sp_MSupd_article_name を指定します。ここで、 article_name は @article に指定した値です。

    注

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

    注

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

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

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

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

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

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