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

適用対象: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_nameCALL sp_MSupd_article_nameXCALL 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_nameCALL sp_MSupd_article_nameXCALL sp_MSupd_article_nameMCALL sp_MSupd_article_name を指定します。ここで、 article_name@article に指定した値です。

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

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

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

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

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

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

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