sp_changemergearticle (Transact-SQL)
適用対象: SQL Server
マージ アーティクルのプロパティを変更します。 このストアド プロシージャは、パブリッシャー側のパブリケーション データベースで実行されます。
構文
sp_changemergearticle
[ @publication = ] N'publication'
, [ @article = ] N'article'
[ , [ @property = ] N'property' ]
[ , [ @value = ] N'value' ]
[ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
[ , [ @force_reinit_subscription = ] force_reinit_subscription ]
[ ; ]
引数
[ @publication = ] N'publication'
アーティクルが存在するパブリケーションの名前。 @publication は sysname で、既定値はありません。
[ @article = ] N'article'
変更するアーティクルの名前。 @article は sysname で、既定値はありません。
[ @property = ] N'property'
指定されたアーティクルとパブリケーションに対して変更するプロパティ。 @property は sysname であり、次の表に示す値のいずれかを指定できます。
[ @value = ] N'value'
対象となるプロパティの新しい値を指定します。 @value は nvarchar(2000)であり、次の表に示す値のいずれかを指定できます。
次の表では、アーティクルのプロパティとそれらのプロパティの値について説明します。
プロパティ | 値 | 説明 |
---|---|---|
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_tracking をfalse に設定すると、収束が行われなくなり、削除された行を手動で削除する必要があります。 |
|
description |
記事の説明的なエントリ。 | |
destination_owner |
サブスクリプション データベース内のオブジェクトの所有者の名前 ( dboではない場合)。 | |
identity_range |
アーティクルがauto に設定されている場合、またはauto_identity_range がtrue に設定 identityrangemanagementoption されている場合に、新しい ID 値を割り当てるときに使用する範囲サイズを指定する bigint。 テーブル アーティクルにのみ適用されます。 詳細については、「 ID 列のレプリケート」の「マージ レプリケーション」セクションを参照してください。 |
|
identityrangemanagementoption |
manual |
自動での ID 範囲の管理を無効にします。 NOT FOR REPLICATION を使用して ID 列をマークし、手動での ID 範囲の処理を有効にします。 詳細については、「Replicate Identity Columns」 (ID 列のレプリケート) を参照してください。 |
none |
すべての ID 範囲の管理を無効にします。 | |
logical_record_level_conflict_detection |
true |
論理レコード内の任意の場所に変更が加えられた場合、競合が検出されます。 logical_record_level_conflict_resolution が true に設定されている必要があります。 |
false |
既定の競合検出は、 column_tracking で指定されているように使用されます。 |
|
logical_record_level_conflict_resolution |
true |
勝った論理レコード全体が、失う論理レコードを上書きします。 |
false |
勝つ行は論理レコードに制限されません。 | |
partition_options |
0 |
アーティクルのフィルター処理は静的であるか、パーティションごとにデータの一意のサブセット (つまり、"重複する" パーティション) を生成しません。 |
1 |
パーティションは重複しており、サブスクライバーで行われた DML 更新では、行が属するパーティションを変更できません。 | |
2 |
アーティクルのフィルター処理では重複しないパーティションが生成されますが、複数のサブスクライバーが同じパーティションを受け取ることができます。 | |
3 |
この記事のフィルター処理により、サブスクリプションごとに一意の重複しないパーティションが生成されます。 注: partition_options に 3 の値を指定した場合、その記事のデータパーティションごとに 1 つのサブスクリプションしか存在できません。 新しいサブスクリプションのフィルター条件が既存のサブスクリプションと同じパーティションに解決される 2 つ目のサブスクリプションが作成されると、既存のサブスクリプションは削除されます。 |
|
pre_creation_command |
none |
テーブルがサブスクライバーに既に存在する場合、アクションは実行されません。 |
delete |
サブセット フィルターの WHERE 句に基づいて削除を発行します。 | |
drop |
テーブルを再作成する前に削除します。 | |
truncate |
コピー先テーブルを切り捨てます。 | |
processing_order |
マージ パブリケーション内のアーティクルの処理順序を示す int 。 | |
pub_identity_range |
アーティクルがauto に設定されている場合、またはauto_identity_range がtrue に設定されている場合に、サーバー サブスクリプションを identityrangemanagementoption 持つサブスクライバーに割り当てられる範囲サイズを指定する bigint。 この ID 範囲は、再パブリッシュ元のサブスクライバーが自らのサブスクライバーに割り当てるために予約されています。 テーブル アーティクルにのみ適用されます。 詳細については、「 ID 列のレプリケート」の「マージ レプリケーション」セクションを参照してください。 |
|
published_in_tran_pub |
true |
アーティクルはトランザクション パブリケーションにも発行されます。 |
false |
アーティクルはトランザクション パブリケーションにも発行されません。 | |
resolver_info |
カスタム リゾルバーに必要な追加情報を指定するために使用されます。 一部の Microsoft リゾルバーでは、リゾルバーへの入力として列が必要です。 resolver_info は nvarchar(255) で、既定値は NULL です。 詳細については、「 Advanced Merge Replication Conflict - 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 (9.x) で導入された大きなオブジェクト データ型 (nvarchar(max)、 varchar(max)、および varbinary(max)) を SQL Server 2000 (8.x) でサポートされているデータ型に変換します。 | |
0x40000000 |
アクセス許可をレプリケートします。 | |
0x80000000 |
パブリケーションに含まれていないオブジェクトへの依存関係の削除を試みます。 | |
0x100000000 |
fileSTREAM 属性が varbinary(max) 列で指定されている場合は、このオプションを使用してレプリケートします。 SQL Server 2005 (9.x) サブスクライバーにテーブルをレプリケートする場合は、このオプションを指定しないでください。 FILESTREAM 列を持つテーブルを SQL Server 2000 (8.x) サブスクライバーにレプリケートすることは、このスキーマ オプションの設定方法に関係なくサポートされていません。 関連するオプションの 0x800000000 を参照してください。 |
|
0x200000000 |
SQL Server 2008 (10.0.x) で導入された日付と時刻のデータ型 (date、 time、 datetimeoffset、および datetime2) を、以前のバージョンの SQL Server でサポートされているデータ型に変換します。 | |
0x400000000 |
データとインデックスの圧縮オプションをレプリケートします。 詳細については、「データ圧縮」を参照してください。 | |
0x800000000 |
このオプションを設定すると、サブスクライバーの独自のファイル グループに FILESTREAM データを格納できます。 このオプションが設定されていない場合、FILESTREAM データは既定のファイル グループに格納されます。 レプリケーションではファイル グループは作成されません。そのため、このオプションを設定する場合は、サブスクライバーでスナップショットを適用する前にファイル グループを作成する必要があります。 スナップショットを適用する前にオブジェクトを作成する方法の詳細については、「 スナップショットが適用される前と後のスクリプトの実行」を参照してください。 関連するオプションの 0x100000000 を参照してください。 |
|
0x1000000000 |
共通言語ランタイム (CLR) ユーザー定義型 (UDT) を varbinary(max) に変換して、SQL Server 2005 (9.x) を実行しているサブスクライバーに UDT 型の列をレプリケートできるようにします。 | |
0x2000000000 |
hierarchyid データ型を varbinary(max) に変換し、hierarchyid 型の列を SQL Server 2005 (9.x) を実行しているサブスクライバーにレプリケートできるようにします。 レプリケート テーブルで hierarchyid 列を使用する方法の詳細については、「 hierarchyid データ型メソッドリファレンスを参照してください。 | |
0x4000000000 |
フィルター処理されたインデックスをテーブルにレプリケートします。 フィルター選択されたインデックスについて詳しくは、「フィルター選択されたインデックスの作成」を参照してください。 | |
0x8000000000 |
geographyおよび geometry データ型を varbinary(max) に変換して、SQL Server 2005 (9.x) を実行しているサブスクライバーにこれらの型の列をレプリケートできるようにします。 | |
0x10000000000 |
geography および geometry 型の列にインデックスをレプリケートします。 | |
NULL |
システムは、記事の有効なスキーマ オプションを自動生成します。 | |
status |
active |
テーブルを発行する初期処理スクリプトが実行されます。 |
unsynced |
テーブルを発行する初期処理スクリプトは、次回スナップショット エージェントが実行されるときに実行されます。 | |
stream_blob_columns |
true |
バイナリ ラージ オブジェクトの列をレプリケートするときに、データ ストリームの最適化が使用されます。 ただし、論理レコードなどの特定のマージ レプリケーション機能では、ストリームの最適化が使用されない可能性があります。 stream_blob_columns FILESTREAM が有効な場合は true に設定されます。 これにより、FILESTREAM データのレプリケーションが最適に実行され、メモリ使用率が低下します。 FILESTREAM テーブルアーティクルで BLOB ストリーミングを使用しないようにするには、 stream_blob_columns を false に設定します。重要:このメモリ最適化を有効にすると、同期中にマージ エージェントのパフォーマンスが低下する可能性があります。 このオプションは、メガバイト単位のデータを含む列をレプリケートする場合にのみ使用してください。 |
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 以前のバージョンの SQL Server を実行しているサブスクライバーに使用されるパーセンテージ値。 threshold は、マージ エージェントが新しい ID 範囲を割り当てるタイミングを制御します。 しきい値で指定された値の割合を使用すると、マージ エージェントによって新しい ID 範囲が作成されます。 identityrangemanagementoption が auto に設定されている場合、またはauto_identity_range が true に設定されている場合に使用されます。 テーブル アーティクルにのみ適用されます。 詳細については、「 ID 列のレプリケート」の「マージ レプリケーション」セクションを参照してください。 |
|
verify_resolver_signature |
1 |
カスタム リゾルバーのデジタル署名が検証され、信頼できるソースからの署名であるかどうかを判断します。 |
0 |
カスタム リゾルバーのデジタル署名は、信頼できるソースからの署名かどうかを判断するために検証されません。 | |
NULL (既定) |
@propertyでサポートされている値の一覧を返します。 |
[ @force_invalidate_snapshot = ] force_invalidate_snapshot
このストアド プロシージャによって実行されたアクションによって、既存のスナップショットが無効になる可能性があることを確認します。 @force_invalidate_snapshot は ビットで、既定値は 0
です。
0
は、マージ アーティクルに対する変更によってスナップショットが無効になることがないように指定します。 ストアド プロシージャが変更に新しいスナップショットが必要であることを検出した場合、エラーが発生し、変更は行われません。1
は、マージ アーティクルを変更するとスナップショットが無効になる可能性があり、新しいスナップショットを必要とする既存のサブスクリプションがある場合は、既存のスナップショットを古いスナップショットとしてマークし、新しいスナップショットを生成するためのアクセス許可を付与します。
変更時に新しいスナップショットの生成が必要なプロパティについては、「 Remarks 」セクションを参照してください。
[ @force_reinit_subscription = ] force_reinit_subscription
このストアド プロシージャによって実行されるアクションで、既存のサブスクリプションの再初期化が必要になる可能性があることを確認します。 @force_reinit_subscription は bit で、既定値は 0
です。
0
は、マージ アーティクルに対する変更によってサブスクリプションが再初期化されないように指定します。 変更によって既存のサブスクリプションの再初期化が必要であることがストアド プロシージャによって検出された場合、エラーが発生し、変更は行われません。1
は、マージ アーティクルを変更すると、既存のサブスクリプションが再初期化され、サブスクリプションの再初期化が行われるアクセス許可が付与されることを意味します。
変更時に既存のすべてのサブスクリプションを再初期化する必要があるプロパティについては、「 Remarks 」セクションを参照してください。
リターン コードの値
0
(成功) または 1
(失敗)。
解説
sp_changemergearticle
はマージ レプリケーションで使用されます。
sp_changemergearticle
は、sp_addmergearticleを使用して最初に指定されたアーティクルプロパティを変更するために使用されるため、これらのプロパティの詳細については、sp_addmergearticleを参照してください。
次のプロパティを変更するには、新しいスナップショットが生成される必要があり、@force_invalidate_snapshot パラメーターに 1
の値を指定する必要があります。
check_permissions
column_tracking
destination_owner
pre_creation_command
schema_options
subset_filterclause
次のプロパティを変更するには、既存のサブスクリプションを再初期化する必要があり、@force_reinit_subscription パラメーターに 1
の値を指定する必要があります。
check_permissions
column_tracking
destination_owner
pre_creation_command
identityrangemanagementoption
subscriber_upload_options
subset_filterclause
creation_script
schema_option
logical_record_level_conflict_detection
logical_record_level_conflict_resolution
partition_options
に 3
の値を指定すると、マージ エージェントが実行され、パーティション スナップショットの有効期限がより早く切れるたびにメタデータがクリーンアップされます。 このオプションを使用する場合は、サブスクライバーが要求したパーティション スナップショットを有効にすることを検討する必要があります。 詳しくは、「 パラメーター化されたフィルターを使用したパブリケーションのスナップショットの作成」をご覧ください。
column_tracking
プロパティを設定するときに、テーブルが既に他のマージ パブリケーションでパブリッシュされている場合、列の追跡は、このテーブルに基づく既存のアーティクルで使用されている値と同じである必要があります。 このパラメーターは、テーブル アーティクルのみに固有のものです。
複数のパブリケーションが同じ基になるテーブルに基づいてアーティクルを発行する場合、1 つのアーティクルに対して delete_tracking
プロパティまたは compensate_for_errors
プロパティを変更すると、同じテーブルに基づく他のアーティクルに対して同じ変更が行われます。
マージ プロセスで使用されるパブリッシャー ログイン/ユーザー アカウントに適切なテーブル権限がない場合、無効な変更は競合としてログに記録されます。
schema_option
の値を変更しても、システムはビットごとの更新を実行しません。 つまり、sp_changemergearticle
を使用してschema_option
を設定すると、既存のビット設定がオフになる可能性があります。 既存の設定を保持するには、設定する値とschema_option
の現在の値の間で& (ビットごとの AND) を実行する必要があります。これは、sp_helpmergearticleの実行によって決定できます。
注意事項
パブリケーションに多数の (おそらく数百の) 記事があり、いずれかのアーティクルに対して sp_changemergearticle
を実行する場合、実行が完了するまでに時間がかかる場合があります。
有効なスキーマ オプション テーブル
次の表では、アーティクルの種類に応じて、許可される schema_option
値について説明します。
記事の種類 | スキーマ オプションの値 |
---|---|
func schema only |
0x01 および 0x2000 |
indexed view schema only |
0x01 、0x040 、0x0100 、0x2000 、0x40000 、0x1000000 、および 0x200000 |
proc schema only |
0x01 および 0x2000 |
table |
すべてのオプション。 |
view schema only |
0x01 、0x040 、0x0100 、0x2000 、0x40000 、0x1000000 、および 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 [AdventureWorks2022]
EXEC sp_changemergearticle
@publication = @publication,
@article = @article,
@property = N'column_tracking',
@value = N'true',
@force_invalidate_snapshot = 1,
@force_reinit_subscription = 1;
GO
アクセス許可
sysadmin固定サーバー ロールまたは固定データベース ロールdb_ownerのメンバーのみがsp_changemergearticle
を実行できます。