sp_addmergearticle (Transact-SQL)
適用対象: SQL ServerAzure 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 |
varbinary(max) 列でFILESTREAM 属性が指定されている場合は、このオプションを使用して属性をレプリケートします。 SQL Server 2005 (9.x) サブスクライバーにテーブルをレプリケートする場合は、このオプションを指定しないでください。 FILESTREAM 列を持つテーブルを SQL Server 2000 (8.x) サブスクライバーにレプリケートすることは、このスキーマ オプションの設定方法に関係なくサポートされていません。 関連するオプション 0x800000000 を参照してください。 |
0x200000000 |
SQL Server 2008 (10.0.x) で導入された日付と時刻のデータ型 (日付、時刻、datetimeoffset、datetime2) を、以前のバージョンの SQL Server でサポートされているデータ型に変換します。 |
0x400000000 |
データとインデックスの圧縮オプションをレプリケートします。 詳細については、「データ圧縮」を参照してください。 |
0x800000000 |
このオプションを設定すると、サブスクライバーの独自のファイル グループに FILESTREAM データを格納できます。 このオプションが設定されていない場合、FILESTREAM データは既定のファイル グループに格納されます。 レプリケーションではファイル グループは作成されません。そのため、このオプションを設定する場合は、サブスクライバーでスナップショットを適用する前に、ファイル グループを作成する必要があります。 スナップショットを適用する前にオブジェクトを作成する方法の詳細については、「スナップショットが適用される前と後にスクリプトを実行する」を参照してください。 関連するオプション 0x100000000 を参照してください。 |
0x1000000000 |
共通言語ランタイム (CLR) ユーザー定義型 (UDT) を varbinary(max) に 変換して、UDT 型の列を SQL Server 2005 (9.x) を実行しているサブスクライバーにレプリケートできるようにします。 |
0x2000000000 |
hierarchyid データ型を varbinary(max) に変換し、hierarchyid 型の列を SQL Server 2005 (9.x) を実行しているサブスクライバーにレプリケートできるようにします。 レプリケートテーブルで hierarchyid 列を使用する方法の詳細については、「hierarchyid データ型メソッドリファレンス」を参照してください。 |
0x4000000000 |
フィルター処理されたインデックスをテーブルにレプリケートします。 フィルター選択されたインデックスについて詳しくは、「フィルター選択されたインデックスの作成」を参照してください。 |
0x8000000000 |
これらの型の列を SQL Server 2005 (9.x) を実行しているサブスクライバーにレプリケートできるように、geography データ型と geometry データ型を varbinary(max) に変換します。 |
0x10000000000 |
geography 型と geometry 型の列にインデックスをレプリケートします。 |
この値の NULL
場合、アーティクルの有効なスキーマ オプションが自動生成されます。 既定のスキーマ オプション テーブルには、アーティクルの種類に基づいて選択された値が表示されます。 また、すべての種類のレプリケーションとアーティクルの種類に対して、すべての@schema_option値が有効なわけではありません。 [ 有効なスキーマ オプション] テーブル には、特定のアーティクルの種類に対して指定できるオプションが表示されます。
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
. 詳細については、「高度なマージ レプリケーションの競合 - COM ベースの競合回避モジュール」を参照してください。
[ @source_owner = ] N'source_owner'
@source_objectの所有者の名前。 @source_ownerは sysname で、既定値は NULL
. の場合 NULL
、現在のユーザーが所有者であると見なされます。
[ @destination_owner = ] N'destination_owner'
サブスクリプション データベース内のオブジェクトの所有者 (そうでない dbo
場合)。 @destination_ownerは sysname で、既定値は NULL
. のdbo
場合NULL
は所有者と見なされます。
[ @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_identity_range場合はauto
false
、このパラメーターを指定する必要があります。
[ @identity_range = ] identity_range
自動 ID 範囲管理を使用する場合にパブリッシャーとサブスクライバーの両方に割り当てられる ID 範囲サイズを制御します。 @identity_rangeは bigint で、既定値は NULL
. @identityrangemanagementoptionの場合、または@auto_identity_range場合はauto
false
、このパラメーターを指定する必要があります。
Note
@identity_rangeは、以前のバージョンの SQL Server を使用して、再パブリッシュサブスクライバーでの ID 範囲のサイズを制御します。
[ @threshold = ] しきい値
マージ エージェントがどの時点で新しい ID 範囲を割り当てるかを制御するパーセンテージ値です。 @thresholdで指定された値の割合を使用すると、マージ エージェントによって新しい ID 範囲が作成されます。 @thresholdは int で、既定値は NULL
. @identityrangemanagementoptionの場合、または@auto_identity_range場合はauto
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 = ] チェック_permissions
マージ エージェントがパブリッシャーに変更を適用したときに検証されるテーブル レベルのアクセス許可のビットマップ。 マージ プロセスで使用されるパブリッシャー ログイン/ユーザー アカウントに適切なテーブル権限がない場合、無効な変更は競合としてログに記録されます。 @チェック_permissions は int であり、|(ビットごとの OR)次の値の 1 つ以上の積。
値 | 説明 |
---|---|
0x00 (既定値) |
アクセス許可はチェックされません。 |
0x10 |
サブスクライバーで行われた挿入操作をアップロードする前に、パブリッシャーのアクセス許可を確認します。 |
0x20 |
サブスクライバーで行われた更新操作をアップロードする前に、パブリッシャーのアクセス許可を確認します。 |
0x40 |
サブスクライバーで行われた削除操作をアップロードする前に、パブリッシャーのアクセス許可を確認します。 |
[ @force_invalidate_snapshot = ] force_invalidate_スナップショット
このストアド プロシージャによって実行されたアクションによって、既存のスナップショットが無効になる可能性があることを確認します。 @force_invalidate_スナップショットはビットで、既定値は 0
.
0
は、アーティクルを追加してもスナップショットが無効にならないことを指定します。 変更に新しいスナップショットが必要であるとストアド プロシージャで検出された場合、エラーが発生し、変更は行われません。1
は、アーティクルを追加すると、スナップショットが無効になる可能性があり、新しいスナップショットを必要とする既存のサブスクリプションがある場合は、既存のスナップショットが古いとしてマークされ、新しいスナップショット生成されるアクセス許可を付与します。 @force_invalidate_スナップショットは、既存のスナップショットを持つパブリケーションにアーティクルを追加するときに設定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はビットで、既定値は 0
.
0
は、アーティクルを追加してもサブスクリプションが再初期化されないように指定します。 既存のサブスクリプションを再初期化する必要があることをストアド プロシージャが検出すると、エラーが発生し、変更は行われません。1
は、マージ アーティクルを変更すると、既存のサブスクリプションが再初期化され、サブスクリプションの再初期化が行われるアクセス許可が付与されることを意味します。 @force_reinit_subscriptionは、パラメーター化された行フィルター@subset_filterclause指定する場合に設定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 つのアーティクルが同じ値を持つ場合、処理順序はシスメギアティクル システム テーブル内のアーティクルニックネームの順序によって決まります。 詳細については、「Specify Merge Replication properties」 (マージ レプリケーションのプロパティの指定) を参照してください。
[ @subscriber_upload_options = ] subscriber_upload_options
サブスクライバーにおける、クライアント サブスクリプションを使用した更新に対する制限を定義します。 詳細については、「ダウンロード専用アーティクルを使用したマージ レプリケーションのパフォーマンス最適化」を参照してください。 @subscriber_upload_optionsは tinyint で、次のいずれかの値を指定できます。
値 | 説明 |
---|---|
0 (既定値) |
制限なし。 サブスクライバー側で行われた変更は、パブリッシャーにアップロードされます。 |
1 |
変更はサブスクライバーで許可されますが、パブリッシャーにはアップロードされません。 |
2 |
サブスクライバーで変更を行うことはできません。 |
@subscriber_upload_optionsを変更するには、sp_reinitmergepullsubscription (Transact-SQL) を呼び出してサブスクリプションを再初期化する必要があります。
Note
アーティクルのソース テーブルが別のパブリケーションで既にパブリッシュされている場合、 @subscriber_upload_options の値は、両方のアーティクルで同じであることが必要です。
[ @identityrangemanagementoption = ] N'identityrangemanagementoption'
アーティクルの ID 範囲管理の処理方法を指定します。 @identityrangemanagementoptionは nvarchar(10)で、次のいずれかの値を指定できます。
値 | 説明 |
---|---|
none |
ID 範囲の管理を無効にします。 |
manual |
NOT FOR REPLICATION を使用して ID 列をマークし、手動での ID 範囲の処理を有効にします。 |
auto |
ID 範囲の自動管理を指定します。 |
NULL (既定) |
既定値はnone 、@auto_identity_range の値がそうでないtrue 場合です。 |
下位互換性のために、@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オプションは、パブリケーションの新規作成ウィザードまたは [パブリケーションのプロパティ] ダイアログ ボックスを使用して設定することはできません。
[ @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 ストリーミングを使用しないようにするには、@stream_blob_columnsを false に設定するために使用sp_changemergearticle
します。
重要
このメモリ最適化を有効にすると、同期中のマージ エージェントのパフォーマンスが低下する可能性があります。 このオプションは、メガバイト単位のデータを含む列をレプリケートする場合にのみ使用してください。
Note
論理レコードなどの特定のマージ レプリケーション機能では、バイナリ ラージ オブジェクトをレプリケートするときにストリームの最適化が使用されるのを防ぐことができます (@stream_blob_columnsがtrue
設定されている場合でも)。
リターン コードの値
0
(成功) または 1
(失敗)。
解説
sp_addmergearticle
はマージ レプリケーションで使用されます。
オブジェクトをパブリッシュすると、その定義がサブスクライバーにコピーされます。 1 つ以上の他のオブジェクトに依存するデータベース オブジェクトをパブリッシュする場合は、参照されているすべてのオブジェクトをパブリッシュする必要があります。 たとえば、テーブルに依存しているビューをパブリッシュする場合は、そのテーブルもパブリッシュする必要があります。
@partition_optionsの3
値を指定する場合:
その記事のデータパーティションごとに 1 つのサブスクリプションしか存在できません。 第 2 のサブスクリプションを作成し、その新しいサブスクリプションのフィルター選択条件が既存のサブスクリプションと同じパーティションとして判別される場合、既存のサブスクリプションは削除されます。
メタデータは、マージ エージェントが実行され、パーティション分割されたスナップショットの有効期限がより早く切れるたびにクリーンされます。 このオプションを使用する場合は、サブスクライバーが要求したパーティション分割されたスナップショットを有効にすることを検討する必要があります。 詳しくは、「 パラメーター化されたフィルターを使用したパブリケーションのスナップショットの作成」をご覧ください。
パラメーター化されたフィルターを持つアーティクルを含む既存のパブリケーションに、@subset_filterclauseを使用して静的水平フィルターを持つアーティクルを追加する場合は、サブスクリプションを再初期化する必要があります。
@processing_orderを指定する場合は、アーティクルの注文値の間にギャップを残すことをお勧めします。これにより、将来新しい値を簡単に設定できるようになります。 たとえば、3 つのアーティクル Article1
、Article3
Article2
@processing_orderを 、ではなく 1
3
2
、30
20
に設定10
するとします。 詳細については、「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 固定データベース ロールのメンバーシップが必要です。
関連するコンテンツ
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示