sp_changemergearticle (Transact-SQL)

マージ アーティクルのプロパティを変更します。このストアド プロシージャは、パブリッシャ側でパブリケーション データベースについて実行されます。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

sp_changemergearticle [ @publication = ] 'publication'
        , [ @article = ] 'article'
    [ , [ @property = ] 'property' ]
    [ , [ @value = ] 'value' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]

引数

  • [ @publication=] 'publication'
    アーティクルが存在するパブリケーションの名前を指定します。publication のデータ型は sysname で、既定値はありません。

  • [ @article = ] 'article'
    変更するアーティクルの名前を指定します。article のデータ型は sysname で、既定値はありません。

  • [ @property=] 'property'
    指定したアーティクルとパブリケーションの変更対象となるプロパティを指定します。property のデータ型は nvarchar(30) で、表に記載されているいずれかの値を指定できます。

  • [ @value=] 'value'
    対象となるプロパティの新しい値を指定します。value のデータ型は nvarchar(1000) で、表に記載されているいずれかの値を指定できます。

    次の表に、アーティクルのプロパティと、それぞれの値を示します。

    プロパティ

    説明

    allow_interactive_resolver

    true

    アーティクルに対してインタラクティブ競合回避モジュールの使用を有効にします。

     

    false

    アーティクルに対してインタラクティブ競合回避モジュールの使用を無効にします。

    article_resolver

     

    アーティクルのカスタム競合回避モジュールです。テーブル アーティクルにのみ適用されます。

    check_permissions (ビットマップ)

    0x00

    テーブルレベルの権限は確認されません。

     

    0x10

    サブスクライバで実行された INSERT ステートメントをパブリッシャで適用する前に、テーブルレベルの権限がパブリッシャで確認されます。

     

    0x20

    サブスクライバで実行された UPDATE ステートメントをパブリッシャで適用する前に、テーブルレベルの権限がパブリッシャで確認されます。

     

    0x40

    サブスクライバで実行された DELETE ステートメントをパブリッシャで適用する前に、テーブルレベルの権限がパブリッシャで確認されます。

    column_tracking

    true

    列レベルの追跡を有効にします。テーブル アーティクルにのみ適用されます。

    注意注意
    列レベルの追跡は、パブリッシュ テーブルの列が 246 を超える場合は使用できません。

     

    false

    列レベルの追跡を無効にし、競合検出を行レベルのままにします。テーブル アーティクルにのみ適用されます。

    compensate_for_errors

    true

    同期中にエラーが発生したときに、補正操作が実行されます。詳細については、「sp_addmergearticle」を参照してください。

     

    false

    補正操作は実行されません。これは既定の動作です。詳細については、「sp_addmergearticle」を参照してください。

    重要な注意事項重要
    影響を受ける行のデータは収束されないように見えますが、エラーを解決すると、変更は直ちに適用可能となり、データは収束されます。アーティクルのソース テーブルが別のパブリケーションで既にパブリッシュされている場合、compensate_for_errors の値は、両方のアーティクルで同じであることが必要です。

    creation_script

     

    サブスクリプション データベースにアーティクルを作成する場合に使用される、オプションのアーティクル スキーマ スクリプトのパスと名前です。

    delete_tracking

    true

    DELETE ステートメントがレプリケートされます。これは既定の動作です。

     

    false

    DELETE ステートメントはレプリケートされません。

    重要な注意事項重要
    delete_trackingfalse に設定すると、データが収束されなくなるため、削除した行を手動で取り除く必要があります。

    description

     

    アーティクルを説明するエントリです。

    destination_owner

     

    dbo 以外の場合の、サブスクリプション データベース内にあるオブジェクトの所有者の名前です。

    identity_range

     

    データ型は bigint です。アーティクルの identityrangemanagementoptionauto に設定されているか、auto_identity_rangetrue に設定されている場合に、新しい ID 値を割り当てる範囲のサイズを指定します。テーブル アーティクルにのみ適用されます。詳細については、「ID 列のレプリケート」の「マージ レプリケーション」を参照してください。

    identityrangemanagementoption

    manual

    自動での ID 範囲の管理を無効にします。NOT FOR REPLICATION を使用して ID 列にマークを付け、手動による ID 範囲処理を有効にします。詳細については、「ID 列のレプリケート」を参照してください。

     

    none

    すべての ID 範囲の管理を無効にします。

    logical_record_level_conflict_detection

    true

    論理レコードの任意の場所で変更が行われた場合に、競合を検出します。logical_record_level_conflict_resolutiontrue に設定する必要があります。

     

    false

    column_tracking で指定されている既定の競合検出が使用されます。

    logical_record_level_conflict_resolution

    true

    優先される論理レコード全体で、優先されなかった論理レコードを上書きします。

     

    false

    優先される行は、論理レコードに制約されません。

    partition_options

    0

    アーティクルのフィルタ選択は、静的であるか、または各パーティションのデータの一意のサブセットを作成しません。つまり "重複する" パーティションになります。

     

    1

    パーティションは重複しています。サブスクライバで実行された DML 更新では、行が属するパーティションを変更できません。

     

    2

    アーティクルのフィルタ選択により、重複しないパーティションが生成されますが、複数のサブスクライバが同じパーティションを受け取ることができます。

     

    3

    アーティクルのフィルタ選択により、各サブスクリプションに対して、一意で重複しないパーティションが作成されます。

    注意注意
    partition_options に値 3 を指定した場合、該当するアーティクル内にあるデータの各パーティションに対して、単一のサブスクリプションのみを使用できます。第 2 のサブスクリプションを作成し、その新しいサブスクリプションのフィルタ選択条件が既存のサブスクリプションと同じパーティションとして判別される場合、既存のサブスクリプションは削除されます。

    pre_creation_command

    none

    サブスクライバに既にテーブルがある場合、操作は何も行われません。

     

    delete

    サブセット フィルタ内の WHERE 句に基づいて削除します。

     

    drop

    テーブルを再作成する前に削除します。

     

    truncate

    レプリケーション先テーブルを切り捨てます。

    processing_order

     

    データ型は int です。マージ パブリケーションでのアーティクルの処理順序を示します。

    pub_identity_range

     

    データ型は bigint です。アーティクルの identityrangemanagementoptionauto に設定されているか、auto_identity_rangetrue に設定されている場合に、サーバー サブスクリプションを使用してサブスクライバに割り当てる範囲のサイズを指定します。この ID 範囲は、再パブリッシュ元のサブスクライバが自らのサブスクライバに割り当てるために予約されています。テーブル アーティクルにのみ適用されます。詳細については、「ID 列のレプリケート」の「マージ レプリケーション」を参照してください。

    published_in_tran_pub

    true

    アーティクルはトランザクション パブリケーションでもパブリッシュされます。

     

    false

    アーティクルはトランザクション パブリケーションではパブリッシュされません。

    resolver_info

     

    カスタム競合回避モジュールが必要とする追加の情報の指定に使用します。一部の Microsoft 競合回避モジュールには、入力用の列が必要です。resolver_info のデータ型は nvarchar(255) で、既定値は NULL です。詳細については、「Microsoft COM ベースの競合回避モジュール」を参照してください。

    schema_option (ビットマップ)

    詳細については、後の「解説」を参照してください。

     

    0x00

    スナップショット エージェントによるスクリプト作成を無効にして、creation_script が提供するスクリプトを使用します。

     

    0x01

    オブジェクト作成スクリプト (CREATE TABLE、CREATE PROCEDURE など) を生成します。

     

    0x10

    対応するクラスタ化インデックスを生成します。

     

    0x20

    サブスクライバでユーザー定義データ型を基本データ型に変換します。ユーザー定義型 (UDT) 列に CHECK 制約または DEFAULT 制約があるときに、UDT 列が主キーの一部になっている場合、または計算列で UDT 列が参照されている場合、このオプションは使用できません。

     

    0x40

    対応する非クラスタ化インデックスを生成します。

     

    0x80

    宣言された参照整合性を主キーに含めます。

     

    0x100

    テーブル アーティクル上のユーザー トリガをレプリケートします (ユーザー トリガが定義されている場合)。

     

    0x200

    FOREIGN KEY 制約をレプリケートします。参照するテーブルがパブリケーションの一部でない場合は、パブリッシュされたテーブルのすべての FOREIGN KEY 制約がレプリケートされるわけではありません。

     

    0x400

    CHECK 制約をレプリケートします。

     

    0x800

    既定値をレプリケートします。

     

    0x1000

    列レベルの照合順序をレプリケートします。

     

    0x2000

    パブリッシュされたアーティクルのソース オブジェクトに関連付けられた拡張プロパティをレプリケートします。

     

    0x4000

    テーブル アーティクル上で定義されていれば、一意キーをレプリケートします。

     

    0x8000

    制約のスクリプトを作成しているときに ALTER TABLE ステートメントを生成します。

     

    0x10000

    CHECK 制約を NOT FOR REPLICATION としてレプリケートして、この制約が同期中に適用されないようにします。

     

    0x20000

    FOREIGN KEY 制約を NOT FOR REPLICATION としてレプリケートして、この制約が同期中に適用されないようにします。

     

    0x40000

    パーティション テーブルまたはインデックスに関連付けられているファイル グループをレプリケートします。

     

    0x80000

    パーティション テーブルのパーティション構成をレプリケートします。

     

    0x100000

    パーティション インデックスのパーティション構成をレプリケートします。

     

    0x200000

    テーブルの統計をレプリケートします。

     

    0x400000

    既定のバインドをレプリケートします。

     

    0x800000

    ルールのバインドをレプリケートします。

     

    0x1000000

    フルテキスト インデックスをレプリケートします。

     

    0x2000000

    xml 列にバインドされた XML スキーマ コレクションはレプリケートされません。

     

    0x4000000

    xml 列のインデックスをレプリケートします。

     

    0x8000000

    サブスクライバにまだ存在しないスキーマを作成します。

     

    0x10000000

    サブスクライバ上で xml 列を ntext に変換します。

     

    0x20000000

    SQL Server 2005 で導入されたラージ オブジェクト データ型 (nvarchar(max)、varchar(max)、および varbinary(max)) を、SQL Server 2000 でサポートされているデータ型に変換します。これらの型をマップする方法の詳細については、「レプリケーション トポロジにおける複数バージョンの SQL Server の使用」の「以前のバージョンに対する新しいデータ型のマッピング」を参照してください。

     

    0x40000000

    権限をレプリケートします。

     

    0x80000000

    パブリケーションの一部ではない任意のオブジェクトに対する依存関係の削除を試行します。

    0x100000000

    このオプションを使用すると、varbinary(max) 列に対して FILESTREAM 属性が指定されている場合にこの属性をレプリケートできます。テーブルを SQL Server 2005 サブスクライバにレプリケートする場合は、このオプションを指定しないでください。このスキーマ オプションがどのように設定されているかに関係なく、FILESTREAM 列を含むテーブルを SQL Server 2000 サブスクライバにレプリケートすることはサポートされていません。関連オプション 0x800000000 を参照してください。

    0x200000000

    SQL Server 2008 で導入された日付および時刻データ型 (date、time、datetimeoffset、および datetime2) を、以前のバージョンの SQL Server でサポートされているデータ型に変換します。これらの型をマップする方法の詳細については、「レプリケーション トポロジにおける複数バージョンの SQL Server の使用」の「以前のバージョンに対する新しいデータ型のマッピング」を参照してください。

    0x400000000

    データとインデックスの圧縮オプションをレプリケートします。詳細については、「圧縮されたテーブルおよびインデックスの作成」を参照してください。

    0x800000000

    このオプションを設定すると、サブスクライバの独自のファイル グループに FILESTREAM データを格納できます。このオプションが設定されていない場合、FILESTREAM データは既定のファイル グループに格納されます。レプリケーションではファイル グループは作成されないので、このオプションを設定する場合は、サブスクライバでスナップショットを適用する前にファイル グループを作成しておく必要があります。スナップショットを適用する前にオブジェクトを作成する方法の詳細については、「スナップショット適用前および適用後のスクリプトの実行」を参照してください。

    関連オプション 0x100000000 を参照してください。

    0x1000000000

    SQL Server 2005 を実行しているサブスクライバに UDT 型の列をレプリケートできるように、共通言語ランタイム (CLR) ユーザー定義型 (UDT) を varbinary(max) に変換します。

    0x2000000000

    SQL Server 2005 を実行しているサブスクライバに hierarchyid 型の列をレプリケートできるように、hierarchyid データ型を varbinary(max) に変換します。レプリケートされたテーブルで hierarchyid 列を使用する方法の詳細については、「hierarchyid (Transact-SQL)」を参照してください。

    0x4000000000

    テーブルのフィルタ選択されたインデックスをレプリケートします。フィルタ選択されたインデックスの詳細については、「フィルタ選択されたインデックスのデザイン ガイドライン」を参照してください。

     

    0x8000000000

    SQL Server 2005 を実行しているサブスクライバに geography 型および geometry 型の列をレプリケートできるように、これらのデータ型を varbinary(max) に変換します。

     

    0x10000000000

    geography 型と geometry 型の列のインデックスをレプリケートします。

     

    NULL

    システムによってアーティクルの有効なスキーマ オプションが自動生成されます。

    status

    active

    テーブルをパブリッシュするための初期処理スクリプトが実行されます。

     

    unsynced

    スナップショット エージェントが次回実行されるときに、テーブルをパブリッシュする初期処理スクリプトが実行されます。

    stream_blob_columns

    true

    バイナリ ラージ オブジェクトの列をレプリケートするときに、データ ストリームの最適化が使用されます。ただし、論理レコードなど、特定のマージ レプリケーション機能によって、ストリームの最適化の使用が妨げられる可能性があります。

    重要な注意事項重要
    このメモリ最適化を有効にすると、同期を行うときにマージ エージェントのパフォーマンスが低下する場合があります。このオプションは、数メガバイトに及ぶデータが含まれる列をレプリケートする場合にのみ使用してください。

     

    false

    バイナリ ラージ オブジェクトの列をレプリケートするときに、最適化が使用されません。

    subscriber_upload_options

    0

    クライアント サブスクリプションを使用したサブスクライバでの更新は、制限を受けません。変更はパブリッシャにアップロードされます。このプロパティを変更するには、既存のサブスクライバの再初期化が必要になる場合があります。

     

    1

    クライアント サブスクリプションを使用したサブスクライバでの変更は許可されますが、変更はパブリッシャにアップロードされません。

     

    2

    クライアント サブスクリプションを使用したサブスクライバでの変更は許可されません。

    subset_filterclause

     

    行方向のフィルタ選択を指定する WHERE 句です。テーブル アーティクルにのみ適用されます。

    重要な注意事項重要
    パラメータ化された行フィルタ句では列名に関数を適用しないことをお勧めします。これは、LEFT([MyColumn]) = SUSER_SNAME() のように指定すると、パフォーマンスに問題が生じるためです。フィルタ句に HOST_NAME を指定して HOST_NAME 値よりも優先的に使用する場合は、CONVERT を使ってデータ型を変換する必要があります。このようなケースのベスト プラクティスに関する詳細については、「パラメータ化された行フィルタ」の「HOST_NAME() 値の上書き」を参照してください。

    threshold

     

    SQL Server Compact 3.5 SP1 または以前のバージョンの SQL Server を実行しているサブスクライバで使用されるパーセンテージ値です。threshold によって、マージ エージェントがどの時点で新しい ID 範囲を割り当てるかが制御されます。threshold で指定されているパーセンテージ値が使用される場合、マージ エージェントは新しい ID 範囲を作成します。identityrangemanagementoptionauto に設定されているとき、または auto_identity_rangetrue に設定されているときに使用します。テーブル アーティクルにのみ適用されます。詳細については、「ID 列のレプリケート」の「マージ レプリケーション」を参照してください。

    verify_resolver_signature

    1

    カスタム競合回避モジュールのデジタル署名について、信頼されるソースからの署名であるかを判断するための検証を行います。

     

    0

    カスタム競合回避モジュールのデジタル署名について、信頼されるソースからの署名であるかを判断するための検証を行いません。

    NULL (既定値)

     

    property 用にサポートされている値の一覧を返します。

  • [ @force_invalidate_snapshot = ] force_invalidate_snapshot
    このストアド プロシージャが実行する操作によって既存のスナップショットが無効になることを許可します。force_invalidate_snapshot のデータ型は bit で、既定値は 0 です。

    0 に設定すると、マージ アーティクルへの変更によってスナップショットが無効になることはありません。変更に新しいスナップショットが必要であることをストアド プロシージャが検出すると、エラーが発生し、変更は行われません。

    1 に設定すると、マージ アーティクルの変更によってスナップショットが無効になることがあります。また、新しいスナップショットを必要とする既存のサブスクリプションがある場合は、既存のスナップショットに古いスナップショットのマークを付けて、新しいスナップショットを生成することができます。

    変更によって新しいスナップショットの生成が必要になるプロパティについては、「解説」を参照してください。

  • [ @force_reinit_subscription = ] force_reinit_subscription
    このストアド プロシージャが実行する操作によって、既存のサブスクリプションの再初期化が必要になることを許可します。force_reinit_subscription のデータ型は bit で、既定値は 0 です。

    0 に設定すると、マージ アーティクルへの変更によってサブスクリプションが再初期化されることはありません。変更に既存のサブスクリプションの再初期化が必要であることをストアド プロシージャが検出すると、エラーが発生し、変更は加えられません。

    1 は、マージ アーティクルの変更によって既存のサブスクリプションが再初期化されることを示し、サブスクリプションの再初期化を許可します。

    変更によって既存のサブスクリプションの再初期化が必要になるプロパティについては、「解説」を参照してください。

