sys.sp_addpublication(Transact-SQL)

適用対象:SQL ServerAzure SQL Managed Instance

スナップショット パブリケーションまたはトランザクション パブリケーションを作成します。 このストアド プロシージャは、パブリッシャー側のパブリケーション データベースで実行されます。

Transact-SQL 構文表記規則

構文

sys.sp_addpublication
    [ @publication = ] N'publication'
    [ , [ @taskid = ] taskid ]
    [ , [ @restricted = ] N'restricted' ]
    [ , [ @sync_method = ] N'sync_method' ]
    [ , [ @repl_freq = ] N'repl_freq' ]
    [ , [ @description = ] N'description' ]
    [ , [ @status = ] N'status' ]
    [ , [ @independent_agent = ] N'independent_agent' ]
    [ , [ @immediate_sync = ] N'immediate_sync' ]
    [ , [ @enabled_for_internet = ] N'enabled_for_internet' ]
    [ , [ @allow_push = ] N'allow_push' ]
    [ , [ @allow_pull = ] N'allow_pull' ]
    [ , [ @allow_anonymous = ] N'allow_anonymous' ]
    [ , [ @allow_sync_tran = ] N'allow_sync_tran' ]
    [ , [ @autogen_sync_procs = ] N'autogen_sync_procs' ]
    [ , [ @retention = ] retention ]
    [ , [ @allow_queued_tran = ] N'allow_queued_tran' ]
    [ , [ @snapshot_in_defaultfolder = ] N'snapshot_in_defaultfolder' ]
    [ , [ @alt_snapshot_folder = ] N'alt_snapshot_folder' ]
    [ , [ @pre_snapshot_script = ] N'pre_snapshot_script' ]
    [ , [ @post_snapshot_script = ] N'post_snapshot_script' ]
    [ , [ @compress_snapshot = ] N'compress_snapshot' ]
    [ , [ @ftp_address = ] N'ftp_address' ]
    [ , [ @ftp_port = ] ftp_port ]
    [ , [ @ftp_subdirectory = ] N'ftp_subdirectory' ]
    [ , [ @ftp_login = ] N'ftp_login' ]
    [ , [ @ftp_password = ] N'ftp_password' ]
    [ , [ @allow_dts = ] N'allow_dts' ]
    [ , [ @allow_subscription_copy = ] N'allow_subscription_copy' ]
    [ , [ @conflict_policy = ] N'conflict_policy' ]
    [ , [ @centralized_conflicts = ] N'centralized_conflicts' ]
    [ , [ @conflict_retention = ] conflict_retention ]
    [ , [ @queue_type = ] N'queue_type' ]
    [ , [ @add_to_active_directory = ] N'add_to_active_directory' ]
    [ , [ @logreader_job_name = ] N'logreader_job_name' ]
    [ , [ @qreader_job_name = ] N'qreader_job_name' ]
    [ , [ @publisher = ] N'publisher' ]
    [ , [ @allow_initialize_from_backup = ] N'allow_initialize_from_backup' ]
    [ , [ @replicate_ddl = ] replicate_ddl ]
    [ , [ @enabled_for_p2p = ] N'enabled_for_p2p' ]
    [ , [ @publish_local_changes_only = ] N'publish_local_changes_only' ]
    [ , [ @enabled_for_het_sub = ] N'enabled_for_het_sub' ]
    [ , [ @p2p_conflictdetection = ] N'p2p_conflictdetection' ]
    [ , [ @p2p_originator_id = ] p2p_originator_id ]
    [ , [ @p2p_continue_onconflict = ] N'p2p_continue_onconflict' ]
    [ , [ @allow_partition_switch = ] N'allow_partition_switch' ]
    [ , [ @replicate_partition_switch = ] N'replicate_partition_switch' ]
    [ , [ @allow_drop = ] N'allow_drop' ]
    [ , [ @p2p_conflictdetection_policy = ] N'p2p_conflictdetection_policy' ]
