sp_changepublication (Transact-SQL)
適用対象: SQL Server Azure SQL Managed Instance
パブリケーションのプロパティを変更します。 このストアド プロシージャは、パブリッシャー側のパブリケーション データベースで実行されます。
構文
sp_changepublication
[ [ @publication = ] N'publication' ]
[ , [ @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
です。
[ @property = ] N'property'
変更するパブリケーション プロパティ。 @property は nvarchar(255) で、既定値は NULL
です。
[ @value = ] N'value'
新しいプロパティ値です。 @value は nvarchar(255) で、既定値は NULL
です。
次の表に、変更可能なパブリケーションのプロパティと、プロパティの値に関する制限を示します。
プロパティ | 値 | 説明 |
---|---|---|
allow_anonymous |
true |
特定のパブリケーションに対して匿名サブスクリプションを作成できます。また、 immediate_sync も true する必要があります。 ピアツーピア パブリケーションでは変更できません。 |
false |
特定のパブリケーションに対して匿名サブスクリプションを作成することはできません。 ピアツーピア パブリケーションでは変更できません。 | |
allow_initialize_from_backup |
true |
サブスクライバーでは、初期スナップショットではなくバックアップから、このパブリケーションへのサブスクリプションを初期化できます。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。 |
false |
サブスクライバーは、初期スナップショットを使用する必要があります。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。 | |
allow_partition_switch |
true |
ALTER TABLE...SWITCH ステートメントは、パブリッシュされたデータベースに対して実行できます。 詳細については、「パーティション テーブルとパーティション インデックスのレプリケート」を参照してください。 |
false |
ALTER TABLE...SWITCH ステートメントは、パブリッシュされたデータベースに対して実行できません。 |
|
allow_pull |
true |
特定のパブリケーションに対してプル サブスクリプションを使用できます。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。 |
false |
特定のパブリケーションに対してプル サブスクリプションを使用することはできません。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。 | |
allow_push |
true |
指定したパブリケーションに対してプッシュ サブスクリプションを許可します。 |
false |
特定のパブリケーションに対してプッシュ サブスクリプションを使用することはできません。 | |
allow_subscription_copy |
true |
このパブリケーションをサブスクライブするデータベースをコピーできるようにします。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。 |
false |
このパブリケーションにサブスクライブするデータベースをコピーできないようにします。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。 | |
alt_snapshot_folder |
スナップショットの代替フォルダーの場所。 | |
centralized_conflicts |
true |
競合レコードはパブリッシャーに格納されます。 アクティブなサブスクリプションがない場合にのみ変更できます。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。 |
false |
競合レコードは、競合の原因となったパブリッシャーとサブスクライバーの両方に保存されます。 アクティブなサブスクリプションがない場合にのみ変更できます。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。 | |
compress_snapshot |
true |
代替スナップショット フォルダーにあるスナップショットは .cab ファイル形式に圧縮されます。 既定のスナップショット フォルダー内のスナップショットは圧縮できません。 |
false |
スナップショットは圧縮されません。これはレプリケーションの既定の動作です。 | |
conflict_policy |
pub wins |
パブリッシャーが競合で優先される場合に、サブスクライバーの更新で競合を解決する方法です。 このプロパティは、アクティブなサブスクリプションがない場合にのみ変更できます。 Oracle パブリッシャーではサポートされていません。 |
sub reinit |
サブスクライバーを更新する場合、競合が発生した場合は、サブスクリプションを再初期化する必要があります。 このプロパティは、アクティブなサブスクリプションがない場合にのみ変更できます。 Oracle パブリッシャーではサポートされていません。 | |
sub wins |
サブスクライバーが競合で優先される場合に、サブスクライバーの更新で競合を解決する方法です。 このプロパティは、アクティブなサブスクリプションがない場合にのみ変更できます。 Oracle パブリッシャーではサポートされていません。 | |
conflict_retention |
競合の保持期間を指定する int 値 (日数)。 既定のリテンション期間は 14 日間です。 0 は、競合のクリーンアップは必要ないことを意味します。 Oracle パブリッシャーではサポートされていません。 |
|
description |
パブリケーションを説明する省略可能なエントリ。 | |
enabled_for_het_sub |
true |
パブリケーションで SQL Server 以外のサブスクライバーをサポートできるようにします。 enabled_for_het_sub パブリケーションのサブスクリプションがある場合は変更できません。 enabled_for_het_sub を true に設定する前に、次の要件に準拠するためにsp_changepublicationを実行する必要がある場合があります。- allow_queued_tran は、false である必要があります。- allow_sync_tran は、false である必要があります。enabled_for_het_sub をtrue に変更すると、既存のパブリケーション設定が変更される可能性があります。 詳細については、「 Non-SQL Server Subscribers」を参照してください。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。 |
false |
パブリケーションでは、SQL Server 以外のサブスクライバーはサポートされていません。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。 | |
enabled_for_internet |
true |
パブリケーションはインターネットで有効になっており、ファイル転送プロトコル (FTP) を使用してスナップショット ファイルをサブスクライバーに転送できます。 パブリケーションの同期ファイルは、次のディレクトリに配置されます: C:\Program Files\Microsoft SQL Server\MSSQL\Repldata\ftp 。 ftp_address を NULL にすることはできません。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。 |
false |
インターネットに対してパブリケーションが有効になっていません。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。 | |
enabled_for_p2p |
true |
パブリケーションでは、ピア ツー ピア レプリケーションがサポートされています。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。enabled_for_p2p を true に設定するには、次の制限が適用されます。- allow_anonymous は〘 false - allow_dts は、false である必要があります。- allow_initialize_from_backup は〘 true - allow_queued_tran は、false である必要があります。- allow_sync_tran は、false である必要があります。- enabled_for_het_sub は、false である必要があります。- independent_agent は、true である必要があります。- repl_freq は、continuous である必要があります。- replicate_ddl は、1 である必要があります。 |
false |
パブリケーションはピアツーピア レプリケーションをサポートしていません。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。 | |
ftp_address |
パブリケーション スナップショット ファイルの FTP アクセス可能な場所。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。 | |
ftp_login |
FTP サービスへの接続に使用されるユーザー名と、 anonymous 値が許可されます。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。 |
|
ftp_password |
FTP サービスへの接続に使用するユーザー名のパスワード。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。 | |
ftp_port |
ディストリビューター用 FTP サービスのポート番号。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。 | |
ftp_subdirectory |
パブリケーションで FTP を使用したスナップショットの伝達がサポートされている場合に、スナップショット ファイルを作成する場所を指定します。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。 | |
immediate_sync |
true |
パブリケーションの同期ファイルは、スナップショット エージェントが実行されるたびに作成または再作成されます。 サブスクリプションがサブスクリプションの前に 1 回完了した場合、サブスクライバーはサブスクリプション スナップショット エージェントの直後に同期ファイルを受信できます。 新しいサブスクリプションは、最近実行されたスナップショット エージェントによって生成された最新の同期ファイルを取得します。 independent_agent も true する必要があります。 詳細については、「 即時同期の効果」を参照してください。 |
false |
同期ファイルは、新しいサブスクリプションがある場合にのみ作成されます。 サブスクライバーは、スナップショット エージェントが開始されて完了するまで、サブスクリプションの後に同期ファイルを受信できません。 | |
independent_agent |
true |
パブリケーションに専用のディストリビューション エージェントがあります。 |
false |
パブリケーションでは共有ディストリビューション エージェントが使用されます。パブリケーションおよびサブスクリプション データベースの各ペアには 1 つの共有エージェントがあります。 | |
p2p_continue_onconflict |
true |
競合が検出されると、ディストリビューション エージェントは引き続き変更を処理します。 注意: 既定値の FALSE を使用することをお勧めします。 このオプションを TRUE に設定すると、ディストリビューション エージェントは、最も高い発信元 ID であるノードから競合する行を適用することで、トポロジ内のデータの収束を試みます。 このメソッドでは、収束は保証されません。 競合が検出された後は、トポロジの整合性を確保する必要があります。 詳細については、「 Peer-to-Peer - ピアツーピア レプリケーションでの競合検出の競合の処理」を参照してください。 |
false |
競合が検出されると、ディストリビューション エージェントは変更の処理を停止します。 | |
post_snapshot_script |
ディストリビューション エージェントが実行する Transact-SQL スクリプト ファイルの場所を指定します。このファイルは、他のすべてのレプリケートされたオブジェクト スクリプトとデータが初期同期中に適用された後で実行されます。 | |
pre_snapshot_script |
最初の同期中に他のすべてのレプリケート されたオブジェクト スクリプトとデータが適用される前に、ディストリビューション エージェントが実行する Transact-SQL スクリプト ファイルの場所を指定します。 | |
publish_to_ActiveDirectory |
true |
このパラメーターは非推奨であり、スクリプトの下位互換性のためにのみサポートされています。 Microsoft Active Directory にパブリケーション情報を追加できなくなりました。 |
false |
Active Directory からパブリケーション情報を削除します。 | |
queue_type |
sql |
SQL Server を使用してトランザクションを格納します。 このプロパティは、アクティブなサブスクリプションがない場合にのみ変更できます。 注: Microsoft メッセージ キューの使用のサポートは廃止されました。 @valueに msmq の値を指定すると、エラーが発生します。 |
redirected_publisher |
可用性グループ リスナーの名前。 ピアが可用性グループ内にある場合に、ピアツーピア レプリケーションで使用されます。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。 SQL Server 2019 (15.x) CU 13 で導入されました。 詳細については、「可用性グループの一部として 1 つのピアを構成するまたは可用性グループで両方のピアを構成するを参照してください。 | |
repl_freq |
continuous |
ログ ベースのすべてのトランザクションの出力をパブリッシュします。 |
snapshot |
スケジュールされた同期イベントのみをパブリッシュします。 | |
replicate_ddl |
1 |
パブリッシャーで実行されるデータ定義言語 (DDL) ステートメントがレプリケートされます。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。 |
0 |
DDL ステートメントはレプリケートされません。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。 ピアツーピア レプリケーションを使用している場合、スキーマ変更のレプリケーションを無効にすることはできません。 | |
replicate_partition_switch |
true |
ALTER TABLE...SWITCH パブリッシュされたデータベースに対して実行されるステートメントは、サブスクライバーにレプリケートする必要があります。 このオプションは、 allow_partition_switch が true に設定されている場合にのみ有効です。 詳細については、「パーティション テーブルとパーティション インデックスのレプリケート」を参照してください。 |
false |
ALTER TABLE...SWITCH ステートメントをサブスクライバーにレプリケートしないでください。 |
|
retention |
int サブスクリプション アクティビティの保有期間 (時間単位) を表します。 保持期間内にサブスクリプションがアクティブでない場合は、削除されます。 | |
snapshot_in_defaultfolder |
true |
スナップショット ファイルは、既定のスナップショット フォルダーに格納されます。 alt_snapshot_folder も指定すると、スナップショット ファイルは既定の場所と代替の場所の両方に格納されます。 |
false |
スナップショット ファイルは、 alt_snapshot_folder で指定された別の場所に格納されます。 |
|
status |
active |
パブリケーション データはパブリケーションが作成された直後にサブスクライバーで使用できます。 Oracle パブリッシャーではサポートされていません。 |
inactive |
パブリケーションの作成時にサブスクライバーはパブリケーション データを使用できません。 Oracle パブリッシャーではサポートされていません。 | |
sync_method |
native |
サブスクリプションの同期時に、すべてのテーブルのネイティブ モード一括コピー出力を使用します。 |
character |
サブスクリプションを同期するときに、すべてのテーブルの文字モードの一括コピー出力を使用します。 | |
concurrent |
すべてのテーブルのネイティブ モードの一括コピー プログラム出力を使用しますが、スナップショット生成プロセス中にテーブルをロックしません。 スナップショット レプリケーションでは無効です。 | |
concurrent_c |
すべてのテーブルの文字モードの一括コピー プログラム出力を使用しますが、スナップショット生成プロセス中にテーブルをロックしません。 スナップショット レプリケーションでは無効です。 | |
taskid |
このプロパティは非推奨であり、サポートされなくなりました。 | |
allow_drop |
true |
トランザクション レプリケーション DROP TABLE 一部であるアーティクルの DLL サポートを有効にします。 サポートされている最小バージョン: SQL Server 2014 (12.x) Service Pack 2 以降と SQL Server 2016 (13.x) Service Pack 1 以降。 詳細については、 KB 3170123を参照してください。 |
false (既定) |
トランザクション レプリケーション DROP TABLE 一部であるアーティクルの DLL サポートを無効にします。 |
|
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
は、アーティクルに変更を加えて既存のサブスクリプションを再初期化し、サブスクリプションの再初期化を実行するためのアクセス許可を付与することを指定します。
[ @publisher = ] N'publisher'
SQL Server 以外のパブリッシャーを指定します。 @publisher は sysname で、既定値は NULL
です。
SQL Server パブリッシャーでアーティクルのプロパティを変更する場合は、@publisher を使用しないでください。
リターン コードの値
0
(成功) または 1
(失敗)。
解説
sp_changepublication
は、スナップショット レプリケーションとトランザクション レプリケーションで使用されます。
次のいずれかのプロパティを変更した後、新しいスナップショットを生成し、@force_invalidate_snapshot パラメーターに 1
の値を指定する必要があります。
alt_snapshot_folder
compress_snapshot
enabled_for_het_sub
ftp_address
ftp_login
ftp_password
ftp_port
ftp_subdirectory
post_snapshot_script
pre_snapshot_script
snapshot_in_defaultfolder
sync_mode
publish_to_active_directory
パラメーターを使用して Active Directory 内のパブリケーション オブジェクトを一覧表示するには、SQL Server オブジェクトが Active Directory に既に作成されている必要があります。
即時同期の効果
即時同期がオンの場合、サブスクリプションがない場合でも、初期スナップショットが生成された直後にログ内のすべての変更が追跡されます。 ログに記録された変更は、顧客がバックアップを使用して新しいピア ノードを追加するときに使用されます。 バックアップが復元されると、バックアップの作成後に発生したその他の変更とピアが同期されます。 コマンドはディストリビューション データベースで追跡されるため、同期ロジックは最後にバックアップされた LSN を確認し、これを開始点として使用できます。これは、バックアップが最大リテンション期間内に実行された場合にコマンドが使用可能であることを認識します。 (最小保有期間の既定値は 0 時間、最大保有期間は 24 時間です)。
即時同期がオフの場合、変更は少なくとも最小保有期間を保持し、既にレプリケートされているすべてのトランザクションに対してすぐにクリーンアップされます。 即時同期がオフで、既定の保持期間で構成されている場合、バックアップの作成後に必要な変更がクリーンアップされ、新しいピア ノードが正しく初期化されない可能性があります。 残された唯一のオプションがトポロジの停止です。 即時同期を有効に設定すると、柔軟性が向上するため、これは P2P アプリケーションにお勧めの設定です。
例
DECLARE @publication AS sysname
SET @publication = N'AdvWorksProductTran'
-- Turn off DDL replication for the transactional publication.
USE [AdventureWorks2022]
EXEC sp_changepublication
@publication = @publication,
@property = N'replicate_ddl',
@value = 0
GO
アクセス許可
sysadmin固定サーバー ロールまたは固定データベース ロールdb_ownerのメンバーのみがsp_changepublication
を実行できます。