sp_addarticle (Transact-SQL)
適用対象: SQL Server Azure SQL Managed Instance
アーティクルを作成し、パブリケーションに追加します。 このストアド プロシージャは、パブリッシャー側のパブリケーション データベースで実行されます。
構文
sp_addarticle
[ @publication = ] N'publication'
, [ @article = ] N'article'
[ , [ @source_table = ] N'source_table' ]
[ , [ @destination_table = ] N'destination_table' ]
[ , [ @vertical_partition = ] N'vertical_partition' ]
[ , [ @type = ] N'type' ]
[ , [ @filter = ] N'filter' ]
[ , [ @sync_object = ] N'sync_object' ]
[ , [ @ins_cmd = ] N'ins_cmd' ]
[ , [ @del_cmd = ] N'del_cmd' ]
[ , [ @upd_cmd = ] N'upd_cmd' ]
[ , [ @creation_script = ] N'creation_script' ]
[ , [ @description = ] N'description' ]
[ , [ @pre_creation_cmd = ] N'pre_creation_cmd' ]
[ , [ @filter_clause = ] N'filter_clause' ]
[ , [ @schema_option = ] schema_option ]
[ , [ @destination_owner = ] N'destination_owner' ]
[ , [ @status = ] status ]
[ , [ @source_owner = ] N'source_owner' ]
[ , [ @sync_object_owner = ] N'sync_object_owner' ]
[ , [ @filter_owner = ] N'filter_owner' ]
[ , [ @source_object = ] N'source_object' ]
[ , [ @artid = ] artid OUTPUT ]
[ , [ @auto_identity_range = ] N'auto_identity_range' ]
[ , [ @pub_identity_range = ] pub_identity_range ]
[ , [ @identity_range = ] identity_range ]
[ , [ @threshold = ] threshold ]
[ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
[ , [ @use_default_datatypes = ] use_default_datatypes ]
[ , [ @identityrangemanagementoption = ] N'identityrangemanagementoption' ]
[ , [ @publisher = ] N'publisher' ]
[ , [ @fire_triggers_on_snapshot = ] N'fire_triggers_on_snapshot' ]
[ ; ]
引数
[ @publication = ] N'publication'
アーティクルを含むパブリケーションの名前。 名前はデータベース内で一意である必要があります。 @publication は sysname で、既定値はありません。
[ @article = ] N'article'
アーティクルの名前。 名前はパブリケーション内で一意であることが必要です。 @article は sysname で、既定値はありません。
[ @source_table = ] N'source_table'
このパラメーターは非推奨になりました。代わりに @source_object を使用してください。 @source_table は nvarchar(386) で、既定値は NULL
です。 @source_table は Oracle パブリッシャーではサポートされていません。
[ @destination_table = ] N'destination_table'
変換先 (サブスクリプション) テーブルの名前 ( @source_table またはストアド プロシージャと異なる場合)。 @destination_table は sysname で、既定値は NULL
です。 NULL
に設定すると、@source_tableが@destination_tableに等しいことを意味します。
[ @vertical_partition = ] N'vertical_partition'
テーブル アーティクルの列フィルター処理を有効または無効にします。 @vertical_partition は nchar(5) で、既定値は false
です。
false
は、垂直フィルター処理がないことを示し、すべての列を発行します。true
は、宣言された主キー、既定のない null 許容列、および一意のキー列を除くすべての列をクリアします。 列は、 sp_articlecolumnを使用して追加されます。
[ @type = ] N'type'
アーティクルの種類。 @type は sysname で、既定値は NULL
で、次のいずれかの値を指定できます。
値 | 説明 |
---|---|
aggregate schema only |
スキーマのみを使用する集計関数。 |
func schema only |
スキーマのみの関数。 |
indexed view logbased |
ログ ベースのインデックス付きビューに関する記事。 Oracle パブリッシャーではサポートされていません。 この種の記事では、ベース テーブルを個別に発行する必要はありません。 |
indexed view logbased manualboth |
手動フィルターと手動ビューを使用する、ログベースのインデックス付きビュー アーティクルです。 このオプションでは、 @sync_object パラメーターと @filter パラメーターの両方を指定する必要があります。 この種の記事では、ベース テーブルを個別に発行する必要はありません。 Oracle パブリッシャーではサポートされていません。 |
indexed view logbased manualfilter |
手動フィルターを使用したログ ベースのインデックス付きビューアーティクル。 このオプションでは、 @sync_object パラメーターと @filter パラメーターの両方を指定する必要があります。 この種の記事では、ベース テーブルを個別に発行する必要はありません。 Oracle パブリッシャーではサポートされていません。 |
indexed view logbased manualview |
手動ビューを使用する、ログベースのインデックス付きビュー アーティクルです。 このオプションでは、 @sync_object パラメーターを指定する必要があります。 この種の記事では、ベース テーブルを個別に発行する必要はありません。 Oracle パブリッシャーではサポートされていません。 |
indexed view schema only |
スキーマのみを使用するインデックス付きビュー。 この種類の記事では、ベース テーブルも発行する必要があります。 |
logbased (既定) |
ログベースの記事。 |
logbased manualboth |
手動フィルターと手動ビューを含むログ ベースの記事。 このオプションでは、 @sync_object パラメーターと @filter パラメーターの両方を指定する必要があります。 Oracle パブリッシャーではサポートされていません。 |
logbased manualfilter |
手動フィルターを使用したログベースの記事。 このオプションでは、 @sync_object パラメーターと @filter パラメーターの両方を指定する必要があります。 Oracle パブリッシャーではサポートされていません。 |
logbased manualview |
手動ビューを使用する、ログベースのアーティクルです。 このオプションでは、 @sync_object パラメーターを指定する必要があります。 Oracle パブリッシャーではサポートされていません。 |
proc exec |
アーティクルのすべてのサブスクライバーにストアド プロシージャの実行をレプリケートします。 Oracle パブリッシャーではサポートされていません。 proc exec の代わりに、オプション serializable proc exec を使用することをお勧めします。 詳細については、「トランザクション レプリケーションでのストアド プロシージャの実行の公開」の「ストアド プロシージャの実行の種類」 参照。 変更データ キャプチャが有効な場合は使用できません。 |
proc schema only |
スキーマのみを使用するプロシージャ。 Oracle パブリッシャーではサポートされていません。 |
serializable proc exec |
シリアル化可能なトランザクションのコンテキスト内で実行される場合にのみ、ストアド プロシージャの実行をレプリケートします。 Oracle パブリッシャーではサポートされていません。 プロシージャの実行をレプリケートするには、明示的なトランザクション内でプロシージャを実行する必要もあります。 |
view schema only |
スキーマのみを使用するビュー。 Oracle パブリッシャーではサポートされていません。 このオプションを使用する場合は、ベース テーブルも発行する必要があります。 |
[ @filter = ] N'filter'
テーブルを水平方向にフィルター処理するために使用されるストアド プロシージャ (FOR REPLICATION で作成)。 @filter は nvarchar(386) で、既定値は NULL
です。 ビューおよびフィルター ストアド プロシージャを作成するには、 sp_articleview と sp_articlefilter を手動で実行する必要があります。 NULL
しない場合、フィルター プロシージャは作成されません (ストアド プロシージャが手動で作成されていることを前提としています)。
[ @sync_object = ] N'sync_object'
この記事のスナップショットを表すために使用されるデータ ファイルの生成に使用されるテーブルまたはビューの名前。 @sync_object は nvarchar(386) で、既定値は NULL
です。 NULL
場合、sp_articleviewが呼び出され、出力ファイルの生成に使用されるビューが自動的に作成されます。 これは、 sp_articlecolumnを含む列を追加した後に発生します。 NULL
しない場合、ビューは作成されません (ビューが手動で作成されていることを前提としています)。
[ @ins_cmd = ] N'ins_cmd'
この記事の挿入をレプリケートするときに使用するレプリケーション コマンドの種類。 @ins_cmd は nvarchar(255)であり、次のいずれかの値を指定できます。
値 | 説明 |
---|---|
NONE |
アクションは行われません。 |
CALL sp_MSins_<table> (既定)または CALL custom_stored_procedure_name |
サブスクライバー側で実行されるストアド プロシージャを呼び出します。 このレプリケーション方法を使用するには、 @schema_option を使用してストアド プロシージャの自動作成を指定するか、アーティクルの各サブスクライバーの宛先データベースに指定されたストアド プロシージャを作成します。 <custom_stored_procedure> は、ユーザーが作成したストアド プロシージャの名前です。 sp_MSins_<table> には、パラメーターの _table 部分の代わりに変換先テーブルの名前が含まれています。 @destination_ownerを指定すると、コピー先のテーブル名の前に付加されます。 たとえば、サブスクライバーのProduction スキーマが所有するProductCategory テーブルの場合、パラメーターはCALL sp_MSins_ProductionProductCategory されます。 ピア ツー ピア レプリケーション トポロジの記事では、 <table> に GUID 値が追加されます。 サブスクライバーの更新では、 <custom_stored_procedure> の指定はサポートされていません。 |
SQL または NULL |
INSERT ステートメントをレプリケートします。 INSERT ステートメントは、記事で公開されているすべての列の値を提供します。 次のコマンドは挿入時にレプリケートされます。INSERT INTO <table name> VALUES (c1value, c2value, c3value, ..., cnvalue) |
詳細については、「 Transactional アーティクル - 変更の反映方法の指定を参照してください。
[ @del_cmd = ] N'del_cmd'
この記事の削除をレプリケートするときに使用されるレプリケーション コマンドの種類。 @del_cmd は nvarchar(255)であり、次のいずれかの値を指定できます。
値 | 説明 |
---|---|
NONE |
アクションは行われません。 |
CALLsp_MSdel_<table> (既定)または CALL <custom_stored_procedure_name> |
サブスクライバー側で実行されるストアド プロシージャを呼び出します。 このレプリケーション方法を使用するには、 @schema_option を使用してストアド プロシージャの自動作成を指定するか、アーティクルの各サブスクライバーの宛先データベースに指定されたストアド プロシージャを作成します。 <custom_stored_procedure> は、ユーザーが作成したストアド プロシージャの名前です。 sp_MSdel_<table> には、パラメーターの _table 部分の代わりに変換先テーブルの名前が含まれています。 @destination_ownerを指定すると、コピー先のテーブル名の前に付加されます。 たとえば、サブスクライバーのProduction スキーマが所有するProductCategory テーブルの場合、パラメーターはCALL sp_MSdel_ProductionProductCategory されます。 ピア ツー ピア レプリケーション トポロジの記事では、 <table> に GUID 値が追加されます。 サブスクライバーの更新では、 <custom_stored_procedure> の指定はサポートされていません。 |
XCALL sp_MSdel_<table> または XCALL <custom_stored_procedure_name> |
スタイル パラメーターを受け取るストアド プロシージャ XCALL 呼び出します。 このレプリケーション方法を使用するには、 @schema_option を使用してストアド プロシージャの自動作成を指定するか、アーティクルの各サブスクライバーの宛先データベースに指定されたストアド プロシージャを作成します。 ユーザーが作成したストアド プロシージャを指定してサブスクライバーを更新することはできません。 |
SQL または NULL |
DELETE ステートメントをレプリケートします。 DELETE ステートメントには、すべての主キー列の値が指定されます。 このコマンドは、削除時にレプリケートされます。DELETE FROM <table name> WHERE pkc1 = pkc1value AND pkc2 = pkc2value AND pkcn = pkcnvalue |
詳細については、「 Transactional アーティクル - 変更の反映方法の指定を参照してください。
[ @upd_cmd = ] N'upd_cmd'
この記事の更新プログラムをレプリケートするときに使用されるレプリケーション コマンドの種類。 @upd_cmd は nvarchar(255)であり、次のいずれかの値を指定できます。
値 | 説明 |
---|---|
NONE |
アクションは行われません。 |
CALL sp_MSupd_<table> または CALL <custom_stored_procedure_name> |
サブスクライバー側で実行されるストアド プロシージャを呼び出します。 このレプリケーション方法を使用するには、 @schema_option を使用してストアド プロシージャの自動作成を指定するか、アーティクルの各サブスクライバーの宛先データベースに指定されたストアド プロシージャを作成します。 |
MCALL sp_MSupd_<table> または MCALL <custom_stored_procedure_name> |
スタイル パラメーターを受け取るストアド プロシージャ MCALL 呼び出します。 このレプリケーション方法を使用するには、 @schema_option を使用してストアド プロシージャの自動作成を指定するか、アーティクルの各サブスクライバーの宛先データベースに指定されたストアド プロシージャを作成します。 <custom_stored_procedure> は、ユーザーが作成したストアド プロシージャの名前です。 sp_MSupd_<table> には、パラメーターの <table> 部分の代わりに変換先テーブルの名前が含まれています。 @destination_ownerを指定すると、コピー先のテーブル名の前に付加されます。 たとえば、サブスクライバーのProduction スキーマが所有するProductCategory テーブルの場合、パラメーターはMCALL sp_MSupd_ProductionProductCategory されます。 ピア ツー ピア レプリケーション トポロジの記事では、 <table> に GUID 値が追加されます。 ユーザーが作成したストアド プロシージャを指定してサブスクライバーを更新することはできません。 |
SCALL sp_MSupd_<table> (既定)または SCALL <custom_stored_procedure_name> |
スタイル パラメーターを受け取るストアド プロシージャ SCALL 呼び出します。 このレプリケーション方法を使用するには、 @schema_option を使用してストアド プロシージャの自動作成を指定するか、アーティクルの各サブスクライバーの宛先データベースに指定されたストアド プロシージャを作成します。 <custom_stored_procedure> は、ユーザーが作成したストアド プロシージャの名前です。 sp_MSupd_<table> には、パラメーターの _table 部分の代わりに変換先テーブルの名前が含まれています。 @destination_ownerを指定すると、コピー先のテーブル名の前に付加されます。 たとえば、サブスクライバーのProduction スキーマが所有するProductCategory テーブルの場合、パラメーターはSCALL sp_MSupd_ProductionProductCategory されます。 ピア ツー ピア レプリケーション トポロジの記事では、 _table に GUID 値が追加されます。 ユーザーが作成したストアド プロシージャを指定してサブスクライバーを更新することはできません。 |
XCALL sp_MSupd_<table> または XCALL <custom_stored_procedure_name> |
スタイル パラメーターを受け取るストアド プロシージャ XCALL 呼び出します。 このレプリケーション方法を使用するには、 @schema_option を使用してストアド プロシージャの自動作成を指定するか、アーティクルの各サブスクライバーの宛先データベースに指定されたストアド プロシージャを作成します。 ユーザーが作成したストアド プロシージャを指定してサブスクライバーを更新することはできません。 |
SQL または NULL |
UPDATE ステートメントをレプリケートします。 UPDATE ステートメントは、すべての列値と主キー列の値に対して提供されます。 このコマンドは、更新時にレプリケートされます。UPDATE <table name> SET c1 = c1value, SET c2 = c2value, SET cn = cnvalue WHERE pkc1 = pkc1value AND pkc2 = pkc2value AND pkcn = pkcnvalue |
Note
CALL
、MCALL
、SCALL
、およびXCALL
の構文によって、サブスクライバーに伝達されるデータの量が異なります。 CALL
構文は、挿入および削除されたすべての列のすべての値を渡します。 SCALL
構文は、影響を受ける列に対してのみ値を渡します。 XCALL
構文は、変更されたかどうかにかかわらず、列の前の値を含め、すべての列の値を渡します。 詳細については、「 Transactional アーティクル - 変更の反映方法の指定を参照してください。
[ @creation_script = ] N'creation_script'
サブスクリプション データベースにアーティクルを作成するために使用するオプションのアーティクル スキーマ スクリプトのパスと名前。 @creation_script は nvarchar(255) で、既定値は NULL
です。
[ @description = ] N'description'
記事の説明的なエントリ。 @description は nvarchar(255) で、既定値は NULL
です。
[ @pre_creation_cmd = ] N'pre_creation_cmd'
この記事のスナップショットを適用するときに、サブスクライバーで同じ名前の既存のオブジェクトを検出した場合にシステムが実行する必要があることを指定します。 @pre_creation_cmd は nvarchar(10)であり、次のいずれかの値を指定できます。
値 | 説明 |
---|---|
none |
コマンドを使用しません。 |
delete |
スナップショットを適用する前に、レプリケーション先テーブルからデータを削除します。 アーティクルが水平方向にフィルター処理されると、フィルター句で指定された列のデータのみが削除されます。 行フィルターが定義されている場合は、Oracle パブリッシャーに対してはサポートされません。 |
drop (既定) |
コピー先テーブルを削除します。 |
truncate |
コピー先テーブルを切り捨てます。 ODBC または OLE DB サブスクライバーでは無効です。 |
[ @filter_clause = ] N'filter_clause'
水平フィルターを定義する制限 (WHERE) 句。 制限句を入力するときは、キーワード WHERE を省略します。 @filter_clause は nvarchar(max) で、既定値は NULL
です。 詳細については、「パブリッシュされたデータのフィルター選択」を参照してください。
[ @schema_option = ] schema_option
特定のアーティクルのスキーマ生成オプションのビットマスク。 @schema_option は varbinary(8)で、既定値は NULL
で、 にすることができます|(ビットごとの OR) これらの値の 1 つ以上の積:
Note
この値が NULL
場合、アーティクルの他のプロパティに応じて、アーティクルの有効なスキーマ オプションが自動生成されます。 既定のスキーマ オプションには、アーティクルの種類とレプリケーションの種類の組み合わせに基づいて選択される値が表示されます。
値 | 説明 |
---|---|
0x00 |
スナップショット エージェントによるスクリプト作成を無効にし、@creation_scriptを使用します。 |
0x01 |
オブジェクト作成スクリプト (CREATE TABLE、CREATE PROCEDURE など) を生成します。 この値は、ストアド プロシージャアーティクルの既定値です。 |
0x02 |
定義されている場合、アーティクルの変更を反映するストアド プロシージャを生成します。 |
0x04 |
ID 列は、IDENTITY プロパティを使用してスクリプト化されます。 |
0x08 |
timestamp 列をレプリケートします。 設定されていない場合、 timestamp 列は binary としてレプリケートされます。 |
0x10 |
対応するクラスター化インデックスを生成します。 このオプションが設定されていない場合でも、主キーと一意の制約に関連するインデックスは、パブリッシュされたテーブルで既に定義されている場合に生成されます。 |
0x20 1 |
ユーザー定義データ型 (UDT) をサブスクライバーの基本データ型に変換します。 このオプションは、UDT 列に CHECK 制約または DEFAULT 制約がある場合、UDT 列が主キーの一部である場合、または計算列が UDT 列を参照している場合には使用できません。 |
0x40 |
対応する非クラスター化インデックスを生成します。 このオプションが設定されていない場合でも、主キーと一意の制約に関連するインデックスは、パブリッシュされたテーブルで既に定義されている場合に生成されます。 |
0x80 |
主キー制約をレプリケートします。 オプション 0x10 と 0x40 が有効になっていない場合でも、制約に関連するインデックスもレプリケートされます。 |
0x100 1 |
定義されている場合、テーブル アーティクル上のユーザー トリガーをレプリケートします。 |
0x200 1 |
外部キー制約をレプリケートします。 参照先テーブルがパブリケーションの一部でない場合、パブリッシュされたテーブルに対するすべての外部キー制約はレプリケートされません。 |
0x400 1 |
check 制約をレプリケートします。 |
0x800 1 |
既定値をレプリケートします。 |
0x1000 |
列レベルの照合順序をレプリケートします。 注: Oracle パブリッシャーで大文字と小文字を区別する比較を有効にするには、このオプションを設定する必要があります。 |
0x2000 1 |
パブリッシュされたアーティクル ソース オブジェクトに関連付けられている拡張プロパティをレプリケートします。 |
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 |
8,000 バイトを超える共通言語ランタイム (CLR) ユーザー定義型 (UDT) を varbinary(max) に変換し、UDT 型の列を SQL Server 2005 (9.x) を実行しているサブスクライバーにレプリケートできるようにします。 |
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 型の列にインデックスをレプリケートします。 |
0x20000000000 |
列の SPARSE 属性をレプリケートします。 この属性の詳細については、「 スパース列の使用を参照してください。 |
0x40000000000 |
スナップショット エージェントによるスクリプト作成を有効にして、サブスクライバーにメモリ最適化テーブルを作成します。 |
0x80000000000 |
メモリ最適化アーティクルのクラスター化インデックスを非クラスター化インデックスに変換します。 |
0x400000000000 |
非クラスター化列ストア インデックスをテーブルにレプリケートします。 |
0x800000000000 |
フィルター処理された非クラスター化列ストア インデックスをテーブルにレプリケートします。 |
NULL |
レプリケーションでは、 @schema_option が既定値に自動的に設定され、その値は他のアーティクルのプロパティに依存します。 [解説] セクションの [既定のスキーマ オプション] テーブルには、アーティクルの種類とレプリケーションの種類に基づく既定のスキーマ オプションが表示されます。 SQL Server 以外のパブリケーションの既定値は 0x050D3 です。 |
1 Oracle パブリッシャーではサポートされていません。
すべての @schema_option 値が、すべての種類のレプリケーションとアーティクルの種類に対して有効であるわけではありません。 「解説」セクションの「 Valid Schema Options 」テーブルには、アーティクルの種類とレプリケーションの種類の組み合わせに基づいて選択できる有効なスキーマ オプションが示されています。
[ @destination_owner = ] N'destination_owner'
目的のオブジェクトの所有者名。 @destination_owner は sysname で、既定値は NULL
です。 @destination_ownerが指定されていない場合、所有者は次の規則に基づいて自動的に指定されます。
条件 | 対象オブジェクトの所有者 |
---|---|
パブリケーションでは、ネイティブ モードの一括コピーを使用して、SQL Server サブスクライバーのみをサポートする初期スナップショットが生成されます。 | 既定値は @source_owner の値です。 |
SQL Server 以外のパブリッシャーから発行されます。 | 既定では、コピー先データベースの所有者が使用されます。 |
パブリケーションでは、文字モードの一括コピーを使用して、SQL Server 以外のサブスクライバーをサポートする初期スナップショットが生成されます。 | 割り当てられていません。 |
SQL Server 以外のサブスクライバーをサポートするには、 @destination_owner を NULL
する必要があります。
[ @status = ] status
アーティクルがアクティブかどうかを指定し、変更を反映する方法に関する追加のオプションを指定します。 @status は tinyint であり、 |(ビットごとの OR) これらの値の 1 つ以上の積。
値 | 説明 |
---|---|
1 |
アーティクルがアクティブです。 |
8 |
INSERT ステートメントに列名を含めます。 |
16 (既定) |
パラメーター化されたステートメントを使用します。 |
24 |
INSERT ステートメントに列名を含め、パラメーター化されたステートメントを使用します。 |
64 |
単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。 |
たとえば、パラメーター化されたステートメントを使用するアクティブなアーティクルでは、この列の値は 17
になります。 0
値は、アーティクルが非アクティブであり、追加のプロパティが定義されていないことを意味します。
[ @source_owner = ] N'source_owner'
ソース オブジェクトの所有者。 @source_owner は sysname で、既定値は NULL
です。 @source_owner は Oracle パブリッシャーに対して指定する必要があります。
[ @sync_object_owner = ] N'sync_object_owner'
パブリッシュされたアーティクルを定義するビューの所有者。 @sync_object_owner は sysname で、既定値は NULL
です。
[ @filter_owner = ] N'filter_owner'
フィルターの所有者。 @filter_owner は sysname で、既定値は NULL
です。
[ @source_object = ] N'source_object'
パブリッシュするデータベース オブジェクト。 @source_object は sysname で、既定値は NULL
です。 @source_tableがNULL
されている場合、@source_objectはNULL
できません。 @source_tableの代わりに、@source_objectを使用する必要があります。 スナップショット レプリケーションまたはトランザクション レプリケーションを使用してパブリッシュできるオブジェクトの種類の詳細については、「 データ オブジェクトとデータベース オブジェクトのパブリッシュを参照してください。
[ @artid = ] artid OUTPUT
新しい記事のアーティクル ID。 @artid は、 int 型の OUTPUT パラメーターです。
[ @auto_identity_range = ] N'auto_identity_range'
パブリケーションの作成時に、パブリケーションの ID 範囲の自動処理を有効または無効にします。 @auto_identity_range は nvarchar(5)であり、次のいずれかの値を指定できます。
値 | 説明 |
---|---|
true |
ID 範囲の自動処理を有効にします |
false |
自動 ID 範囲処理を無効にします。 |
NULL (既定) |
ID 範囲の処理は、 @identityrangemanagementoptionによって設定されます。 |
Note
@auto_identity_range は非推奨であり、下位互換性のみを目的として提供されています。 ID 範囲管理オプションを指定するには、 @identityrangemanagementoption を使用する必要があります。 詳細については、「Replicate Identity Columns」 (ID 列のレプリケート) を参照してください。
[ @pub_identity_range = ] pub_identity_range
アーティクルが auto または @auto_identity_range true に設定@identityrangemanagementoption場合に、パブリッシャーの範囲サイズを制御。 @pub_identity_range は bigint で、既定値は NULL
です。 @pub_identity_range は Oracle パブリッシャーではサポートされていません。
[ @identity_range = ] identity_range
アーティクルが auto または @auto_identity_range true に設定@identityrangemanagementoption場合にサブスクライバーの範囲サイズを制御します。 @identity_range は bigint で、既定値は NULL
です。 @auto_identity_rangeが true に設定されている場合に使用されます。 @identity_range は Oracle パブリッシャーではサポートされていません。
[ @threshold = ] しきい値
ディストリビューション エージェントがどの時点で新しい ID 範囲を割り当てるかを制御するパーセンテージの値です。 @thresholdで指定された値の割合を使用すると、ディストリビューション エージェントによって新しい ID 範囲が作成されます。 @threshold は int で、既定値は NULL
です。 @identityrangemanagementoptionが auto または @auto_identity_range が true に設定されている場合に使用。 @threshold は Oracle パブリッシャーではサポートされていません。
[ @force_invalidate_snapshot = ] force_invalidate_snapshot
このストアド プロシージャによって実行されたアクションによって、既存のスナップショットが無効になる可能性があることを確認します。 @force_invalidate_snapshot は ビットで、既定値は 0
です。
0
は、アーティクルを追加してもスナップショットが無効にならないことを指定します。 変更に新しいスナップショットが必要であることをストアド プロシージャが検出すると、エラーが発生し、変更は加えられません。1
は、アーティクルを追加するとスナップショットが無効になる可能性があり、新しいスナップショットを必要とするサブスクリプションが存在する場合は、既存のスナップショットを古いスナップショットとしてマークし、新しいスナップショットを生成するためのアクセス許可を付与します。
[ @use_default_datatypes = ] use_default_datatypes
Oracle パブリッシャーからアーティクルを発行するときに、既定の列データ型マッピングを使用するかどうかを指定します。 @use_default_datatypes は bit で、既定値は 1
です。
1
= 既定のアーティクル列マッピングが使用されます。 既定のデータ型マッピングは、 sp_getdefaultdatatypemappingを実行することで表示できます。0
= カスタム アーティクル列マッピングが定義されているため、 sp_articleview はsp_addarticle
によって呼び出されません。
@use_default_datatypesが 0
に設定されている場合は、既定から変更される列マッピングごとにsp_changearticlecolumndatatypeを 1 回実行する必要があります。 すべてのカスタム列マッピングが定義されたら、 sp_articleviewを実行する必要があります。
Note
このパラメーターは、Oracle パブリッシャーにのみ使用してください。 0
に設定すると、エラーが発生します。
[ @identityrangemanagementoption = ] N'identityrangemanagementoption'
アーティクルの ID 範囲管理の処理方法を指定します。 @identityrangemanagementoption は nvarchar(10)であり、次のいずれかの値を指定できます。
値 | 説明 |
---|---|
none |
明示的な ID 範囲の管理は行われません。 このオプションは、以前のバージョンの SQL Server との下位互換性のためにのみ推奨されます。 ピア レプリケーションは許可されません。 |
manual |
NOT FOR REPLICATION を使用して ID 列をマークし、手動での ID 範囲の処理を有効にします。 |
auto |
ID 範囲の自動管理を指定します。 |
NULL (既定) |
既定値は、@auto_identity_rangeの値がtrue されていない場合にnone します。 既定では、ピアツーピア トポロジの既定値に manual します (@auto_identity_range は無視されます)。 |
下位互換性のために、 @identityrangemanagementoption の値が NULL
されると、 @auto_identity_range の値がチェックされます。 ただし、 @identityrangemanagementoption の値が NULL
されていない場合、 @auto_identity_range の値は無視されます。
詳細については、「Replicate Identity Columns」 (ID 列のレプリケート) を参照してください。
[ @publisher = ] N'publisher'
SQL Server 以外のパブリッシャーを指定します。 @publisher は sysname で、既定値は NULL
です。
@publisher は、SQL Server パブリッシャーにアーティクルを追加するときに使用しないでください。
[ @fire_triggers_on_snapshot = ] N'fire_triggers_on_snapshot'
初期スナップショットが適用されたときにレプリケートされたユーザー トリガーが実行される場合。 @fire_triggers_on_snapshot は nvarchar(5) で、既定値は false
です。 true
は、スナップショットが適用されるときに、レプリケートされたテーブルに対するユーザー トリガーが実行されることを意味します。 トリガーをレプリケートするには、 @schema_option のビットマスク値に 0x100
値を含める必要があります。
リターン コードの値
0
(成功) または 1
(失敗)。
解説
sp_addarticle
は、スナップショット レプリケーションまたはトランザクション レプリケーションで使用されます。
既定では、レプリケーションで列データ型がサポートされていない場合、レプリケーションではソース テーブル内の列は発行されません。 このような列を発行する必要がある場合は、 sp_articlecolumn 実行して列を追加する必要があります。
ピアツーピア トランザクション レプリケーションをサポートするパブリケーションにアーティクルを追加する場合、次の制限が適用されます。
パラメーター化されたステートメントは、すべてのログベースアーティクルに対して指定する必要があります。 @status値には
16
を含める必要があります。コピー先テーブルの名前と所有者は、ソース テーブルと一致している必要があります。
記事を水平方向または垂直方向にフィルター処理することはできません。
ID 範囲の自動管理はサポートされていません。 @identityrangemanagementoptionには manual の値を指定する必要があります。
テーブルに timestamp 列が存在する場合は、 @schema_option に0x08を含め、列を timestamp としてレプリケートする必要があります。
SQL
の値は、@ins_cmd、@upd_cmd、および@del_cmdに指定できません。
詳細については、「 ピア間 - トランザクション レプリケーション」を参照してください。
オブジェクトをパブリッシュすると、その定義がサブスクライバーにコピーされます。 1 つ以上の他のオブジェクトに依存するデータベース オブジェクトをパブリッシュする場合は、参照されているすべてのオブジェクトをパブリッシュする必要があります。 たとえば、テーブルに依存しているビューをパブリッシュする場合は、そのテーブルもパブリッシュする必要があります。
@vertical_partitionが true に設定されている場合、sp_addarticle
はsp_articleviewが呼び出されるまで (最後のsp_articlecolumnが追加されるまで) ビューの作成を延期します。
パブリケーションでサブスクリプションの更新が許可され、パブリッシュされたテーブルに uniqueidentifier 列がない場合は、sp_addarticle
uniqueidentifier 列がテーブルに自動的に追加されます。
SQL Server のインスタンスではないサブスクライバーにレプリケートする場合 (異種レプリケーション)、 INSERT
、 UPDATE
、および DELETE
コマンドでは Transact-SQL ステートメントのみがサポートされます。
ログ リーダー エージェントが実行されている場合、ピア ツー ピア パブリケーションにアーティクルを追加すると、ログ リーダー エージェントとアーティクルを追加するプロセスの間でデッドロックが発生する可能性があります。 この問題を回避するには、ピアツーピア パブリケーションにアーティクルを追加する前に、レプリケーション モニターを使用して、アーティクルを追加するノードでログ リーダー エージェントを停止します。 記事を追加した後、ログ リーダー エージェントを再起動します。
@del_cmdをNONE
に設定するか、@ins_cmdをNONE
に設定すると、UPDATE
コマンドの伝達も、有界更新が発生したときにそれらのコマンドを送信しないことによって影響を受ける可能性があります。 (有界更新は、サブスクライバーのDELETE
/INSERT
ペアとしてレプリケートするパブリッシャーからのUPDATE
ステートメントの種類です)。
既定のスキーマ オプション
次の表では、 @schema_options がユーザーによって指定されていない場合に、レプリケーションによって設定される既定値について説明します。この値は、レプリケーションの種類 (上部に表示) とアーティクルの種類 (最初の列の下に表示) によって異なります。
記事の種類 | トランザクション レプリケーション | スナップショット レプリケーション |
---|---|---|
集計スキーマのみ | 0x01 |
0x01 |
func スキーマのみ | 0x01 |
0x01 |
インデックス付きビュー スキーマのみ | 0x01 |
0x01 |
インデックス付きビューのログベース | 0x30F3 |
0x3071 |
indexed view logbase manualboth | 0x30F3 |
0x3071 |
インデックス付きビューのログベースの手動フィルター | 0x30F3 |
0x3071 |
インデックス付きビューの logbased manualview | 0x30F3 |
0x3071 |
logbased | 0x30F3 |
0x3071 |
logbased manualfilter | 0x30F3 |
0x3071 |
logbased manualview | 0x30F3 |
0x3071 |
proc exec | 0x01 |
0x01 |
proc スキーマのみ | 0x01 |
0x01 |
serializable proc exec | 0x01 |
0x01 |
ビュー スキーマのみ | 0x01 |
0x01 |
Note
パブリケーションでキュー更新が有効になっている場合、0x80
の@schema_option値が、表に示されている既定値に追加されます。 SQL Server 以外のパブリケーションの既定の @schema_option は 0x050D3
。
有効なスキーマ オプション
次の表では、レプリケーションの種類 (上部に表示) とアーティクルの種類 (最初の列の下に表示) に基づいて、 @schema_option の許容値について説明します。
記事の種類 | トランザクション レプリケーション | スナップショット レプリケーション |
---|---|---|
logbased | すべてのオプション | すべてのオプション 0x02 |
logbased manualfilter | すべてのオプション | すべてのオプション 0x02 |
logbased manualview | すべてのオプション | すべてのオプション 0x02 |
インデックス付きビューのログベース | すべてのオプション | すべてのオプション 0x02 |
インデックス付きビューのログベースの手動フィルター | すべてのオプション | すべてのオプション 0x02 |
インデックス付きビューの logbased manualview | すべてのオプション | すべてのオプション 0x02 |
indexed view logbase manualboth | すべてのオプション | すべてのオプション 0x02 |
proc exec | 0x01 、 0x20 、 0x2000 、 0x400000 、 0x800000 、 0x2000000 、 0x8000000 、 0x10000000 、 0x20000000 、 0x40000000 、および 0x80000000 |
0x01 、 0x20 、 0x2000 、 0x400000 、 0x800000 、 0x2000000 、 0x8000000 、 0x10000000 、 0x20000000 、 0x40000000 、および 0x80000000 |
serializable proc exec | 0x01 、 0x20 、 0x2000 、 0x400000 、 0x800000 、 0x2000000 、 0x8000000 、 0x10000000 、 0x20000000 、 0x40000000 、および 0x80000000 |
0x01 、 0x20 、 0x2000 、 0x400000 、 0x800000 、 0x2000000 、 0x8000000 、 0x10000000 、 0x20000000 、 0x40000000 、および 0x80000000 |
proc スキーマのみ | 0x01 、 0x20 、 0x2000 、 0x400000 、 0x800000 、 0x2000000 、 0x8000000 、 0x10000000 、 0x20000000 、 0x40000000 、および 0x80000000 |
0x01 、 0x20 、 0x2000 、 0x400000 、 0x800000 、 0x2000000 、 0x8000000 、 0x10000000 、 0x20000000 、 0x40000000 、および 0x80000000 |
ビュー スキーマのみ | 0x01 、 0x010 、 0x020 、 0x040 、 0x0100 、 0x2000 、 0x40000 、 0x100000 、 0x200000 、 0x400000 、 0x800000 、 0x2000000 、 0x8000000 、 0x40000000 、および 0x80000000 |
0x01 、 0x010 、 0x020 、 0x040 、 0x0100 、 0x2000 、 0x40000 、 0x100000 、 0x200000 、 0x400000 、 0x800000 、 0x2000000 、 0x8000000 、 0x40000000 、および 0x80000000 |
func スキーマのみ | 0x01 、 0x20 、 0x2000 、 0x400000 、 0x800000 、 0x2000000 、 0x8000000 、 0x10000000 、 0x20000000 、 0x40000000 、および 0x80000000 |
0x01 、 0x20 、 0x2000 、 0x400000 、 0x800000 、 0x2000000 、 0x8000000 、 0x10000000 、 0x20000000 、 0x40000000 、および 0x80000000 |
インデックス付きビュー スキーマのみ | 0x01 、 0x010 、 0x020 、 0x040 、 0x0100 、 0x2000 、 0x40000 、 0x100000 、 0x200000 、 0x400000 、 0x800000 、 0x2000000 、 0x8000000 、 0x40000000 、および 0x80000000 |
0x01 、 0x010 、 0x020 、 0x040 、 0x0100 、 0x2000 、 0x40000 、 0x100000 、 0x200000 、 0x400000 、 0x800000 、 0x2000000 、 0x8000000 、 0x40000000 、および 0x80000000 |
Note
キュー更新パブリケーションの場合、0x8000
と0x80
の@schema_option値を有効にする必要があります。 SQL Server 以外のパブリケーションでサポートされている @schema_option 値は、 0x01
、 0x02
、 0x10
、 0x40
、 0x80
、 0x1000
、 0x4000
、および 0X8000
です。
例
DECLARE @publication AS sysname;
DECLARE @table AS sysname;
DECLARE @filterclause AS nvarchar(500);
DECLARE @filtername AS nvarchar(386);
DECLARE @schemaowner AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @table = N'Product';
SET @filterclause = N'[DiscontinuedDate] IS NULL';
SET @filtername = N'filter_out_discontinued';
SET @schemaowner = N'Production';
-- Add a horizontally and vertically filtered article for the Product table.
-- Manually set @schema_option to ensure that the Production schema
-- is generated at the Subscriber (0x8000000).
EXEC sp_addarticle
@publication = @publication,
@article = @table,
@source_object = @table,
@source_owner = @schemaowner,
@schema_option = 0x80030F3,
@vertical_partition = N'true',
@type = N'logbased',
@filter_clause = @filterclause;
-- (Optional) Manually call the stored procedure to create the
-- horizontal filtering stored procedure. Since the type is
-- 'logbased', this stored procedures is executed automatically.
EXEC sp_articlefilter
@publication = @publication,
@article = @table,
@filter_clause = @filterclause,
@filter_name = @filtername;
-- Add all columns to the article.
EXEC sp_articlecolumn
@publication = @publication,
@article = @table;
-- Remove the DaysToManufacture column from the article
EXEC sp_articlecolumn
@publication = @publication,
@article = @table,
@column = N'DaysToManufacture',
@operation = N'drop';
-- (Optional) Manually call the stored procedure to create the
-- vertical filtering view. Since the type is 'logbased',
-- this stored procedures is executed automatically.
EXEC sp_articleview
@publication = @publication,
@article = @table,
@filter_clause = @filterclause;
GO
アクセス許可
sysadmin固定サーバー ロールまたは固定データベース ロールdb_ownerのメンバーのみがsp_addarticle
を実行できます。