リターン コードの値

0 (成功) または 1 (失敗)

説明

sp_changemergearticle はマージ レプリケーションで使用します。

sp_changemergearticle は、sp_addmergearticle で最初に指定されたアーティクルのプロパティを変更する場合に使用されます。これらのプロパティの詳細については、「sp_addmergearticle」を参照してください。

次のプロパティを変更するには、新しいスナップショットを生成する必要があります。また force_invalidate_snapshot パラメータに値 1 を指定する必要があります。

  • check_permissions

  • column_tracking

  • destination_owner

  • pre_creation_cmd

  • schema_options

  • subset_filterclause

次のプロパティを変更するには、既存のサブスクリプションを再初期化する必要があります。また force_reinit_subscription パラメータに値 1 を指定する必要があります。

  • check_permissions

  • column_tracking

  • destination_owner

  • subscriber_upload_options

  • subset_filterclause

partition_options に 3 を指定すると、マージ エージェントが実行されるたびにメタデータがクリーンアップされ、パーティション スナップショットの有効期限が短くなります。このオプションを使用するときは、サブスクライバが要求したパーティション スナップショットを有効にすることを検討してください。詳細については、「パラメータ化されたフィルタを使用したマージ パブリケーションのスナップショット」を参照してください。

column_tracking プロパティを設定するときに、テーブルが他のマージ パブリケーションで既にパブリッシュされている場合は、列追跡の値を、このテーブルに基づく既存のアーティクルが使用している値と同じにする必要があります。このパラメータは、テーブル アーティクルのみに固有のものです。

