sp_changepublication (Transact-SQL)

適用対象: SQL ServerAzure SQL Managed Instance

パブリケーションのプロパティを変更します。 このストアド プロシージャは、パブリッシャー側のパブリケーション データベースで実行されます。

Transact-SQL 構文表記規則

構文

sp_changepublication [ [ @publication = ] 'publication' ]  
    [ , [ @property = ] 'property' ]  
    [ , [ @value = ] 'value' ]  
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]  
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]  
    [ , [ @publisher = ] 'publisher' ]

引数

[ @publication = ] 'publication' パブリケーションの名前を指定します。 publicationsysname で、既定値は NULL です。

[ @property = ] 'property' 変更するパブリケーション プロパティです。 プロパティnvarchar(255)です

[ @value = ] 'value' 新しいプロパティ値です。 nvarchar(255)、既定値は NULL です。

次の表に、変更可能なパブリケーションのプロパティと、プロパティの値に関する制限を示します。

プロパティ Value 説明
allow_anonymous true 特定のパブリケーションに対して匿名サブスクリプションを作成できます。また、immediate_syncも true である必要があります。 ピアツーピア パブリケーションでは変更できません。
false 指定されたパブリケーションに対して匿名サブスクリプションを作成することはできません。 ピアツーピア パブリケーションでは変更できません。
allow_initialize_from_backup true サブスクライバーでは、初期スナップショットではなくバックアップから、このパブリケーションへのサブスクリプションを初期化できます。 このプロパティは、Microsoft 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 パブリッシャーではサポートされていません。
説明 パブリケーションを説明する省略可能なエントリ。
enabled_for_het_sub true パブリケーションで SQL Server 以外のサブスクライバーをサポートできるようにします。 パブリケーションのサブスクリプションがある場合、enabled_for_het_subは変更できません。 enabled_for_het_subを true に設定する前に、レプリケーション ストアド プロシージャ (Transact-SQL) を実行して次の要件に準拠することが必要になる場合があります。
- 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は継続的である必要があります。
- 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 である必要があります。 immediate_syncの詳細については、以下の解説を参照してください。
false 同期ファイルは、新しいサブスクリプションがある場合にのみ作成されます。 サブスクライバーは、スナップショット エージェントが開始されて完了するまで、サブスクリプションの後に同期ファイルを受信できません。
independent_agent true パブリケーションに専用のディストリビューション エージェントがあります。
false パブリケーションでは共有ディストリビューション エージェントが使用されます。パブリケーションおよびサブスクリプション データベースの各ペアには 1 つの共有エージェントがあります。
p2p_continue_onconflict true 競合が検出されると、ディストリビューション エージェントは引き続き変更を処理します。
注意: 既定値 FALSEの > を使用することをお勧めします。 このオプションがTRUE設定されている場合、ディストリビューション エージェントは、最も高い発信元 ID を持つノードから競合する行を適用することによって、トポロジ内のデータの収束を試みます。 この方法では、収束は保証されません。 競合が検出された後は、トポロジの整合性を確保する必要があります。 詳細については、「 Conflict Detection in Peer-to-Peer Replication」の「競合の処理」を参照してください。
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 メッセージ キューの使用のサポートは廃止されました。 値に msmq値を指定すると、エラーが発生します。
redirected_publisher 可用性グループ リスナーの名前。 ピアが可用性グループ内にある場合に、ピアツーピア レプリケーションで使用されます。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。 SQL Server 2019 (15.x) CU 13 で導入されました。 詳細については、「可用性グループの一部として 1 つのピアを構成する」または「可用性グループで両方のピアを構成する」を参照してください。
repl_freq 継続的 ログ ベースのすべてのトランザクションの出力をパブリッシュします。
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 ステートメントはサブスクライバーにレプリケートしないでください。
保持 int サブスクリプション アクティビティの保有期間 (時間単位) を表します。 サブスクリプションがリテンション期間内にアクティブでない場合は、削除されます。
snapshot_in_defaultfolder true スナップショット ファイルは、既定のスナップショット フォルダーに格納されます。 alt_スナップショット_folderも指定した場合、スナップショットファイルは既定の場所と別の場所の両方に格納されます。
false スナップショット ファイルは、alt_スナップショット_folderで指定された別の場所に格納されます。
status active パブリケーション データはパブリケーションが作成された直後にサブスクライバーで使用できます。 Oracle パブリッシャーではサポートされていません。
inactive パブリケーションの作成時にサブスクライバーはパブリケーション データを使用できません。 Oracle パブリッシャーではサポートされていません。
sync_method native サブスクリプションの同期時に、すべてのテーブルのネイティブ モード一括コピー出力を使用します。
character サブスクリプションを同期するときに、すべてのテーブルの文字モードの一括コピー出力を使用します。
同時 すべてのテーブルについてネイティブ モード BCP 出力を使用しますが、スナップショット生成処理中にテーブルをロックしません。 スナップショット レプリケーションでは無効です。
concurrent_c すべてのテーブルについてキャラクター モード BCP 出力を使用しますが、スナップショット生成処理中にテーブルをロックしません。 スナップショット レプリケーションでは無効です。
Taskid このプロパティは非推奨となり、サポートされなくなりました。
allow_drop true トランザクション レプリケーションの一部であるアーティクルの DLL サポートを有効にします DROP TABLE 。 サポートされている最小バージョン: SQL Server 2014 (12.x) Service Pack 2 以降と SQL Server 2016 (13.x) Service Pack 1 以降。 その他のリファレンス: KB (キロバイト) 3170123
false トランザクション レプリケーションの DROP TABLE 一部であるアーティクルの DLL サポートを無効にします。 これは、このプロパティの 既定値 です。
NULL (既定値) プロパティでサポートされている値の一覧を 返します

