sp_addmergepublication (Transact-SQL)
適用対象: SQL Server Azure SQL Managed Instance
新しいマージ パブリケーションを作成します。 このストアド プロシージャは、公開されているデータベースのパブリッシャーで実行されます。
構文
sp_addmergepublication
[ @publication = ] N'publication'
[ , [ @description = ] N'description' ]
[ , [ @retention = ] retention ]
[ , [ @sync_mode = ] N'sync_mode' ]
[ , [ @allow_push = ] N'allow_push' ]
[ , [ @allow_pull = ] N'allow_pull' ]
[ , [ @allow_anonymous = ] N'allow_anonymous' ]
[ , [ @enabled_for_internet = ] N'enabled_for_internet' ]
[ , [ @centralized_conflicts = ] N'centralized_conflicts' ]
[ , [ @dynamic_filters = ] N'dynamic_filters' ]
[ , [ @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' ]
[ , [ @conflict_retention = ] conflict_retention ]
[ , [ @keep_partition_changes = ] N'keep_partition_changes' ]
[ , [ @allow_subscription_copy = ] N'allow_subscription_copy' ]
[ , [ @allow_synctoalternate = ] N'allow_synctoalternate' ]
[ , [ @validate_subscriber_info = ] N'validate_subscriber_info' ]
[ , [ @add_to_active_directory = ] N'add_to_active_directory' ]
[ , [ @max_concurrent_merge = ] max_concurrent_merge ]
[ , [ @max_concurrent_dynamic_snapshots = ] max_concurrent_dynamic_snapshots ]
[ , [ @use_partition_groups = ] N'use_partition_groups' ]
[ , [ @publication_compatibility_level = ] N'publication_compatibility_level' ]
[ , [ @replicate_ddl = ] replicate_ddl ]
[ , [ @allow_subscriber_initiated_snapshot = ] N'allow_subscriber_initiated_snapshot' ]
[ , [ @allow_web_synchronization = ] N'allow_web_synchronization' ]
[ , [ @web_synchronization_url = ] N'web_synchronization_url' ]
[ , [ @allow_partition_realignment = ] N'allow_partition_realignment' ]
[ , [ @retention_period_unit = ] N'retention_period_unit' ]
[ , [ @generation_leveling_threshold = ] generation_leveling_threshold ]
[ , [ @automatic_reinitialization_policy = ] automatic_reinitialization_policy ]
[ , [ @conflict_logging = ] N'conflict_logging' ]
[ ; ]
引数
[ @publication = ] N'publication'
作成するマージ パブリケーションの名前。 @publication は sysname で、既定値はなく、キーワード ALL
にすることはできません。 パブリケーションの名前は、データベース内で一意である必要があります。
[ @description = ] N'description'
パブリケーションの説明。 @description は nvarchar(255) で、既定値は NULL
です。
[ @retention = ] retention
特定の @publicationの変更を保存する保持期間単位の保持期間。 @retention は int で、既定値は 14
です。 保有期間の単位は、 @retention_period_unitによって定義されます。 保持期間内にサブスクリプションが同期されず、受信した保留中の変更がディストリビューターのクリーンアップ操作によって削除された場合、サブスクリプションは期限切れになり、再初期化する必要があります。 許容される最大保有期間は、9999 年 12 月 31 日から現在の日付までの日数です。
Note
マージ パブリケーションの保有期間には、異なるタイム ゾーンのサブスクライバーに対応するため、24 時間の猶予期間があります。 たとえば、保有期間を 1 日に設定した場合、実際の保有期間は 48 時間となります。
[ @sync_mode = ] N'sync_mode'
パブリケーションへのサブスクライバーの初期同期のモード。 @sync_mode は nvarchar(10)であり、次のいずれかの値を指定できます。
値 | 説明 |
---|---|
native (既定値) |
すべてのテーブルのネイティブ モードの一括コピー プログラム出力を生成します。 |
character |
すべてのテーブルの文字モードの一括コピー プログラム出力を生成します。 SQL Server Compact および SQL Server 以外のサブスクライバーをサポートするために必要です。 |
[ @allow_push = ] N'allow_push'
指定されたパブリケーションに対してプッシュ サブスクリプションを作成できるかどうかを指定します。 @allow_push は nvarchar(5)で、既定値は true
で、パブリケーションでプッシュ サブスクリプションを使用できます。
[ @allow_pull = ] N'allow_pull'
指定されたパブリケーションに対してプル サブスクリプションを作成できるかどうかを指定します。 @allow_pull は nvarchar(5)で、既定値は true
で、パブリケーションでプル サブスクリプションを使用できます。 SQL Server Compact サブスクライバーをサポートするには、true を指定する必要があります。
[ @allow_anonymous = ] N'allow_anonymous'
特定のパブリケーションに対して、匿名サブスクリプションを作成できるかどうかを指定します。 @allow_anonymous は nvarchar(5) で、既定値は true
で、パブリケーションで匿名サブスクリプションを許可します。 SQL Server Compact サブスクライバーをサポートするには、 true
を指定する必要があります。
[ @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 ディレクトリを作成する必要があります。 false
場合、パブリケーションはインターネット アクセスに対して有効になっていません。
[ @centralized_conflicts = ] N'centralized_conflicts'
このパラメーターは非推奨であり、スクリプトの下位互換性のために保持されます。 @conflict_loggingを使用して、競合レコードを格納する場所を指定します。
[ @dynamic_filters = ] N'dynamic_filters'
マージ パブリケーションでパラメーター化された行フィルターを使用できるようにします。 @dynamic_filters は nvarchar(5) で、既定値は false
です。
Note
このパラメーターは指定しないでください。代わりに、パラメーター化された行フィルターが使用されているかどうかを SQL Server が自動的に判断できるようにします。 @dynamic_filtersに true
の値を指定する場合は、アーティクルのパラメーター化された行フィルターを定義する必要があります。 詳しくは、「 マージ アーティクルのパラメーター化された行フィルターの定義および変更」をご覧ください。
[ @snapshot_in_defaultfolder = ] N'snapshot_in_defaultfolder'
スナップショット ファイルを既定のフォルダーに格納するかどうかを指定します。 @snapshot_in_defaultfolder は nvarchar(5) で、既定値は true
です。 true
場合、スナップショット ファイルは既定のフォルダーにあります。 false
場合、スナップショット ファイルは、@alternate_snapshot_folderで指定された別の場所に格納されます。 別の場所は、別のサーバー、ネットワーク ドライブ、リムーバブル メディア (リムーバブル ディスクなど) 上に配置できます。 後でサブスクライバーが取得できるように、スナップショット ファイルをファイル転送プロトコル (FTP) サイトに保存することもできます。 このパラメーターは true にすることができ、引き続き @alt_snapshot_folder で指定された場所を持つことができます。 この組み合わせは、スナップショット ファイルが既定の場所と代替の場所の両方に格納されることを指定します。
[ @alt_snapshot_folder = ] N'alt_snapshot_folder'
スナップショットの代替フォルダーの場所を指定します。 @alt_snapshot_folder は nvarchar(255) で、既定値は NULL
です。
[ @pre_snapshot_script = ] N'pre_snapshot_script'
.sql
ファイルの場所へのポインターを指定します。 @pre_snapshot_script は nvarchar(255) で、既定値は NULL
です。 マージ エージェントは、サブスクライバーでスナップショットを適用するときに、レプリケートされたオブジェクト スクリプトの前にプリスナップショット スクリプトを実行します。 このスクリプトは、サブスクリプション データベースに接続するときにマージ エージェントによって使用されるセキュリティ コンテキストで実行されます。 スナップショット前スクリプトは、SQL Server Compact サブスクライバーでは実行されません。
[ @post_snapshot_script = ] N'post_snapshot_script'
.sql
ファイルの場所へのポインターを指定します。 @post_snapshot_script は nvarchar(255) で、既定値は NULL
です。 最初の同期のときに、マージ エージェントは、他のすべてのレプリケートされたオブジェクト スクリプトとデータが適用された後に、ポストスナップショット スクリプトを実行します。 このスクリプトは、サブスクリプション データベースに接続するときにマージ エージェントによって使用されるセキュリティ コンテキストで実行されます。 スナップショット後スクリプトは、SQL Server Compact サブスクライバーでは実行されません。
[ @compress_snapshot = ] N'compress_snapshot'
@alt_snapshot_folderの場所に書き込まれたスナップショットを Microsoft CAB 形式に圧縮することを指定します。 @compress_snapshot は nvarchar(5) で、既定値は false
です。
false
は、スナップショットを圧縮しないことを指定します。true
は、スナップショットが圧縮されることを指定します。
2 GB を超えるスナップショット ファイルは圧縮できません。 圧縮されたスナップショット ファイルは、マージ エージェントが実行されている場所で解凍されます。一般にプル サブスクリプションでは、サブスクライバーでファイルが解凍されるように、圧縮されたスナップショットが使用されます。 既定のフォルダー内のスナップショットは圧縮できません。 SQL Server Compact サブスクライバーをサポートするには、 false
を指定する必要があります。
[ @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) で、既定値は ftp
です。 このプロパティはパブリケーションごとに格納されるため、各パブリケーションは独自の @ftp_subdirctory を持つことができます。また、 NULL
値で示されるサブディレクトリを持たないことを選択することもできます。
パラメーター化されたフィルターを使用してパブリケーションのスナップショットを事前に生成する場合は、各サブスクライバー パーティションのデータ スナップショットが独自のフォルダーにある必要があります。 FTP を使用して事前に生成されたスナップショットのディレクトリ構造は、次の構造に従う必要があります。
<alternate_snapshot_folder>\ftp\<publisher_publicationDB_publication>\<partitionID>
.
Note
前の例の値 (山かっこ) は、パブリケーションとサブスクライバー パーティションの詳細によって異なります。
[ @ftp_login = ] N'ftp_login'
FTP サービスへの接続に使用するユーザー名。 @ftp_login は sysname で、既定値は anonymous
です。
[ @ftp_password = ] N'ftp_password'
FTP サービスへの接続に使用するユーザー パスワード。 @ftp_password は sysname で、既定値は NULL
です。
重要
空白のパスワードを使用しないでください。 のパスワードを使用します。
[ @conflict_retention = ] conflict_retention
競合が保持される保持期間を日数で指定します。 @conflict_retention は int で、競合テーブルから競合行が消去されるまでの既定値は 14
日です。
[ @keep_partition_changes = ] N'keep_partition_changes'
事前計算済みパーティションを使用できない場合に、パーティション変更の最適化を有効にするかどうかを指定します。 @keep_partition_changes は nvarchar(5) で、既定値は true
です。
false
は、パーティションの変更が最適化されていないことを意味し、事前計算済みパーティションが使用されていない場合、パーティション内のデータが変更されると、すべてのサブスクライバーに送信されるパーティションが検証されます。true
は、パーティションの変更が最適化され、変更されたパーティションに行があるサブスクライバーのみが影響を受けます。
事前計算済みパーティションを使用する場合は、 @use_partition_groups を true
に設定し、 @keep_partition_changes を false
に設定します。 詳細については、「 パラメーター化されたフィルター - 事前計算済みパーティションの最適化を参照してください。
Note
@keep_partition_changesに true
の値を指定する場合は、スナップショット エージェント パラメーター -MaxNetworkOptimization
に 1
の値を指定します。 このパラメーターの詳細については、「Replication スナップショット エージェント」を参照してください。 エージェント パラメーターを指定する方法については、「 Replication エージェントの管理を参照してください。
SQL Server Compact サブスクライバーでは、削除が正しく反映されるように、 @keep_partition_changes を true
に設定する必要があります。 false
に設定すると、サブスクライバーの行数が予想よりも多い場合があります。
[ @allow_subscription_copy = ] N'allow_subscription_copy'
このパブリケーションをサブスクライブするサブスクリプション データベースをコピーする機能を有効または無効にします。 @allow_subscription_copy は nvarchar(5) で、既定値は false
です。 コピーするサブスクリプション データベースのサイズは 2 GB 未満にする必要があります。
[ @allow_synctoalternate = ] N'allow_synctoalternate'
単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
[ @validate_subscriber_info = ] N'validate_subscriber_info'
パラメーター化された行フィルターを使用する場合、パブリッシュされたデータのサブスクライバー パーティションを定義するのに使用する関数を一覧表示します。 @validate_subscriber_info は nvarchar(500) で、既定値は NULL
です。 この情報は、マージ エージェントがサブスクライバーのパーティションを検証するときに使用されます。 たとえば、パラメーター化された行フィルターで SUSER_SNAME を使用する場合は、パラメーターを @validate_subscriber_info=N'SUSER_SNAME()
する必要があります。
Note
このパラメーターは指定しないでください。代わりに、SQL Server がフィルター条件を自動的に決定できるようにします。
[ @add_to_active_directory = ] N'add_to_active_directory'
このパラメーターは非推奨であり、スクリプトの下位互換性のために保持されます。 Microsoft Active Directory にパブリケーション情報を追加できなくなりました。
[ @max_concurrent_merge = ] max_concurrent_merge
同時マージ プロセスの最大数。 @max_concurrent_merge は int で、既定値は 0
です。 0
の値は、特定の時点で実行される同時実行マージ プロセスの数に制限がないことを意味します。
このプロパティは、マージ パブリケーションに対して同時に実行できる同時マージ プロセスの数に制限を設定します。 実行できる値よりも多くのマージ プロセスが同時にスケジュールされている場合は、余分なジョブがキューに格納され、現在実行中のマージ プロセスが完了するまで待機します。
[ @max_concurrent_dynamic_snapshots = ] max_concurrent_dynamic_snapshots
サブスクライバー パーティションのフィルター処理されたデータ スナップショットを生成するために同時に実行できるスナップショット エージェント セッションの最大数。 @max_concurrent_dynamic_snapshots は int で、既定値は 0
です。 0
場合、スナップショット セッションの数に制限はありません。 実行できる値よりも多くのスナップショット プロセスが同時にスケジュールされている場合は、余分なジョブがキューに格納され、現在実行中のスナップショット プロセスが完了するまで待機します。
[ @use_partition_groups = ] N'use_partition_groups'
事前計算済みパーティションを使用して同期プロセスを最適化することを指定します。 @use_partition_groups は nvarchar(5)であり、次のいずれかの値を指定できます。
値 | 説明 |
---|---|
true |
パブリケーションは事前計算済みパーティションを使用します。 |
false |
パブリケーションでは、事前計算済みパーティションは使用されません。 |
NULL (既定) |
システムがパーティション分割ストラテジを決定します。 |
既定では、事前計算済みパーティションが使用されます。 事前計算済みパーティションを使用しないようにするには、 @use_partition_groups を false
に設定する必要があります。 NULL
すると、事前計算済みパーティションを使用できるかどうかをシステムが決定します。 事前計算済みパーティションを使用できない場合、この値は実質的にエラーを生成せずに false
になります。 このような場合は、 @keep_partition_changes を true
に設定して、最適化を提供できます。 詳細については、「 パラメーター化されたフィルター - パラメーター化された行フィルター と パラメーター化されたフィルター - 事前計算されたパーティションの最適化を参照してください。
[ @publication_compatibility_level = ] N'publication_compatibility_level'
パブリケーションの下位互換性を示します。 @publication_compatibility_level は nvarchar(6)であり、次のいずれかの値を指定できます。
値 | バージョン |
---|---|
90RTM |
SQL Server 2005 (9.x) |
100RTM |
SQL Server 2008 (10.0.x) |
[ @replicate_ddl = ] replicate_ddl
パブリケーションでスキーマ レプリケーションがサポートされているかどうかを示します。 @replicate_ddl は int で、既定値は NULL
です。 1
はパブリッシャーで実行されるデータ定義言語 (DDL) ステートメントがレプリケートされることを示し、 0
は DDL ステートメントがレプリケートされていないことを示します。 詳細については、「パブリケーション データベースでのスキーマの変更」を参照してください。
@replicate_ddl パラメーターは、DDL ステートメントが列を追加するときに受け入れられます。 DDL ステートメントが次の理由で列を変更または削除すると、 @replicate_ddl パラメーターは無視されます。
列が削除されると、ディストリビューション エージェントが失敗する原因となる削除された列が新しい DML ステートメントに含まれるのを防ぐために、
sysarticlecolumns
を更新する必要があります。 レプリケーションでは常にスキーマ変更をレプリケートする必要があるため、 @replicate_ddl パラメーターは無視されます。列が変更されると、ソース データ型または null 値の許容が変更され、DML ステートメントにサブスクライバーのテーブルと互換性のない値が含まれる可能性があります。 そうした DML ステートメントは、ディストリビューション エージェントが失敗する原因となる場合があります。 レプリケーションでは常にスキーマ変更をレプリケートする必要があるため、 @replicate_ddl パラメーターは無視されます。
DDL ステートメントが新しい列を追加する場合、
sysarticlecolumns
には新しい列は含まれません。 DML ステートメントは、新しい列のデータをレプリケートしようとしません。 DDL のレプリケートまたはレプリケートは許容されるため、このパラメーターは受け入れられます。
[ @allow_subscriber_initiated_snapshot = ] N'allow_subscriber_initiated_snapshot'
このパブリケーションのサブスクライバーが、データ パーティションのフィルター選択されたスナップショットを生成するスナップショット処理を開始できるかどうかを指定します。 @allow_subscriber_initiated_snapshot は nvarchar(5) で、既定値は false
です。 true
は、サブスクライバーがスナップショット プロセスを開始できることを示します。
[ @allow_web_synchronization = ] N'allow_web_synchronization'
パブリケーションが Web 同期に対して有効かどうかを指定します。 @allow_web_synchronization は nvarchar(5) で、既定値は false
です。 true
は、このパブリケーションのサブスクリプションを HTTPS 経由で同期できることを指定します。 詳細については、「 Web Synchronization for Merge Replication」を参照してください。 SQL Server Compact サブスクライバーをサポートするには、 true
を指定する必要があります。
[ @web_synchronization_url = ] N'web_synchronization_url'
Web 同期に使用されるインターネット URL の既定値を指定します。 @web_synchronization_url は nvarchar(500) で、既定値は NULL
です。 sp_addmergepullsubscription_agentの実行時に明示的に設定されていない場合は、既定のインターネット URL を定義します。
[ @allow_partition_realignment = ] N'allow_partition_realignment'
パブリッシャーで、行の変更によりパーティションに変更があった場合、削除をサブスクライバーに送信するかどうかを決定します。 @allow_partition_realignment は nvarchar(5) で、既定値は true
です。
true
は、サブスクライバーのパーティションの一部ではなくなったデータを削除することで、パーティション変更の結果を反映するためにサブスクライバーに削除を送信します。false
サブスクライバー上の古いパーティションからデータが残ります。パブリッシャー上のこのデータに加えられた変更はこのサブスクライバーにはレプリケートされませんが、サブスクライバーで行われた変更はパブリッシャーにレプリケートされます。
@allow_partition_realignmentを false
に設定すると、履歴の目的でデータにアクセスできる必要がある場合に、古いパーティションからサブスクリプション内のデータを保持できます。
Note
@allow_partition_realignmentを false
に設定した結果としてサブスクライバーに残っているデータは、読み取り専用であるかのように扱う必要があります。ただし、これはレプリケーション システムによって適用されません。
[ @retention_period_unit = ] N'retention_period_unit'
@retentionによって設定された保有期間の単位を指定します。 @retention_period_unit は nvarchar(10)であり、次のいずれかの値を指定できます。
値 | バージョン |
---|---|
day (既定) |
保有期間は日数で指定します。 |
week |
リテンション期間は週単位で指定します。 |
month |
保有期間は月単位で指定されます。 |
year |
保有期間は年単位で指定されます。 |
[ @generation_leveling_threshold = ] generation_leveling_threshold
世代に含まれる変更の数を指定します。 世代とは、パブリッシャーまたはサブスクライバーに配信される変更のコレクションです。 @generation_leveling_threshold は int で、既定値は 1000
です。
[ @automatic_reinitialization_policy = ] automatic_reinitialization_policy
パブリケーションの変更で必要な自動再初期化の前に変更をサブスクライバーからアップロードするかどうかを指定します。ここで、@force_reinit_subscriptionの値1
指定されています。 @automatic_reinitialization_policy は bit で、既定値は 0
です。
1
は、自動再初期化が行われる前に変更がサブスクライバーからアップロードされることを意味します。
重要
パラメーター化されたフィルターを追加、削除、または変更した場合、サブスクライバーで保留中の変更を再初期化中にパブリッシャーにアップロードすることはできません。 保留中の変更をアップロードしたい場合は、フィルターを変更する前にすべてのサブスクリプションを同期してください。
[ @conflict_logging = ] N'conflict_logging'
競合レコードを格納する場所を指定します。 @conflict_logging は nvarchar(15)であり、次のいずれかの値を指定できます。
値 | 説明 |
---|---|
publisher |
競合レコードはパブリッシャーに格納されます。 |
subscriber |
競合レコードは、競合の原因となったサブスクライバーに保存されます。 SQL Server Compact サブスクライバーではサポートされていません。 |
both |
競合レコードは、パブリッシャーとサブスクライバーの両方に保存されます。 |
NULL (既定) |
レプリケーションでは、値@publication_compatibility_levelが90RTM されたときにboth に@conflict_loggingが自動的に設定され、それ以外のすべての場合はpublisher されます。 |
リターン コードの値
0
(成功) または 1
(失敗)。
解説
sp_addmergepublication
はマージ レプリケーションで使用されます。
@add_to_active_directory パラメーターを使用して Active Directory にパブリケーション オブジェクトを一覧表示するには、SQL Server オブジェクトが Active Directory に既に作成されている必要があります。
同じデータベース オブジェクトをパブリッシュするパブリケーションが複数存在する場合は、ALTER TABLE
、ALTER VIEW
、ALTER PROCEDURE
、ALTER FUNCTION
、およびALTER TRIGGER
DDL ステートメントをレプリケート1
、@replicate_ddl値を持つパブリケーションのみがレプリケートされます。 ただし、削除された列をパブリッシュするすべてのパブリケーションによって、 ALTER TABLE DROP COLUMN
DDL ステートメントがレプリケートされます。
SQL Server Compact サブスクライバーの場合、 @alternate_snapshot_folder の値は、 @snapshot_in_default_folder の値が false
されている場合にのみ使用されます。
パブリケーションに対して DDL レプリケーションを有効 (@replicate_ddl = 1
) にした場合、パブリケーションに対して非レプリケート DDL 変更を行うには、 sp_changemergepublication を最初に実行して、 @replicate_ddl を 0
に設定する必要があります。 レプリケートされていない DDL ステートメントが発行された後、 sp_changemergepublication
をもう一度実行して DDL レプリケーションを有効に戻すことができます。
例
-- To avoid storing the login and password in the script file, the value
-- is passed into SQLCMD as a scripting variable. 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".
--Declarations for adding a merge publication
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks2022';
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @login = $(Login);
SET @password = $(Password);
-- Enable merge replication on the publication database, using defaults.
USE master
EXEC sp_replicationdboption
@dbname=@publicationDB,
@optname=N'merge publish',
@value = N'true'
-- Create a new merge publication, explicitly setting the defaults.
USE [AdventureWorks2022]
EXEC sp_addmergepublication
-- These parameters are optional.
@publication = @publication,
-- optional parameters
@description = N'Merge publication of AdventureWorks2022.',
@publication_compatibility_level = N'120RTM';
-- Create a new snapshot job for the publication.
EXEC sp_addpublication_snapshot
@publication = @publication,
@job_login = @login,
@job_password = @password;
GO
アクセス許可
sysadmin固定サーバー ロールまたは固定データベース ロールdb_ownerのメンバーのみがsp_addmergepublication
を実行できます。