sp_changearticle (Transact-SQL)
適用対象: SQL Server Azure SQL Managed Instance
トランザクション パブリケーションまたはスナップショット パブリケーション内のアーティクルのプロパティを変更します。 このストアド プロシージャは、パブリッシャー側のパブリケーション データベースで実行されます。
構文
sp_changearticle
[ [ @publication = ] N'publication' ]
[ , [ @article = ] N'article' ]
[ , [ @property = ] N'property' ]
[ , [ @value = ] N'value' ]
[ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
[ , [ @force_reinit_subscription = ] force_reinit_subscription ]
[ , [ @publisher = ] N'publisher' ]
[ ; ]
引数
[ @publication = ] N'publication'
アーティクルを含むパブリケーションの名前。 @publication は sysname で、既定値は NULL
です。
[ @article = ] N'article'
プロパティを変更するアーティクルの名前。 @article は sysname で、既定値は NULL
です。
[ @property = ] N'property'
変更するアーティクル プロパティ。 @property は nvarchar(100) で、既定値は NULL
です。
[ @value = ] N'value'
アーティクル プロパティの新しい値。 @value は nvarchar(255) で、既定値は NULL
です。
次の表では、アーティクルのプロパティとそれらのプロパティの値について説明します。
プロパティ | 値 | 説明 |
---|---|---|
creation_script |
ターゲット テーブルの作成に使用するアーティクル スキーマ スクリプトのパスと名前。 既定値は、NULL です。 |
|
del_cmd |
DELETE 実行するステートメント。それ以外の場合は、ログから構築されます。 |
|
description |
記事の新しい説明エントリ。 | |
dest_object |
これは旧バージョンとの互換性のために用意されています。 dest_table を使用してください。 |
|
dest_table |
新しい変換先テーブル。 | |
destination_owner |
コピー先オブジェクトの所有者の名前。 | |
filter |
テーブルをフィルターによって選択 (行方向のフィルター選択) するために使用される新しいストアド プロシージャです。 既定値は、NULL です。 ピアツーピア レプリケーションのパブリケーションでは変更できません。 |
|
fire_triggers_on_snapshot |
true |
レプリケートされたユーザー トリガーは、初期スナップショットが適用されるときに実行されます。 注: トリガーをレプリケートするには、 schema_option のビットマスク値に 0x100 値を含める必要があります。 |
false |
レプリケートされたユーザー トリガーは、初期スナップショットが適用されるときに実行されません。 | |
identity_range |
サブスクライバーで割り当てられた、割り当て済みの ID 範囲のサイズを管理します。 ピア ツー ピア レプリケーションではサポートされません。 | |
ins_cmd |
INSERT 実行するステートメント。それ以外の場合は、ログから構築されます。 |
|
pre_creation_cmd |
同期が適用される前に、コピー先テーブルを削除、削除、または切り捨てることができる事前作成コマンド。 | |
none |
コマンドを使用しません。 | |
drop |
コピー先テーブルを削除します。 | |
delete |
コピー先テーブルを削除します。 | |
truncate |
コピー先テーブルを切り捨てます。 | |
pub_identity_range |
サブスクライバーで割り当てられた、割り当て済みの ID 範囲のサイズを管理します。 ピア ツー ピア レプリケーションではサポートされません。 | |
schema_option |
特定のアーティクルのスキーマ生成オプションのビットマップを指定します。 schema_option は binary(8)です。 詳細については、「解説」を参照してください。 |
|
0x00 |
スナップショット エージェントによるスクリプト作成を無効にします。 | |
0x01 |
オブジェクトの作成 (CREATE TABLE 、 CREATE PROCEDURE など) を生成します。 |
|
0x02 |
定義されている場合、アーティクルの変更を反映するストアド プロシージャを生成します。 | |
0x04 |
ID 列は、 IDENTITY プロパティを使用してスクリプト化されます。 |
|
0x08 |
timestamp 列をレプリケートします。 設定されていない場合、 timestamp 列は binary としてレプリケートされます。 | |
0x10 |
対応するクラスター化インデックスを生成します。 | |
0x20 |
ユーザー定義データ型 (UDT) をサブスクライバーの基本データ型に変換します。 UDT 列に CHECK 制約または DEFAULT 制約がある場合、UDT 列が主キーの一部である場合、または計算列が UDT 列を参照している場合は、このオプションを使用できません。 Oracle パブリッシャーではサポートされていません。 |
|
0x40 |
対応する非クラスター化インデックスを生成します。 | |
0x80 |
宣言された参照整合性を主キーに含めます。 | |
0x100 |
定義されている場合、テーブル アーティクル上のユーザー トリガーをレプリケートします。 | |
0x200 |
FOREIGN KEY 制約をレプリケートします。 参照先テーブルがパブリケーションの一部でない場合、パブリッシュされたテーブルのすべての FOREIGN KEY 制約はレプリケートされません。 |
|
0x400 |
CHECK 制約をレプリケートします。 |
|
0x800 |
既定値をレプリケートします。 | |
0x1000 |
列レベルの照合順序をレプリケートします。 | |
0x2000 |
パブリッシュされたアーティクル ソース オブジェクトに関連付けられている拡張プロパティをレプリケートします。 | |
0x4000 |
テーブル アーティクルで定義されている場合は、一意のキーをレプリケートします。 | |
0x8000 |
ALTER TABLE ステートメントを使用して、テーブル アーティクルの主キーと一意キーを制約としてレプリケートします。注: このオプションは非推奨です。 代わりに、 0x80 および 0x4000 を使用してください。 |
|
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 |
メモリ最適化アーティクルのクラスター化インデックスを非クラスター化インデックスに変換します。 | |
status |
プロパティの新しい状態を指定します。 | |
dts horizontal partitions |
単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。 | |
include column names |
列名は、レプリケートされた INSERT ステートメントに含まれます。 |
|
no column names |
レプリケートされた INSERT ステートメントには列名は含まれません。 |
|
no dts horizontal partitions |
アーティクルの水平パーティションは、変換可能なサブスクリプションによって定義されていません。 | |
none |
sysarticles テーブル内のすべての状態オプションをクリアし、アーティクルを非アクティブとしてマークします。 | |
parameters |
パラメーター化コマンドを使用して、変更がサブスクライバーに反映されます。 これは新しいアーティクルに対する既定値です。 | |
string literals |
変更は、文字列リテラル値を使用してサブスクライバーに反映されます。 | |
sync_object |
同期出力ファイルの生成に使用されるテーブルまたはビューの名前。 既定値は、NULL です。 Oracle パブリッシャーではサポートされていません。 |
|
tablespace |
Oracle データベースからパブリッシュされたアーティクルのログ テーブルによって使用されたテーブルスペースを識別します。 詳細については、「Manage Oracle Tablespaces」 (Oracle テーブルスペースの管理) を参照してください。 | |
threshold |
ディストリビューション エージェントがどの時点で新しい ID 範囲を割り当てるかを制御するパーセンテージの値です。 ピア ツー ピア レプリケーションではサポートされません。 | |
type |
Oracle パブリッシャーではサポートされていません。 | |
logbased |
ログベースの記事。 | |
logbased manualboth |
手動フィルターと手動ビューを含むログ ベースの記事。 このオプションでは、 sync_object プロパティと filter プロパティも設定する必要があります。 Oracle パブリッシャーではサポートされていません。 |
|
logbased manualfilter |
手動フィルターを使用したログベースの記事。 このオプションでは、 sync_object プロパティと filter プロパティも設定する必要があります。 Oracle パブリッシャーではサポートされていません。 |
|
logbased manualview |
手動ビューを使用する、ログベースのアーティクルです。 このオプションでは、 sync_object プロパティも設定する必要があります。 Oracle パブリッシャーではサポートされていません。 |
|
indexed viewlogbased |
ログ ベースのインデックス付きビューに関する記事。 Oracle パブリッシャーではサポートされていません。 この種の記事では、ベース テーブルを個別に発行する必要はありません。 | |
indexed viewlogbased manualboth |
手動フィルターと手動ビューを使用する、ログベースのインデックス付きビュー アーティクルです。 このオプションでは、 sync_object プロパティと filter プロパティも設定する必要があります。 この種の記事では、ベース テーブルを個別に発行する必要はありません。 Oracle パブリッシャーではサポートされていません。 |
|
indexed viewlogbased manualfilter |
手動フィルターを使用したログ ベースのインデックス付きビューアーティクル。 このオプションでは、 sync_object プロパティと filter プロパティも設定する必要があります。 この種の記事では、ベース テーブルを個別に発行する必要はありません。 Oracle パブリッシャーではサポートされていません。 |
|
indexed viewlogbased manualview |
手動ビューを使用する、ログベースのインデックス付きビュー アーティクルです。 このオプションでは、 sync_object プロパティも設定する必要があります。 この種の記事では、ベース テーブルを個別に発行する必要はありません。 Oracle パブリッシャーではサポートされていません。 |
|
upd_cmd |
UPDATE 実行するステートメント。それ以外の場合は、ログから構築されます。 |
|
NULL |
NULL |
変更できるアーティクル プロパティの一覧を返します。 |
[ @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 」セクションを参照してください。
[ @publisher = ] N'publisher'
SQL Server 以外のパブリッシャーを指定します。 @publisher は sysname で、既定値は NULL
です。
Note
パブリッシャー SQL Server パブリッシャーでアーティクルのプロパティを変更する場合は使用しないでください。
リターン コードの値
0
(成功) または 1
(失敗)。
解説
sp_changearticle
は、スナップショット レプリケーションとトランザクション レプリケーションで使用されます。
アーティクルがピア ツー ピア トランザクション レプリケーションをサポートするパブリケーションに属している場合は、 description
、 ins_cmd
、 upd_cmd
、および del_cmd
のプロパティのみを変更できます。
次のいずれかのプロパティを変更するには、新しいスナップショットが生成される必要があります。また、@force_invalidate_snapshot パラメーターに 1
の値を指定する必要があります。
del_cmd
dest_table
destination_owner
ins_cmd
pre_creation_cmd
schema_options
upd_cmd
次のいずれかのプロパティを変更するには、既存のサブスクリプションを再初期化する必要があり、@force_reinit_subscription パラメーターに 1
の値を指定する必要があります。
del_cmd
dest_table
destination_owner
filter
ins_cmd
status
upd_cmd
既存のパブリケーション内では、 sp_changearticle
を使用してアーティクルを変更できます。パブリケーション全体を削除して再作成する必要はありません。
Note
schema_option
の値を変更しても、システムはビットごとの更新を実行しません。 つまり、sp_changearticle
を使用してschema_option
を設定すると、既存のビット設定がオフになる可能性があります。 既存の設定を保持するには、 |(ビットごとの OR) 設定する値と schema_option
の現在の値の間。これは、 sp_helparticleの実行によって決定できます。
有効なスキーマ オプション
次の表では、レプリケーションの種類 (上部に表示) とアーティクルの種類 (最初の列の下に表示) に基づいて、 schema_option
の許容値について説明します。
記事の種類 | レプリケーションの種類 - トランザクション | レプリケーションの種類 - スナップショット |
---|---|---|
logbased |
すべてのオプション | すべてのオプション 0x02 |
logbased manualfilter |
すべてのオプション | すべてのオプション 0x02 |
logbased manualview |
すべてのオプション | すべてのオプション 0x02 |
indexed view logbased |
すべてのオプション | すべてのオプション 0x02 |
indexed view logbased manualfilter |
すべてのオプション | すべてのオプション 0x02 |
indexed view 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 schema only |
0x01 、 0x20 、 0x2000 、 0x400000 、 0x800000 、 0x2000000 、 0x8000000 、 0x10000000 、 0x20000000 、 0x40000000 、および 0x80000000 |
0x01 、 0x20 、 0x2000 、 0x400000 、 0x800000 、 0x2000000 、 0x8000000 、 0x10000000 、 0x20000000 、 0x40000000 、および 0x80000000 |
view schema only |
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 schema only |
0x01 、 0x20 、 0x2000 、 0x400000 、 0x800000 、 0x2000000 、 0x8000000 、 0x10000000 、 0x20000000 、 0x40000000 、および 0x80000000 |
0x01 、 0x20 、 0x2000 、 0x400000 、 0x800000 、 0x2000000 、 0x8000000 、 0x10000000 、 0x20000000 、 0x40000000 、および 0x80000000 |
indexed view schema only |
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
キュー更新パブリケーションの場合、0x80
のschema_option
値を有効にする必要があります。 SQL Server 以外のパブリケーションでサポートされている schema_option
値は、 0x01
、 0x02
、 0x10
、 0x40
、 0x80
、 0x1000
、 0x4000
です。
例
DECLARE @publication AS sysname;
DECLARE @article AS sysname;
DECLARE @option AS int;
SET @publication = N'AdvWorksProductTran';
SET @article = N'Product';
SET @option = (SELECT CAST(0x0000000002030073 AS int));
-- Change the schema options to replicate schema with XML.
USE [AdventureWorks2022]
EXEC sp_changearticle
@publication = @publication,
@article = @article,
@property = N'schema_option',
@value = @option,
@force_invalidate_snapshot = 1;
GO
アクセス許可
sysadmin固定サーバー ロールまたは固定データベース ロールdb_ownerのメンバーのみがsp_changearticle
を実行できます。