[ ; ]

引数

[ @publication = ] N'publication'

作成するパブリケーションの名前。 @publicationsysname で、既定値はありません。 名前は、データベース内で一意である必要があります。

[ @taskid = ] タスクID

下位互換性のためにのみサポートされます。 sp_addpublication_snapshotを使用します。

[ @restricted = ] 制限なし

下位互換性のためにのみサポートされます。 default_accessを使用します。

[ @sync_method = ] N'sync_method

同期モード。 @sync_methodnvarchar(40)であり、次のいずれかの値を指定できます。

説明
native 1 すべてのテーブルのネイティブ モードの一括コピー プログラム出力を生成します。
character すべてのテーブルの文字モードの一括コピー プログラム出力を生成します。 注: Oracle パブリッシャーの場合、 character はスナップショット レプリケーションでのみ有効です。
concurrent 1 すべてのテーブルのネイティブ モードの一括コピー プログラム出力を生成しますが、スナップショット中にテーブルをロックしません。 トランザクション パブリケーションでのみサポートされます。
concurrent_c すべてのテーブルの文字モードの一括コピー プログラム出力を生成しますが、スナップショット中にテーブルをロックしません。 トランザクション パブリケーションでのみサポートされます。
database snapshot 2 データベース スナップショットから、すべてのテーブルのネイティブ モードの一括コピー プログラム出力を作成します。 データベース スナップショットは、SQL Server のすべてのエディションで使用できるわけではありません。
database snapshot character 2 データベース スナップショットからすべてのテーブルの文字モードの一括コピー プログラム出力を生成します。 データベース スナップショットは、SQL Server のすべてのエディションで使用できるわけではありません。
NULL (既定) SQL Server パブリッシャーの場合、既定値は native です。 SQL Server 以外のパブリッシャーの場合、既定では、characterの値がされたときにSnapshotされ、その他のすべてのケースでconcurrent_cされます。

1 Oracle パブリッシャーではサポートされていません。
2 SQL Serverのエディションでサポートされている機能の一覧については、「SQL Server 2025のエディションおよびサポート機能」をご覧ください。

[ @repl_freq = ] repl_freq

