sp_changepublication (Transact-SQL)

適用対象: SQL Server Azure SQL Managed Instance

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

Transact-SQL 構文表記規則

構文

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'

出版物の名前。 @publicationsysname で、既定値は NULL です。

[ @property = ] N'property'

変更するパブリケーション プロパティ。 @propertynvarchar(255) で、既定値は NULL です。

[ @value = ] N'value'

新しいプロパティ値です。 @valuenvarchar(255) で、既定値は NULL です。

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

プロパティ 説明
allow_anonymous true 特定のパブリケーションに対して匿名サブスクリプションを作成できます。また、 immediate_synctrueする必要があります。 ピアツーピア パブリケーションでは変更できません。
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_subtrueに変更すると、既存のパブリケーション設定が変更される可能性があります。 詳細については、「 Non-SQL Server Subscribers」を参照してください。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。
false パブリケーションでは、SQL Server 以外のサブスクライバーはサポートされていません。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。
enabled_for_internet true パブリケーションはインターネットで有効になっており、ファイル転送プロトコル (FTP) を使用してスナップショット ファイルをサブスクライバーに転送できます。 パブリケーションの同期ファイルは、次のディレクトリに配置されます: C:\Program Files\Microsoft SQL Server\MSSQL\Repldata\ftpftp_addressNULL にすることはできません。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。
false インターネットに対してパブリケーションが有効になっていません。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。
enabled_for_p2p true パブリケーションでは、ピア ツー ピア レプリケーションがサポートされています。 SQL Server 以外のパブリケーションでは、このプロパティを変更できません。
enabled_for_p2ptrue に設定するには、次の制限が適用されます。
- 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_agenttrueする必要があります。 詳細については、「 即時同期の効果」を参照してください。
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 メッセージ キューの使用のサポートは廃止されました。 @valuemsmqの値を指定すると、エラーが発生します。
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_switchtrue に設定されている場合にのみ有効です。 詳細については、「パーティション テーブルとパーティション インデックスのレプリケート」を参照してください。
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_subscriptionbit で、既定値は 0 です。

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

[ @publisher = ] N'publisher'

SQL Server 以外のパブリッシャーを指定します。 @publishersysname で、既定値は 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を実行できます。