sp_addmergearticle (Transact-SQL)
適用対象: SQL Server Azure SQL Managed Instance
既存のマージ パブリケーションにアーティクルを追加します。 このストアド プロシージャは、パブリッシャー側のパブリケーション データベースで実行されます。
構文
sp_addmergearticle
[ @publication = ] N'publication'
, [ @article = ] N'article'
, [ @source_object = ] N'source_object'
[ , [ @type = ] N'type' ]
[ , [ @description = ] N'description' ]
[ , [ @column_tracking = ] N'column_tracking' ]
[ , [ @status = ] N'status' ]
[ , [ @pre_creation_cmd = ] N'pre_creation_cmd' ]
[ , [ @creation_script = ] N'creation_script' ]
[ , [ @schema_option = ] schema_option ]
[ , [ @subset_filterclause = ] N'subset_filterclause' ]
[ , [ @article_resolver = ] N'article_resolver' ]
[ , [ @resolver_info = ] N'resolver_info' ]
[ , [ @source_owner = ] N'source_owner' ]
[ , [ @destination_owner = ] N'destination_owner' ]
[ , [ @vertical_partition = ] N'vertical_partition' ]
[ , [ @auto_identity_range = ] N'auto_identity_range' ]
[ , [ @pub_identity_range = ] pub_identity_range ]
[ , [ @identity_range = ] identity_range ]
[ , [ @threshold = ] threshold ]
[ , [ @verify_resolver_signature = ] verify_resolver_signature ]
[ , [ @destination_object = ] N'destination_object' ]
[ , [ @allow_interactive_resolver = ] N'allow_interactive_resolver' ]
[ , [ @fast_multicol_updateproc = ] N'fast_multicol_updateproc' ]
[ , [ @check_permissions = ] check_permissions ]
[ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
[ , [ @published_in_tran_pub = ] N'published_in_tran_pub' ]
[ , [ @force_reinit_subscription = ] force_reinit_subscription ]
[ , [ @logical_record_level_conflict_detection = ] N'logical_record_level_conflict_detection' ]
[ , [ @logical_record_level_conflict_resolution = ] N'logical_record_level_conflict_resolution' ]
[ , [ @partition_options = ] partition_options ]
[ , [ @processing_order = ] processing_order ]
[ , [ @subscriber_upload_options = ] subscriber_upload_options ]
[ , [ @identityrangemanagementoption = ] N'identityrangemanagementoption' ]
[ , [ @delete_tracking = ] N'delete_tracking' ]
[ , [ @compensate_for_errors = ] N'compensate_for_errors' ]
[ , [ @stream_blob_columns = ] N'stream_blob_columns' ]
[ ; ]
引数
[ @publication = ] N'publication'
アーティクルを含むパブリケーションの名前。 @publication は sysname で、既定値はありません。
[ @article = ] N'article'
アーティクルの名前。 名前はパブリケーション内で一意であることが必要です。 @article は sysname で、既定値はありません。 @article は、SQL Server を実行しているローカル コンピューター上にあり、識別子の規則に準拠している必要があります。
[ @source_object = ] N'source_object'
パブリッシュするデータベース オブジェクト。 @source_object は sysname で、既定値はありません。 マージ レプリケーションを使用してパブリッシュできるオブジェクトの種類の詳細については、「データ オブジェクトとデータベース オブジェクトのパブリッシュを参照してください。
[ @type = ] N'type'
アーティクルの種類。 @type は sysname で、既定値は table
で、次のいずれかの値を指定できます。
値 | 説明 |
---|---|
table (既定値) |
スキーマとデータを含むテーブル。 レプリケーションはテーブルを監視して、レプリケートするデータを特定します。 |
func schema only |
スキーマのみの関数。 |
indexed view schema only |
スキーマのみを使用するインデックス付きビュー。 |
proc schema only |
スキーマのみを使用するストアド プロシージャ。 |
synonym schema only |
スキーマのみを使用するシノニム。 |
view schema only |
スキーマのみを使用するビュー。 |
[ @description = ] N'description'
記事の説明。 @description は nvarchar(255) で、既定値は NULL
です。
[ @column_tracking = ] N'column_tracking'
列レベルの追跡の設定。 @column_tracking は nvarchar(10) で、既定値は false
です。 false
は、列の追跡をオンにします。 false
は列の追跡をオフにし、競合の検出を行レベルのままにします。 テーブルが他のマージ レプリケーションで既にパブリッシュされている場合は、このテーブルに基づく既存のアーティクルが使用しているものと同じ列追跡値を使用する必要があります。 このパラメーターは、テーブル アーティクルのみに固有のものです。
Note
行レベルの追跡を使用して競合を検出する場合 (既定値)、ベース テーブルには最大 1,024 列含めることができますが、最大 246 列がパブリッシュされるようにアーティクルから列をフィルター選択する必要があります。 列の追跡を使用する場合、ベース テーブルには最大 246 列を含めることができます。
[ @status = ] N'status'
記事の状態。 @status は nvarchar(10) で、既定値は unsynced
です。 active
場合は、テーブルを発行する初期処理スクリプトが実行されます。 unsynced
場合、テーブルを発行する初期処理スクリプトは、次にスナップショット エージェントが実行されるときに実行されます。
[ @pre_creation_cmd = ] N'pre_creation_cmd'
スナップショットの適用時、サブスクライバーにテーブルが存在した場合にシステムが実行する処理を指定します。 @pre_creation_cmd は nvarchar(10)であり、次のいずれかの値を指定できます。
値 | 説明 |
---|---|
none |
テーブルがサブスクライバーに既に存在する場合、アクションは実行されません。 |
delete |
サブセット フィルターの WHERE 句に基づいて削除を発行します。 |
drop (既定) |
テーブルを再作成する前に削除します。 SQL Server Compact サブスクライバーをサポートするために必要です。 |
truncate |
コピー先テーブルを切り捨てます。 |
[ @creation_script = ] N'creation_script'
サブスクリプション データベースにアーティクルを作成するために使用するオプションのアーティクル スキーマ スクリプトのパスと名前。 @creation_script は nvarchar(255) で、既定値は NULL
です。
Note
作成スクリプトは、SQL Server Compact サブスクライバーでは実行されません。
[ @schema_option = ] schema_option
指定されたアーティクルのスキーマ生成オプションのビットマップ。 @schema_option は varbinary(8)であり、 することができます|(ビットごとの OR) これらの値の 1 つ以上の積。
値 | 説明 |
---|---|
0x00 |
スナップショット エージェントによるスクリプト作成を無効にし、@creation_scriptで定義されている指定されたスキーマ事前作成スクリプトを使用します。 |
0x01 |
オブジェクトの作成 (CREATE TABLE 、 CREATE PROCEDURE など) を生成します。 これは、ストアド プロシージャアーティクルの既定値です。 |
0x10 |
対応するクラスター化インデックスを生成します。 このオプションが設定されていない場合でも、主キーと UNIQUE 制約に関連するインデックスは、パブリッシュされたテーブルで既に定義されている場合に生成されます。 |
0x20 |
ユーザー定義データ型 (UDT) をサブスクライバーの基本データ型に変換します。 このオプションは、UDT 列に CHECK 制約または DEFAULT 制約がある場合、UDT 列が主キーの一部である場合、または計算列が UDT 列を参照している場合には使用できません。 |
0x40 |
対応する非クラスター化インデックスを生成します。 このオプションが設定されていない場合でも、主キーと UNIQUE 制約に関連するインデックスは、パブリッシュされたテーブルで既に定義されている場合に生成されます。 |
0x80 |
PRIMARY KEY 制約をレプリケートします。 オプション 0x10 と 0x40 が有効になっていない場合でも、制約に関連するインデックスもレプリケートされます。 |
0x100 |
定義されている場合、テーブル アーティクル上のユーザー トリガーをレプリケートします。 |
0x200 |
FOREIGN KEY 制約をレプリケートします。 参照先テーブルがパブリケーションの一部でない場合、パブリッシュされたテーブルのすべての FOREIGN KEY 制約はレプリケートされません。 |
0x400 |
CHECK 制約をレプリケートします。 |
0x800 |
既定値をレプリケートします。 |
0x1000 |
列レベルの照合順序をレプリケートします。 |
0x2000 |
パブリッシュされたアーティクル ソース オブジェクトに関連付けられている拡張プロパティをレプリケートします。 |
0x4000 |
UNIQUE 制約をレプリケートします。 オプション 0x10 と 0x40 が有効になっていない場合でも、制約に関連するインデックスもレプリケートされます。 |
0x8000 |
このオプションは、SQL Server 2005 (9.x) 以降のバージョンを実行しているパブリッシャーでは有効ではありません。 |
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
場合、アーティクルの有効なスキーマ オプションが自動生成されます。 Default スキーマ オプション テーブルには、アーティクルの種類に基づいて選択された値が表示されます。 また、すべての種類のレプリケーションとアーティクルの種類に対して、すべての @schema_option 値が有効なわけではありません。 Valid スキーマ オプション テーブルには、特定のアーティクルの種類に対して指定できるオプションが表示されます。
Note
@schema_option パラメーターは、初期スナップショットのレプリケーション オプションにのみ影響します。 スナップショット エージェントによって初期スキーマが生成され、サブスクライバーで適用されると、スキーマ変更レプリケーション 規則と、sp_addmergepublicationで指定された@replicate_ddl パラメーター設定に基づいて、サブスクライバーへのパブリケーション スキーマ変更のレプリケーションが行われます。 詳細については、「パブリケーション データベースでのスキーマの変更」を参照してください。
[ @subset_filterclause = ] N'subset_filterclause'
WHERE という単語を含まないテーブル アーティクルの水平方向のフィルター処理を指定する WHERE 句。 @subset_filterclause は nvarchar(1000)で、既定値は空の文字列です。
重要
パフォーマンス上の理由から、 LEFT([MyColumn]) = SUSER_SNAME()
などのパラメーター化された行フィルター句では、列名に関数を適用しないことをお勧めします。 フィルター句で HOST_NAME を使用し、 HOST_NAME
値をオーバーライドする場合は、 CONVERTを使用してデータ型を変換する必要があります。 この場合のベスト プラクティスの詳細については、「パラメーター化されたフィルター - パラメーター化された行フィルター」の「HOST_NAME() 値のオーバーライド」セクション 参照。
[ @article_resolver = ] N'article_resolver'
テーブル アーティクルまたはテーブル アーティクルでカスタム ビジネス ロジックを実行するために呼び出された .NET Framework アセンブリの競合を解決するために使用される COM ベースの競合回避モジュール。 @article_resolver は nvarchar(255) で、既定値は NULL
です。 このパラメーターで使用できる値は、Microsoft カスタム 競合回避モジュールに記載されています。 指定された値が Microsoft リゾルバーの 1 つでない場合、SQL Server はシステム提供のリゾルバーではなく、指定されたリゾルバーを使用します。 sp_enumcustomresolvers
を使用して、使用可能なカスタム リゾルバーの一覧を列挙します。 詳細については、「マージ同期中にビジネス ロジックを実行するとマージ レプリケーション - 競合の検出と解決を参照してください。
[ @resolver_info = ] N'resolver_info'
カスタム リゾルバーに必要な追加情報を指定するために使用されます。 一部の Microsoft リゾルバーでは、リゾルバーへの入力として列が必要です。 @resolver_info は nvarchar(517) で、既定値は NULL
です。 詳細については、「 Advanced Merge Replication Conflict - COM ベースの競合回避モジュールを参照してください。
[ @source_owner = ] N'source_owner'
@source_objectの所有者の名前。 @source_owner は sysname で、既定値は NULL
です。 NULL
場合、現在のユーザーは所有者であると見なされます。
[ @destination_owner = ] N'destination_owner'
サブスクリプション データベース内のオブジェクトの所有者 ( dbo
されていない場合)。 @destination_owner は sysname で、既定値は NULL
です。 NULL
場合、dbo
は所有者であると見なされます。
[ @vertical_partition = ] N'vertical_partition'
テーブル アーティクルの列フィルター処理を有効または無効にします。 @vertical_partition は nvarchar(5) で、既定値は false
です。
false
は、垂直フィルター処理がないことを示し、すべての列を発行します。false
は、宣言された主キーとROWGUID
列を除くすべての列をクリアします。 列は、sp_mergearticlecolumn
を使用して追加されます。
[ @auto_identity_range = ] N'auto_identity_range'
パブリケーションの作成時に、このテーブルアーティクルの ID 範囲の自動処理を有効または無効にします。 @auto_identity_range は nvarchar(5) で、既定値は NULL
です。 false
では ID 範囲の自動処理が有効になりますが、 false
では無効になります。
Note
このパラメーターは非推奨であり、スクリプトの下位互換性のために保持されます。 ID 範囲管理オプションを指定するには、 @identityrangemanagementoption を使用する必要があります。 詳細については、「Replicate Identity Columns」 (ID 列のレプリケート) を参照してください。
[ @pub_identity_range = ] pub_identity_range
自動 ID 範囲の管理を使用しているときに、サーバー サブスクリプションでサブスクライバーに割り当てられる ID 範囲のサイズを制御します。 この ID 範囲は、再パブリッシュ元のサブスクライバーが自らのサブスクライバーに割り当てるために予約されています。 @pub_identity_range は bigint で、既定値は NULL
です。 @identityrangemanagementoptionがauto
場合、または@auto_identity_rangeがfalse
場合は、このパラメーターを指定する必要があります。
[ @identity_range = ] identity_range
自動 ID 範囲管理を使用する場合にパブリッシャーとサブスクライバーの両方に割り当てられる ID 範囲サイズを制御します。 @identity_range は bigint で、既定値は NULL
です。 @identityrangemanagementoptionがauto
場合、または@auto_identity_rangeがfalse
場合は、このパラメーターを指定する必要があります。
Note
@identity_range は、以前のバージョンの SQL Server を使用して、再パブリッシュサブスクライバーでの ID 範囲のサイズを制御します。
[ @threshold = ] しきい値
マージ エージェントがどの時点で新しい ID 範囲を割り当てるかを制御するパーセンテージ値です。 @thresholdで指定された値の割合を使用すると、マージ エージェントによって新しい ID 範囲が作成されます。 @threshold は int で、既定値は NULL
です。 @identityrangemanagementoptionがauto
場合、または@auto_identity_rangeがfalse
場合は、このパラメーターを指定する必要があります。
[ @verify_resolver_signature = ] verify_resolver_signature
マージ レプリケーションでリゾルバーを使用する前にデジタル署名を検証するかどうかを指定します。 @verify_resolver_signature は int で、既定値は 1
です。
0
は、署名が検証されていないことを指定します。1
は、署名が信頼できるソースからの署名であるかどうかを確認することを指定します。
[ @destination_object = ] N'destination_object'
サブスクリプション データベース内のオブジェクトの名前。 @destination_object は sysname で、既定値は @source_object です。 このパラメーターは、アーティクルがストアド プロシージャ、ビュー、UDF などのスキーマのみのアーティクルである場合にのみ指定できます。 指定されたアーティクルがテーブル アーティクルの場合、 @source_object の値は @destination_object の値をオーバーライドします。
[ @allow_interactive_resolver = ] N'allow_interactive_resolver'
アーティクルでの対話型リゾルバーの使用を有効または無効にします。 @allow_interactive_resolver は nvarchar(5) で、既定値は false
です。 false
は、記事で対話型リゾルバーを使用できるようにします。 false
は無効にします。
Note
対話型リゾルバーは、SQL Server Compact サブスクライバーではサポートされていません。
[ @fast_multicol_updateproc = ] N'fast_multicol_updateproc'
このパラメーターは非推奨であり、スクリプトの下位互換性のために保持されます。
[ @check_permissions = ] check_permissions
マージ エージェントがパブリッシャーに変更を適用したときに検証されるテーブル レベルのアクセス許可のビットマップ。 マージ プロセスで使用されるパブリッシャー ログイン/ユーザー アカウントに適切なテーブル権限がない場合、無効な変更は競合としてログに記録されます。 @check_permissions は intであり、 にすることができます|(ビットごとの OR) 次の値の 1 つ以上の積。
値 | 説明 |
---|---|
0x00 (既定値) |
アクセス許可はチェックされません。 |
0x10 |
サブスクライバーで行われた挿入操作をアップロードする前に、パブリッシャーのアクセス許可を確認します。 |
0x20 |
サブスクライバーで行われた更新操作をアップロードする前に、パブリッシャーのアクセス許可を確認します。 |
0x40 |
サブスクライバーで行われた削除操作をアップロードする前に、パブリッシャーのアクセス許可を確認します。 |
[ @force_invalidate_snapshot = ] force_invalidate_snapshot
このストアド プロシージャによって実行されたアクションによって、既存のスナップショットが無効になる可能性があることを確認します。 @force_invalidate_snapshot は ビットで、既定値は 0
です。
0
は、アーティクルを追加してもスナップショットが無効にならないことを指定します。 ストアド プロシージャが変更に新しいスナップショットが必要であることを検出した場合、エラーが発生し、変更は行われません。1
は、アーティクルを追加するとスナップショットが無効になる可能性があり、新しいスナップショットを必要とする既存のサブスクリプションがある場合は、既存のスナップショットを古いスナップショットとしてマークし、新しいスナップショットを生成するためのアクセス許可を付与します。 @force_invalidate_snapshot は、既存のスナップショットを持つパブリケーションにアーティクルを追加するときに1
に設定されます。
[ @published_in_tran_pub = ] N'published_in_tran_pub'
マージ パブリケーション内のアーティクルがトランザクション パブリケーションにもパブリッシュされることを示します。 @published_in_tran_pub は nvarchar(5) で、既定値は false
です。 false
は、アーティクルがトランザクション パブリケーションにもパブリッシュされることを指定します。
[ @force_reinit_subscription = ] force_reinit_subscription
このストアド プロシージャによって実行されるアクションで、既存のサブスクリプションの再初期化が必要になる可能性があることを確認します。 @force_reinit_subscription は bit で、既定値は 0
です。
0
は、アーティクルを追加してもサブスクリプションが再初期化されないように指定します。 既存のサブスクリプションを再初期化する必要があることをストアド プロシージャが検出すると、エラーが発生し、変更は行われません。1
は、マージ アーティクルを変更すると、既存のサブスクリプションが再初期化され、サブスクリプションの再初期化が行われるアクセス許可が付与されることを意味します。 パラメーター化された行フィルター@subset_filterclause指定する場合、@force_reinit_subscriptionは1
に設定されます。
[ @logical_record_level_conflict_detection = ] N'logical_record_level_conflict_detection'
論理レコードのメンバーであるアーティクルの競合検出レベルを指定します。 @logical_record_level_conflict_detection は nvarchar(5) で、既定値は false
です。
false
は、論理レコード内の任意の場所で変更が行われた場合に競合が検出されることを指定します。false
は、 @column_trackingで指定された既定の競合検出が使用されることを指定します。 詳細については、「Group Changes to Related Rows with Logical Records」 (論理レコードによる関連行への変更のグループ化) を参照してください。
Note
論理レコードは SQL Server Compact サブスクライバーではサポートされていないため、これらのサブスクライバーをサポートするには、@logical_record_level_conflict_detectionに false
の値を指定する必要があります。
[ @logical_record_level_conflict_resolution = ] N'logical_record_level_conflict_resolution'
論理レコードのメンバーであるアーティクルの競合解決レベルを指定します。 @logical_record_level_conflict_resolution は nvarchar(5) で、既定値は false
です。
false
は、優先論理レコード全体が、失われる論理レコードを上書きすることを指定します。false
は、勝つ行が論理レコードに制約されないように指定します。
@logical_record_level_conflict_detectionがfalse
されている場合は、@logical_record_level_conflict_resolutionも false
に設定する必要があります。 詳細については、「Group Changes to Related Rows with Logical Records」 (論理レコードによる関連行への変更のグループ化) を参照してください。
Note
論理レコードは SQL Server Compact サブスクライバーではサポートされていないため、これらのサブスクライバーをサポートするには、@logical_record_level_conflict_resolutionに false
の値を指定する必要があります。
[ @partition_options = ] partition_options
アーティクル内のデータをパーティション分割する方法を定義します。これにより、すべての行が 1 つのパーティションまたは 1 つのサブスクリプションにのみ属している場合にパフォーマンスの最適化が可能になります。 @partition_options は tinyint で、次のいずれかの値を指定できます。
値 | 説明 |
---|---|
0 (既定値) |
アーティクルのフィルター処理は静的であるか、パーティションごとにデータの一意のサブセット (つまり、"重複する" パーティション) を生成しません。 |
1 |
パーティションは重複しており、サブスクライバーで行われたデータ操作言語 (DML) の更新では、行が属するパーティションを変更できません。 |
2 |
アーティクルのフィルター処理では重複しないパーティションが生成されますが、複数のサブスクライバーが同じパーティションを受け取ることができます。 |
3 |
この記事のフィルター処理により、サブスクリプションごとに一意の重複しないパーティションが生成されます。 |
Note
アーティクルのソース テーブルが既に別のパブリケーションに発行されている場合、 @partition_options の値は両方のアーティクルで同じである必要があります。
[ @processing_order = ] processing_order
マージ パブリケーション内のアーティクルの処理順序を示します。 @processing_order は int で、既定値は 0
です。 0
はアーティクルが順序付けされていないことを指定し、その他の値は、このアーティクルの処理順序の序数値を表します。 アーティクルは、最も小さい値から最も大きい値の順序で処理されます。 2 つのアーティクルの値が同じ場合、処理順序は、 sysmergearticles システム テーブル内のアーティクルニックネームの順序によって決まります。 詳細については、「Specify Merge Replication properties」 (マージ レプリケーションのプロパティの指定) を参照してください。
[ @subscriber_upload_options = ] subscriber_upload_options
サブスクライバーにおける、クライアント サブスクリプションを使用した更新に対する制限を定義します。 詳細については、「ダウンロード専用アーティクルを使用したマージ レプリケーションのパフォーマンス最適化」を参照してください。 @subscriber_upload_options は tinyint で、次のいずれかの値を指定できます。
値 | 説明 |
---|---|
0 (既定値) |
制限なし。 サブスクライバー側で行われた変更は、パブリッシャーにアップロードされます。 |
1 |
変更はサブスクライバーで許可されますが、パブリッシャーにはアップロードされません。 |
2 |
サブスクライバーで変更を行うことはできません。 |
@subscriber_upload_optionsを変更するには、sp_reinitmergepullsubscriptionを呼び出してサブスクリプションを再初期化する必要があります。
Note
アーティクルのソース テーブルが別のパブリケーションで既にパブリッシュされている場合、 @subscriber_upload_options の値は、両方のアーティクルで同じであることが必要です。
[ @identityrangemanagementoption = ] N'identityrangemanagementoption'
アーティクルの ID 範囲管理の処理方法を指定します。 @identityrangemanagementoption は nvarchar(10)であり、次のいずれかの値を指定できます。
値 | 説明 |
---|---|
none |
ID 範囲の管理を無効にします。 |
manual |
NOT FOR REPLICATION を使用して ID 列をマークし、手動での ID 範囲の処理を有効にします。 |
auto |
ID 範囲の自動管理を指定します。 |
NULL (既定) |
既定値は、@auto_identity_rangeの値がtrue されていない場合にnone します。 |
下位互換性のために、 @identityrangemanagementoption の値が NULL
されると、 @auto_identity_range の値がチェックされます。 ただし、 @identityrangemanagementoption の値が NULL
されていない場合、 @auto_identity_range の値は無視されます。 詳細については、「Replicate Identity Columns」 (ID 列のレプリケート) を参照してください。
[ @delete_tracking = ] N'delete_tracking'
削除がレプリケートされるかどうかを示します。 @delete_tracking は nvarchar(5) で、既定値は true
です。 false
は削除がレプリケートされていないことを示し、 true
は削除がレプリケートされることを示します。これはマージ レプリケーションの通常の動作です。 @delete_trackingが false
に設定されている場合、サブスクライバーで削除された行はパブリッシャーで手動で削除する必要があり、パブリッシャーで削除された行はサブスクライバーで手動で削除する必要があります。
重要
@delete_trackingをfalse
に設定すると、非収束になります。 アーティクルのソース テーブルが既に別のパブリケーションに発行されている場合、 @delete_tracking の値は両方のアーティクルで同じである必要があります。
Note
@delete_tracking オプションは、 新しいパブリケーション ウィザード または Publication プロパティ ダイアログ ボックスを使用して設定することはできません。
[ @compensate_for_errors = ] N'compensate_for_errors'
同期中にエラーが検出されたときに補正アクションが行われるかどうかを示します。 @compensate_for_errors は nvarchar(5) で、既定値は false
です。 true
に設定すると、同期中にサブスクライバーまたはパブリッシャーで適用できない変更は、常に変更を元に戻すための補正アクションにつながります。ただし、誤って構成されたサブスクライバーでエラーが発生すると、他のサブスクライバーとパブリッシャーの変更が元に戻される可能性があります。 false
は、これらの補正アクションを無効にしますが、エラーは補正と同様にログに記録され、後続のマージは成功するまで変更の適用を試み続けます。
重要
影響を受ける行のデータは収束されないように見えますが、エラーを解決すると、変更は直ちに適用可能となり、データは収束されます。 アーティクルのソース テーブルが既に別のパブリケーションに発行されている場合、 @compensate_for_errors の値は両方のアーティクルで同じである必要があります。
[ @stream_blob_columns = ] N'stream_blob_columns'
バイナリ ラージ オブジェクトの列をレプリケートするときに、データ ストリームの最適化を使用します。 @stream_blob_columns は nvarchar(5) で、既定値は false
です。 true
は、最適化が試行されることを意味します。 FILESTREAM が有効な場合、@stream_blob_columns は true に設定されます。 これにより、FILESTREAM データのレプリケーションが最適に実行され、メモリ使用率が低下します。 FILESTREAM テーブルアーティクルで BLOB ストリーミングを使用しないようにするには、 sp_changemergearticle
を使用して @stream_blob_columns を false に設定します。
重要
このメモリ最適化を有効にすると、同期中のマージ エージェントのパフォーマンスが低下する可能性があります。 このオプションは、メガバイト単位のデータを含む列をレプリケートする場合にのみ使用してください。
Note
論理レコードなどの特定のマージ レプリケーション機能では、 @stream_blob_columns が true
に設定されている場合でも、バイナリ ラージ オブジェクトをレプリケートするときにストリームの最適化が使用されないようにすることができます。
リターン コードの値
0
(成功) または 1
(失敗)。
解説
sp_addmergearticle
はマージ レプリケーションで使用されます。
オブジェクトをパブリッシュすると、その定義がサブスクライバーにコピーされます。 1 つ以上の他のオブジェクトに依存するデータベース オブジェクトをパブリッシュする場合は、参照されているすべてのオブジェクトをパブリッシュする必要があります。 たとえば、テーブルに依存しているビューをパブリッシュする場合は、そのテーブルもパブリッシュする必要があります。
@partition_optionsに 3
の値を指定する場合:
その記事のデータパーティションごとに 1 つのサブスクリプションしか存在できません。 第 2 のサブスクリプションを作成し、その新しいサブスクリプションのフィルター選択条件が既存のサブスクリプションと同じパーティションとして判別される場合、既存のサブスクリプションは削除されます。
メタデータは、マージ エージェントが実行され、パーティション 分割されたスナップショットの有効期限がより早く切れるたびにクリーンアップされます。 このオプションを使用する場合は、サブスクライバーが要求したパーティション スナップショットを有効にすることを検討する必要があります。 詳しくは、「 パラメーター化されたフィルターを使用したパブリケーションのスナップショットの作成」をご覧ください。
パラメーター化されたフィルターを持つアーティクルを含む既存のパブリケーションに、 @subset_filterclauseを使用して静的水平フィルターを持つアーティクルを追加する場合は、サブスクリプションを再初期化する必要があります。
@processing_orderを指定する場合は、アーティクルの注文値の間にギャップを残すことをお勧めします。これにより、将来新しい値を簡単に設定できるようになります。 たとえば、Article1
、Article2
、Article3
の 3 つの記事がある場合は、1
、2
、3
ではなく、@processing_orderを 10
、20
、および30
に設定します。 詳細については、「Specify Merge Replication properties」 (マージ レプリケーションのプロパティの指定) を参照してください。
既定のスキーマ オプション テーブル
次の表では、@schema_optionにNULL
値が指定されている場合、ストアド プロシージャが設定する既定値について説明します。これはアーティクルの種類によって異なります。
記事の種類 | スキーマ オプションの値 |
---|---|
func schema only |
0x01 |
indexed view schema only |
0x01 |
proc schema only |
0x01 |
table |
0x0C034FD1 - SQL Server 2005 (9.x) 以降の互換性のあるパブリケーションとネイティブ モードのスナップショット。0x08034FF1 - SQL Server 2005 (9.x) 以降の互換性のあるパブリケーションと文字モード スナップショット。 |
view schema only |
0x01 |
Note
パブリケーションで以前のバージョンの SQL Server がサポートされている場合、 table
の既定のスキーマ オプションは 0x30034FF1
。
有効なスキーマ オプション テーブル
次の表では、アーティクルの種類に応じて @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 @table1 AS sysname;
DECLARE @table2 AS sysname;
DECLARE @table3 AS sysname;
DECLARE @salesschema AS sysname;
DECLARE @hrschema AS sysname;
DECLARE @filterclause AS nvarchar(1000);
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @table1 = N'Employee';
SET @table2 = N'SalesOrderHeader';
SET @table3 = N'SalesOrderDetail';
SET @salesschema = N'Sales';
SET @hrschema = N'HumanResources';
SET @filterclause = N'Employee.LoginID = HOST_NAME()';
-- Add a filtered article for the Employee table.
EXEC sp_addmergearticle
@publication = @publication,
@article = @table1,
@source_object = @table1,
@type = N'table',
@source_owner = @hrschema,
@schema_option = 0x0004CF1,
@description = N'article for the Employee table',
@subset_filterclause = @filterclause;
-- Add an article for the SalesOrderHeader table that is filtered
-- based on Employee and horizontally filtered.
EXEC sp_addmergearticle
@publication = @publication,
@article = @table2,
@source_object = @table2,
@type = N'table',
@source_owner = @salesschema,
@vertical_partition = N'true',
@schema_option = 0x0034EF1,
@description = N'article for the SalesOrderDetail table';
-- Add an article for the SalesOrderDetail table that is filtered
-- based on SaledOrderHeader.
EXEC sp_addmergearticle
@publication = @publication,
@article = @table3,
@source_object = @table3,
@source_owner = @salesschema,
@description = 'article for the SalesOrderHeader table',
@identityrangemanagementoption = N'auto',
@pub_identity_range = 100000,
@identity_range = 100,
@threshold = 80,
@schema_option = 0x0004EF1;
-- Add all columns to the SalesOrderHeader article.
EXEC sp_mergearticlecolumn
@publication = @publication,
@article = @table2,
@force_invalidate_snapshot = 1,
@force_reinit_subscription = 1;
-- Remove the credit card Approval Code column.
EXEC sp_mergearticlecolumn
@publication = @publication,
@article = @table2,
@column = N'CreditCardApprovalCode',
@operation = N'drop',
@force_invalidate_snapshot = 1,
@force_reinit_subscription = 1;
-- Add a merge join filter between Employee and SalesOrderHeader.
EXEC sp_addmergefilter
@publication = @publication,
@article = @table2,
@filtername = N'SalesOrderHeader_Employee',
@join_articlename = @table1,
@join_filterclause = N'Employee.BusinessEntityID = SalesOrderHeader.SalesPersonID',
@join_unique_key = 1,
@filter_type = 1,
@force_invalidate_snapshot = 1,
@force_reinit_subscription = 1;
-- Add a merge join filter between SalesOrderHeader and SalesOrderDetail.
EXEC sp_addmergefilter
@publication = @publication,
@article = @table3,
@filtername = N'SalesOrderDetail_SalesOrderHeader',
@join_articlename = @table2,
@join_filterclause = N'SalesOrderHeader.SalesOrderID = SalesOrderDetail.SalesOrderID',
@join_unique_key = 1,
@filter_type = 1,
@force_invalidate_snapshot = 1,
@force_reinit_subscription = 1;
GO
アクセス許可
sysadmin 固定サーバー ロールまたは db_owner 固定データベース ロールのメンバーシップが必要です。