レプリケーション頻度の種類 ( @repl_freqnvarchar(10)であり、次のいずれかの値を指定できます。

説明
continuous (既定) ログ リーダー エージェントは継続的に実行されます。 SQL Server 以外のパブリッシャーの場合は、@sync_methodconcurrent_cに設定する必要があります。
snapshot ログ リーダー エージェントはスケジュールに従って実行されます。 SQL Server 以外のパブリッシャーの場合は、@sync_methodcharacterに設定する必要があります。

[ @description = ] 説明

パブリケーションの説明 (省略可能)。 @descriptionnvarchar(255) で、既定値は NULL です。

[ @status = ] N'status'

パブリケーション データを使用できるかどうかを指定します。 @statusnvarchar(8)であり、次のいずれかの値を指定できます。

説明
active サブスクライバーでパブリケーション データを直ちに使用できる。
inactive (既定) パブリケーションデータは、パブリケーションが最初に作成されるときにサブスクライバーで使用できません (サブスクライブすることはできますが、サブスクリプションは処理されません)。

Oracle パブリッシャーではサポートされていません

[ @independent_agent = ] N'independent_agent'

この文書にスタンドアロン ディストリビューション エージェントがあるかどうかを指定します。 @independent_agentnvarchar(5) で、既定値は false です。

  • true場合、このパブリケーションにはスタンドアロンのディストリビューション エージェントがあります。
  • false場合、パブリケーションは共有ディストリビューション エージェントを使用し、各パブリッシャー データベースとサブスクライバー データベースのペアには 1 つの共有エージェントがあります。

[ @immediate_sync = ] N'immediate_sync

スナップショット エージェントを実行するたびにパブリケーションの同期ファイルを作成するかどうかを指定します。 @immediate_syncnvarchar(5) で、既定値は false です。

true場合、スナップショット エージェントが実行されるたびに同期ファイルが作成または再作成されます。 サブスクリプションが作成される前にスナップショット エージェントが完了した場合、サブスクライバーは同期ファイルをすぐに取得できます。 新しいサブスクリプションは、最近実行されたスナップショット エージェントによって生成された最新の同期ファイルを取得します。 @immediate_synctrueするには、@independent_agenttrueする必要があります。 false場合、同期ファイルは新しいサブスクリプションがある場合にのみ作成されます。 既存のパブリケーションに新しいアーティクルを増分追加するときは、サブスクリプションごとに sp_addsubscription を呼び出す必要があります。 サブスクライバーは、スナップショット エージェントが開始されて完了するまで、サブスクリプションの後に同期ファイルを受信できません。

[ @enabled_for_internet = ] N'enabled_for_internet'

パブリケーションがインターネットに対して有効になっているかどうかを指定し、ファイル転送プロトコル (FTP) を使用してスナップショット ファイルをサブスクライバーに転送できるかどうかを決定します。 @enabled_for_internetnvarchar(5) で、既定値は false です。 true場合、パブリケーションの同期ファイルは C:\Program Files\Microsoft SQL Server\MSSQL\MSSQL.x\Repldata\Ftp ディレクトリに格納されます。 ユーザーは、 Ftp ディレクトリを作成する必要があります。

[ @allow_push = ] N'allow_push

指定されたパブリケーションに対してプッシュ サブスクリプションを作成できるかどうかを指定します。 @allow_pushnvarchar(5)で、既定値は true で、パブリケーションでプッシュ サブスクリプションを使用できます。

[ @allow_pull = ] N'allow_pull

指定されたパブリケーションに対してプル サブスクリプションを作成できるかどうかを指定します。 @allow_pullnvarchar(5) で、既定値は false です。 false場合、プル サブスクリプションはパブリケーションで許可されません。

[ @allow_anonymous = ] N'allow_anonymous'

特定のパブリケーションに対して、匿名サブスクリプションを作成できるかどうかを指定します。 @allow_anonymousnvarchar(5) で、既定値は false です。 true場合は、@immediate_synctrue に設定する必要があります。 false場合、匿名サブスクリプションはパブリケーションで許可されません。

[ @allow_sync_tran = ] N'allow_sync_tran

パブリケーションで即時更新サブスクリプションを許可するかどうかを指定します。 @allow_sync_trannvarchar(5) で、既定値は false です。 true は Oracle パブリッシャー サポートされていません

[ @autogen_sync_procs = ] N'autogen_sync_procs'

サブスクリプションを更新するための同期ストアド プロシージャをパブリッシャーで生成するかどうかを指定します。 @autogen_sync_procsnvarchar(5)であり、次のいずれかの値を指定できます。

説明
true サブスクリプションの更新が有効になっているときに自動的に設定されます。
false サブスクリプションの更新が有効になっていない場合、または Oracle パブリッシャーに対して自動的に設定されます。
NULL (既定) 既定では、サブスクリプションの更新が有効な場合は true され、サブスクリプションの更新が有効になっていない場合は false されます。

Note

@autogen_sync_procsのユーザー指定の値は、@allow_queued_tran@allow_sync_tranに指定された値に応じてオーバーライドされます。

[ @retention = ] 保持率

サブスクリプション アクティビティの保持期間 (時間単位)。 @retentionint で、既定値は 336 です。 サブスクリプションがリテンション期間内にアクティブでない場合は、有効期限が切れ、削除されます。 この値は、パブリッシャーが使用するディストリビューション データベースの最大保有期間を超えることができます。 0場合、パブリケーションに対する既知のサブスクリプションの有効期限が切れることはなく、期限切れのサブスクリプション クリーンアップ エージェントによって削除されます。

[ @allow_queued_tran = ] N'allow_queued_tran

変更をパブリッシャーに適用できるようになるまで、サブスクライバーでの変更のキュー登録を有効または無効にします。 @allow_queued_trannvarchar(5) で、既定値は false です。

  • false場合、サブスクライバーでの変更はキューに登録されません。
  • true は Oracle パブリッシャー サポートされていません

[ @snapshot_in_defaultfolder = ] N'snapshot_in_defaultfolder

スナップショット ファイルを既定のフォルダーに格納するかどうかを指定します。 @snapshot_in_defaultfoldernvarchar(5) で、既定値は true です。

  • true場合、スナップショット ファイルは既定のフォルダーにあります。
  • false場合、スナップショット ファイルは、@alt_snapshot_folderで指定された別の場所に格納されています。

別の場所は、別のサーバー、ネットワーク ドライブ、またはリムーバブル メディア (リムーバブル ディスクなど) に配置できます。 スナップショット ファイルを FTP サイトに保存し、後でサブスクライバーで取得することもできます。 このパラメーターは true にすることができ、引き続き @alt_snapshot_folder パラメーター内の場所を持つことができます。 この組み合わせは、スナップショット ファイルを既定の場所と代替の場所の両方に格納することを指定します。

[ @alt_snapshot_folder = ] N'alt_snapshot_folder

スナップショットの代替フォルダーの場所を指定します。 @alt_snapshot_foldernvarchar(255) で、既定値は NULL です。

[ @pre_snapshot_script = ] N'pre_snapshot_script'

.sql ファイルの場所へのポインターを指定します。 @pre_snapshot_scriptnvarchar(255) で、既定値は NULL です。 ディストリビューション エージェントは、サブスクライバーでスナップショットを適用するときに、レプリケートされたオブジェクト スクリプトを実行する前に、事前スナップショット スクリプトを実行します。 スクリプトは、サブスクリプション データベースに接続するときにディストリビューション エージェントによって使用されるセキュリティ コンテキストで実行されます。

[ @post_snapshot_script = ] N'post_snapshot_script'

.sql ファイルの場所へのポインターを指定します。 @post_snapshot_scriptnvarchar(255) で、既定値は NULL です。 ディストリビューション エージェントは、最初の同期中に他のすべてのレプリケートされたオブジェクト スクリプトとデータが適用された後に、スナップショット後スクリプトを実行します。 スクリプトは、サブスクリプション データベースに接続するときにディストリビューション エージェントによって使用されるセキュリティ コンテキストで実行されます。

[ @compress_snapshot = ] N'compress_snapshot'

@alt_snapshot_folderの場所に書き込まれるスナップショットを Microsoft CAB 形式に圧縮することを指定します。 @compress_snapshotnvarchar(5) で、既定値は false です。

  • false は、スナップショットが圧縮されていないことを指定します。
  • true は、スナップショットが圧縮されることを指定します。

2 ギガバイト (GB) を超えるスナップショット ファイルは圧縮できません。 圧縮されたスナップショット ファイルは、ディストリビューション エージェントが実行される場所で圧縮されません。プル サブスクリプションは通常、圧縮スナップショットと共に使用されるため、サブスクライバーでファイルが圧縮されません。 既定のフォルダー内のスナップショットは圧縮できません。

[ @ftp_address = ] N'ftp_address

ディストリビューターの FTP サービスのネットワーク アドレス。 @ftp_addresssysname で、既定値は NULL です。 ここでは、サブスクライバーのディストリビューション エージェントまたはマージ エージェントがパブリケーション スナップショット ファイルを取得する場所を指定します。 このプロパティはパブリケーションごとに格納されるため、各パブリケーションは異なる @ftp_addressを持つことができます。 パブリケーションでは、FTP を使用したスナップショットの伝達がサポートされている必要があります。

[ @ftp_port = ] ftp_port

ディストリビューターの FTP サービスのポート番号。 @ftp_portint で、既定値は 21 です。 サブスクライバーのディストリビューション エージェントまたはマージ エージェントが取得するパブリケーション スナップショット ファイルの場所を指定します。 このプロパティはパブリケーションごとに格納されるため、各パブリケーションに独自の @ftp_portを設定できます。

[ @ftp_subdirectory = ] ftp_subdirectory

パブリケーションが FTP を使用したスナップショットの伝達をサポートしている場合に、サブスクライバーのディストリビューション エージェントまたはマージ エージェントが取得できるスナップショット ファイルの場所を指定します。 @ftp_subdirectorynvarchar(255) で、既定値は NULL です。 このプロパティはパブリケーションごとに格納されるため、各パブリケーションは独自の @ftp_subdirctory を持つことができます。また、 NULL 値で示されるサブディレクトリを持たないことを選択することもできます。

[ @ftp_login = ] N'ftp_login

FTP サービスへの接続に使用するユーザー名。 @ftp_loginsysname で、既定値は anonymous です。

[ @ftp_password = ] N'ftp_password'

FTP サービスへの接続に使用するユーザー パスワード。 @ftp_passwordsysname で、既定値は NULL です。

[@allow_dts=]allow_dts

パブリケーションでデータを変換できるかどうかを指定します。 サブスクリプションを作成するときに DTS パッケージを指定できます。 @allow_dtsnvarchar(5)で、既定値は false で、DTS 変換は許可されません。 @allow_dtsが true の場合、@sync_methodcharacter または concurrent_c のいずれかに設定する必要があります。

true は Oracle パブリッシャー サポートされていません

[ @allow_subscription_copy = ] N'allow_subscription_copy'

このパブリケーションをサブスクライブするサブスクリプション データベースをコピーする機能を有効または無効にします。 @allow_subscription_copynvarchar(5) で、既定値は false です。

[ @conflict_policy = ] N'conflict_policy

キュー更新サブスクライバー オプションを使用するときに続く競合解決ポリシーを指定します。 @conflict_policynvarchar(100)であり、次のいずれかの値を指定できます。

説明
pub wins パブリッシャーを優先。
sub reinit サブスクライバーを再初期化。
sub wins サブスクライバーを優先。
NULL (既定) NULL、パブリケーションがスナップショット パブリケーションの場合、既定のポリシーはsub reinitになります。 NULLパブリケーションがスナップショット パブリケーションでない場合、既定値はpub winsになります。

Oracle パブリッシャーではサポートされていません

[ @centralized_conflicts = ] N'centralized_conflicts

パブリッシャーに競合レコードを格納するかどうかを指定します。 @centralized_conflictsnvarchar(5) で、既定値は NULL です。

  • true場合、競合レコードはパブリッシャーに格納されます。
  • false場合、競合レコードはパブリッシャーと、競合の原因となったサブスクライバーの両方に格納されます。

Oracle パブリッシャーではサポートされていません

[ @conflict_retention = ] conflict_retention

競合の保持期間を日数で指定します。 これは、ピアツーピア トランザクション レプリケーションとキュー更新サブスクリプションの競合メタデータが格納される期間です。 @conflict_retentionint で、既定値は 14 です。

Oracle パブリッシャーではサポートされていません

[ @queue_type = ] N'queue_type'

使用されるキューの種類。 @queue_typenvarchar(10)であり、これらの値のいずれかを指定できます。

説明
sql SQL Server を使用してトランザクションを格納します。
NULL (既定) 既定値は sql で、SQL Server を使用してトランザクションを格納することを指定します。

Note

Microsoft メッセージ キューの使用のサポートは廃止されました。 msmqの値を指定すると警告が発生し、レプリケーションによって自動的に値が sql に設定されます。

Oracle パブリッシャーではサポートされていません

[ @add_to_active_directory = ] N'add_to_active_directory'

このパラメーターは非推奨であり、スクリプトの下位互換性のためにのみサポートされています。 Microsoft Active Directory にパブリケーション情報を追加できなくなりました。

[ @logreader_job_name = ] N'logreader_job_name

既存のエージェント ジョブの名前。 @logreader_job_namesysname で、既定値は NULL です。 このパラメーターは、ログ リーダー エージェントが新しいジョブではなく既存のジョブを使用する場合にのみ指定されます。

[ @qreader_job_name = ] N'qreader_job_name

既存のエージェント ジョブの名前。 @qreader_job_namesysname で、既定値は NULL です。 このパラメーターは、キュー リーダー エージェントが新しいジョブではなく既存のジョブを使用する場合にのみ指定されます。

[ @publisher = ] N'publisher'

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

@publisher は、SQL Server パブリッシャーにパブリケーションを追加するときに使用しないでください。

[ @allow_initialize_from_backup = ] N'allow_initialize_from_backup'

サブスクライバーでは、最初のスナップショットではなくバックアップから、このパブリケーションへのサブスクリプションを初期化できるかどうかを示します。 @allow_initialize_from_backupnvarchar(5)であり、次のいずれかの値を指定できます。

説明
true バックアップからの初期化を有効にする。
false バックアップからの初期化を無効にします。
NULL (既定) 既定では、ピア ツー ピア レプリケーション トポロジ内のパブリケーションに対して true し、他のすべてのパブリケーションに対して false します。

詳細については、「 スナップショットを使用しないトランザクション サブスクリプションの初期化を使用して、サブスクリプションを手動で初期化する方法について説明します。

警告

サブスクライバー データが不足しないようにするには、sp_addpublication@allow_initialize_from_backup = N'true'を使用するときは、常に@immediate_sync = N'true'を使用します。

[ @replicate_ddl = ] replicate_ddl

パブリケーションでスキーマ レプリケーションがサポートされているかどうかを示します。 @replicate_ddlint で、SQL Server パブリッシャーの場合は既定の 1 、SQL Server 以外のパブリッシャーの場合は 0 です。

  • 1 は、パブリッシャーで実行されるデータ定義言語 (DDL) ステートメントがレプリケートされることを示します。
  • 0 は、DDL ステートメントがレプリケートされていないことを示します。

Note

Oracle Publishersではスキーマレプリケーションはサポートされていません。

詳細については、「パブリケーション データベースでのスキーマの変更」を参照してください。

@replicate_ddl パラメーターは、DDL ステートメントが列を追加するときに受け入れられます。 DDL ステートメントが次の理由で列を変更または削除すると、 @replicate_ddl パラメーターは無視されます。

  • 列が削除されると、新しい DML ステートメントにドロップされた列が含まれないように、 sysarticlecolumns を更新する必要があります。これにより、ディストリビューション エージェントが失敗します。 レプリケーションでは常にスキーマ変更をレプリケートする必要があるため、 @replicate_ddl パラメーターは無視されます。

  • 列が変更されると、ソース データ型または null 値の許容が変更され、DML ステートメントにサブスクライバーのテーブルと互換性のない値が含まれる可能性があります。 そうした DML ステートメントは、ディストリビューション エージェントが失敗する原因となる場合があります。 レプリケーションでは常にスキーマ変更をレプリケートする必要があるため、 @replicate_ddl パラメーターは無視されます。

  • DDL ステートメントが新しい列を追加する場合、 sysarticlecolumns には新しい列は含まれません。 DML ステートメントは、新しい列のデータをレプリケートしようとしません。 DDL のレプリケートまたはレプリケートは許容されるため、このパラメーターは受け入れられます。

[ @enabled_for_p2p = ] N'enabled_for_p2p

ピアツーピア レプリケーション トポロジでパブリケーションを使用できるようにします。 @enabled_for_p2pnvarchar(5) で、既定値は false です。 true は、パブリケーションがピアツーピア レプリケーションをサポートしていることを示します。 @enabled_for_p2ptrue に設定する場合は、次の制限が適用されます。

  • @allow_anonymousfalseする必要があります。
  • @allow_dtsfalseする必要があります。
  • @allow_initialize_from_backuptrueする必要があります。
  • @allow_queued_tranfalseする必要があります。
  • @allow_sync_tranfalseする必要があります。
  • @conflict_policyfalseする必要があります。
  • @independent_agenttrueする必要があります。
  • @repl_freqcontinuousする必要があります。
  • @replicate_ddl1する必要があります。

詳細については、「 ピア間 - トランザクション レプリケーション」を参照してください。

[ @publish_local_changes_only = ] N'publish_local_changes_only'

単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。

[ @enabled_for_het_sub = ] N'enabled_for_het_sub

パブリケーションで SQL Server 以外のサブスクライバーをサポートできるようにします。 @enabled_for_het_subnvarchar(5) で、既定値は false です。 trueの値は、パブリケーションが SQL Server 以外のサブスクライバーをサポートすることを意味します。 @enabled_for_het_subtrueされている場合は、次の制限が適用されます。

  • @allow_initialize_from_backupfalseする必要があります。
  • @allow_pushtrueする必要があります。
  • @allow_queued_tranfalseする必要があります。
  • @allow_subscription_copyfalseする必要があります。
  • @allow_sync_tranfalseする必要があります。
  • @autogen_sync_procsfalseする必要があります。
  • @conflict_policyNULLする必要があります。
  • @enabled_for_internetfalseする必要があります。
  • @enabled_for_p2pfalseする必要があります。
  • @ftp_addressNULLする必要があります。
  • @ftp_subdirectoryNULLする必要があります。
  • @ftp_passwordNULLする必要があります。
  • @pre_snapshot_scriptNULLする必要があります。
  • @post_snapshot_scriptNULLする必要があります。
  • @replicate_ddl は 0 にする必要があります。
  • @qreader_job_nameNULLする必要があります。
  • @queue_typeNULLする必要があります。
  • @sync_methodnative または concurrentにすることはできません。

詳細については、「 Non-SQL Server Subscribers」を参照してください。

[ @p2p_conflictdetection = ] N'p2p_conflictdetection

パブリケーションでピア ツー ピア レプリケーションが有効である場合に、ディストリビューション エージェントが競合を検出できるようにします。 @p2p_conflictdetectionnvarchar(5) で、既定値は false です。 詳細については、「 Peer-to-Peer - ピア ツー ピア レプリケーションでの競合検出を参照してください。

[ @p2p_originator_id = ] p2p_originator_id

ピア ツー ピア トポロジ内のノードの ID を指定します。 @p2p_originator_idint で、既定値は NULL です。 この ID は、 @p2p_conflictdetection が TRUE に設定されている場合に競合検出に使用されます。 トポロジで使用されていない正の 0 以外の ID を指定します。 使用されている ID の一覧については、 sp_help_peerconflictdetection実行します。

[ @p2p_continue_onconflict = ] N'p2p_continue_onconflict

競合が検出された後も、ディストリビューション エージェントが変更の処理を継続するかどうかを決定します。 @p2p_continue_onconflictnvarchar(5) で、既定値は false です。

注意事項

既定値の false を使用することをお勧めします。 このオプションを true に設定すると、ディストリビューション エージェントは、最も高い発信元 ID であるノードから競合する行を適用することで、トポロジ内のデータの収束を試みます。 このメソッドでは、収束は保証されません。 競合が検出された後は、トポロジの整合性を確保する必要があります。 詳細については、「 Peer-to-Peer - ピアツーピア レプリケーションでの競合検出の競合の処理」を参照してください。

[ @allow_partition_switch = ] N'allow_partition_switch

パブリッシュされたデータベース ALTER TABLE...SWITCH ステートメントを実行できるかどうかを指定します。 @allow_partition_switchnvarchar(5) で、既定値は false です。 詳細については、「パーティション テーブルとパーティション インデックスのレプリケート」を参照してください。

[ @replicate_partition_switch = ] N'replicate_partition_switch

パブリッシュされたデータベースに対して実行 ALTER TABLE...SWITCH ステートメントをサブスクライバーにレプリケートするかどうかを指定します。 @replicate_partition_switchnvarchar(5) で、既定値は NULL です。 このオプションは、 @allow_partition_switch が TRUE に設定されている場合にのみ有効です。

[ @allow_drop = ] N'allow_drop'

単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。

[ @p2p_conflictdetection_policy = ] N'p2p_conflictdetection_policy'

適用対象: SQL Server 2019 (15.x) CU 13 以降のバージョン。

@p2p_conflictdetection_policynvarchar(12)であり、次のいずれかの値を指定できます。

説明
originatorid (既定) ディストリビューション エージェントは競合を検出し、 p2p_continue_onconflict = N'true'場合は発信者 ID に基づいて勝者を決定します。 それ以外の場合はエラーが返されます。
lastwriter ディストリビューション エージェントは競合を検出し、最後のライターの日時に基づいて勝者を決定します ( p2p_continue_onconflict = N'true'場合)。 それ以外の場合はエラーが返されます。

Note

originatoridを指定すると、競合の検出は SQL Server 2019 (15.x) CU 12 以前のバージョンと同じです。 lastwriterを指定すると、SQL Server では、最新の書き込みに基づいて競合を自動的に解決できます。

リターン コードの値

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

解説

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

同じデータベース オブジェクトをパブリッシュするパブリケーションが複数存在する場合は、 @replicate_ddl 値が 1 のパブリケーションのみが、DDL ステートメント ALTER TABLEALTER VIEWALTER PROCEDUREALTER FUNCTION、および ALTER TRIGGER DDL ステートメントをレプリケートします。 ただし、削除された列をパブリッシュするすべてのパブリケーションによって、 ALTER TABLE DROP COLUMN DDL ステートメントがレプリケートされます。

パブリケーションに対して DDL レプリケーションを有効 (@replicate_ddl = 1) にした場合、パブリケーションに対して重複しない DDL 変更を行うには、最初に sp_changepublication を実行して、 @replicate_ddl0 に設定する必要があります。 繰り返し処理されていない DDL ステートメントを発行した後、 sp_changepublication を再度実行して DDL レプリケーションを有効に戻すことができます。

-- To avoid storing the login and password in the script file, the values 
-- are passed into SQLCMD as scripting variables. For information about 
-- how to use scripting variables on the command line and in SQL Server
-- Management Studio, see the "Executing Replication Scripts" section in
-- the topic "Programming Replication Using System Stored Procedures".

DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks'; 
SET @publication = N'AdvWorksProductTran'; 
-- Windows account used to run the Log Reader and Snapshot Agents.
SET @login = $(Login); 
-- This should be passed at runtime.
SET @password = $(Password); 

-- Enable transactional or snapshot replication on the publication database.
EXEC sp_replicationdboption 
    @dbname=@publicationDB, 
    @optname=N'publish',
    @value = N'true';

-- Execute sp_addlogreader_agent to create the agent job. 
EXEC sp_addlogreader_agent 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;

-- Create a new transactional publication with the required properties. 
EXEC sp_addpublication 
    @publication = @publication, 
    @status = N'active',
    @allow_push = N'true',
    @allow_pull = N'true',
    @independent_agent = N'true';

-- Create a new snapshot job for the publication, using a default schedule.
EXEC sp_addpublication_snapshot 
    @publication = @publication, 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;
GO

アクセス許可

sysadmin固定サーバー ロールまたは固定データベース ロールdb_ownerのメンバーのみがsp_addpublicationを実行できます。 Windows 認証ログインを行うには、Windows ユーザー アカウントを表すユーザー アカウントがデータベースに必要です。 Windows グループを表すユーザー アカウントでは不十分です。