[ @force_invalidate_snapshot = ] force_invalidate_snapshotこのストアド プロシージャによって実行されたアクションによって、既存のスナップショットが無効になる可能性があることを確認します。 force_invalidate_スナップショットは少し、既定値は 0 です

  • 0 は、アーティクルを変更してもスナップショットが無効にならないことを指定します。 変更に新しいスナップショットが必要であるとストアド プロシージャで検出された場合、エラーが発生し、変更は行われません。
  • 1 は、アーティクルを変更すると、スナップショットが無効になる可能性があることを指定します。 新しいスナップショットを必要とする既存のサブスクリプションがある場合、この値は、既存のスナップショットが古いものとしてマークされ、新しいスナップショット生成されるアクセス許可を与えます。
    新しいスナップショットの生成が必要なプロパティについては、「解説」セクションを参照してください。

[@force_reinit_subscription = ] force_reinit_subscription
このストアド プロシージャによって実行されるアクションで、既存のサブスクリプションの再初期化が必要になる可能性があることを確認します。 force_reinit_subscriptionは、既定値が 0 のビットです。

  • 0 は、アーティクルに対する変更によってサブスクリプションが再初期化されないように指定します。 変更によって既存のサブスクリプションの再初期化が必要であることがストアド プロシージャによって検出された場合、エラーが発生し、変更は行われません。
  • 1 は、アーティクルに対する変更によって既存のサブスクリプションが再初期化されるように指定し、サブスクリプションの再初期化を実行するためのアクセス許可を付与します。

[ @publisher = ] 'publisher' SQL Server 以外のパブリッシャーを指定します。 publishersysname で、既定値は NULL です。

Note

SQL Server パブリッシャー でアーティクルのプロパティを変更する場合は、パブリッシャーを使用しないでください。

リターン コードの値

0 (成功) または 1 (失敗)

解説

sp_changepublicationは、スナップショット レプリケーションとトランザクション レプリケーションで使用されます。

次のいずれかのプロパティを変更した後、新しいスナップショットを生成し、force_invalidate_スナップショット パラメーターに値 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

アクセス許可

sp_changepublicationを実行できるのは、sysadmin 固定サーバー ロールまたは固定データベース ロールdb_ownerメンバーだけです。

参照

パブリケーション プロパティの表示および変更
パブリケーションおよびアーティクルのプロパティの変更
sp_addpublication (Transact-SQL)
sp_droppublication (Transact-SQL)
sp_helppublication (Transact-SQL)
レプリケーション ストアド プロシージャ (Transact-SQL)