同一のテーブルに基づいているアーティクルを、複数のパブリケーションがパブリッシュしている場合、1 つのアーティクルの delete_tracking プロパティまたは compensate_for_errors プロパティを変更すると、同じテーブルに基づいている他のアーティクルにも同じ変更が加えられます。

マージ処理が使用するパブリッシャのログインまたはユーザー アカウントが正しいテーブル権限を持っていない場合、無効な変更は競合としてログに記録されます。

schema_option の値を変更すると、ビットごとの更新は実行されません。つまり、sp_changemergearticle を使用して schema_option を設定すると、既存のビット設定が無効になる可能性があります。既存の設定を維持するには、設定する値と、schema_option の現在の値の間で、& (ビット演算子 AND) を実行する必要があります。schema_option の現在の値は、sp_helpmergearticle を実行することによって判断できます。

有効なスキーマ オプションの一覧

次の表に、アーティクルの種類に応じて許可される schema_option の値を示します。

アーティクルの種類

スキーマ オプションの値

func schema only

0x01 および 0x2000

indexed view schema only

0x010x0400x01000x20000x400000x1000000、および 0x200000

proc schema only

0x01 および 0x2000

table

すべてのオプション

view schema only

0x010x0400x01000x20000x400000x1000000、および 0x200000

使用例

DECLARE @publication AS sysname;
DECLARE @article AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @article = N'SalesOrderHeader';

-- Enable column-level conflict tracking.
-- Changing this property requires that existing subscriptions
-- be reinitialized and that a new snapshot be generated.
USE [AdventureWorks]
EXEC sp_changemergearticle 
  @publication = @publication,
  @article = @article, 
  @property = N'column_tracking', 
  @value = N'true',
  @force_invalidate_snapshot = 1,
  @force_reinit_subscription = 1;
GO

権限

sp_changemergearticle を実行できるのは、sysadmin 固定サーバー ロールまたは db_owner 固定データベース ロールのメンバだけです。