sp_addpublication (Transact-SQL)

適用対象: SQL ServerAzure SQL Managed Instance

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

Transact-SQL 構文表記規則

構文

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'

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

[ @taskid = ] taskid

下位互換性のためにのみサポートされます。sp_addpublication_スナップショット (Transact-SQL) を使用します。

[ @restricted = ] N'restricted'

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

[ @sync_method = ] N'sync_method'

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

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

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

[ @repl_freq = ] N'repl_freq'

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

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

[ @description = ] N'description'

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

[ @status = ] N'status'

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

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

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

[ @independent_agent = ] N'independent_agent'

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

  • この文書にスタンドアロンのディストリビューション エージェントがある場合true
  • パブリケーションで共有ディストリビューション エージェントが使用され、各パブリッシャー データベースとサブスクライバー データベースのペアに 1 つの共有エージェントがある場合false

[ @immediate_sync = ] N'immediate_sync'

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

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

[ @enabled_for_internet = ] N'enabled_for_internet'

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

[ @allow_push = ] N'allow_push'

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

[ @allow_pull = ] N'allow_pull'

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

[ @allow_anonymous = ] N'allow_anonymous'

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

[ @allow_sync_tran = ] N'allow_sync_tran'

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

[ @autogen_sync_procs = ] N'autogen_sync_procs'

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

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

Note

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

[ @retention = ] 保持

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

[ @allow_queued_tran = ] N'allow_queued_tran'

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

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

[ @snapshot_in_defaultfolder = ] N'スナップショット_in_defaultfolder'

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

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

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

[ @alt_snapshot_folder = ] N'alt_スナップショット_folder'

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

[ @pre_snapshot_script = ] N'pre_スナップショット_script'

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

[ @post_snapshot_script = ] N'post_スナップショット_script'

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

[ @compress_snapshot = ] N'compress_スナップショット'

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

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

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

[ @ftp_address = ] N'ftp_address'

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

[ @ftp_port = ] ftp_port

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

[ @ftp_subdirectory = ] N'ftp_subdirectory'

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

[ @ftp_login = ] N'ftp_login'

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

[ @ftp_password = ] N'ftp_password'

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

[ @allow_dts = ] N'allow_dts'

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

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

[ @allow_subscription_copy = ] N'allow_subscription_copy'

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

[ @conflict_policy = ] N'conflict_policy'

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

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

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

[ @centralized_conflicts = ] N'centralized_conflicts'

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

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

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

[ @conflict_retention = ] conflict_retention

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

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

[ @queue_type = ] N'queue_type'

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

Value 説明
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_nameは sysname で、既定値は NULL. このパラメーターは、ログ リーダー エージェントが新しいジョブではなく既存のジョブを使用する場合にのみ指定されます。

[ @qreader_job_name = ] N'qreader_job_name'

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

[ @publisher = ] N'publisher'

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

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

[ @allow_initialize_from_backup = ] N'allow_initialize_from_backup'

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

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

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

警告

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

[ @replicate_ddl = ] replicate_ddl

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

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

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

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

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

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

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

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

[ @enabled_for_p2p = ] N'enabled_for_p2p'

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

  • @allow_anonymousするfalse必要があります。
  • @allow_dtsするfalse必要があります。
  • @allow_initialize_from_backupするtrue必要があります。
  • @allow_queued_tranするfalse必要があります。
  • @allow_sync_tranするfalse必要があります。
  • @conflict_policyするfalse必要があります。
  • @independent_agentするtrue必要があります。
  • @repl_freqするcontinuous必要があります。
  • @replicate_ddlする1必要があります。

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

[ @publish_local_changes_only = ] N'publish_local_changes_only'

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

[ @enabled_for_het_sub = ] N'enabled_for_het_sub'

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

  • @allow_initialize_from_backupするfalse必要があります。
  • @allow_pushするtrue必要があります。
  • @allow_queued_tranするfalse必要があります。
  • @allow_subscription_copyするfalse必要があります。
  • @allow_sync_tranするfalse必要があります。
  • @autogen_sync_procsするfalse必要があります。
  • @conflict_policyするNULL必要があります。
  • @enabled_for_internetするfalse必要があります。
  • @enabled_for_p2pするfalse必要があります。
  • @ftp_addressするNULL必要があります。
  • @ftp_subdirectoryするNULL必要があります。
  • @ftp_passwordするNULL必要があります。
  • @pre_スナップショット_scriptするNULL必要があります。
  • @post_スナップショット_scriptするNULL必要があります。
  • @replicate_ddlは 0 にする必要があります。
  • @qreader_job_nameするNULL必要があります。
  • @queue_typeするNULL必要があります。
  • @sync_methodにすることもできませんnativeconcurrent

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

[ @p2p_conflictdetection = ] N'p2p_conflictdetection'

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

[ @p2p_originator_id = ] p2p_originator_id

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

[ @p2p_continue_onconflict = ] N'p2p_continue_onconflict'

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

注意

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

[ @allow_partition_switch = ] N'allow_partition_switch'

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

[ @replicate_partition_switch = ] N'replicate_partition_switch'

パブリッシュされたデータベースに対して実行されるステートメントをサブスクライバーにレプリケートするかどうかを ALTER TABLE...SWITCH 指定します。 @replicate_partition_switchは nvarchar(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_policyは nvarchar(12)で、次のいずれかの値を指定できます。

Value 説明
originatorid (既定値) ディストリビューション エージェントは、競合を検出し、元の ID に基づいて勝者を決定します (場合 p2p_continue_onconflict = N'true')。 それ以外の場合はエラーが返されます。
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指定されたパブリケーションのみがレプリケートALTER TABLEALTER VIEWALTER PROCEDURE、および ALTER FUNCTIONALTER TRIGGER DDL ステートメントになります。 ただし、DDL ステートメントは、 ALTER TABLE DROP COLUMN 削除された列を発行するすべてのパブリケーションによってレプリケートされます。

パブリケーションに対して DDL レプリケーションを有効 (@replicate_ddl = 1) にした場合、パブリケーションに対して重複しない DDL 変更を行うには、sp_changepublicationを最初に実行して@replicate_ddlを設定する0必要があります。 繰り返し処理されていない 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 グループを表すユーザー アカウントでは不十分です。