sp_addmergesubscription (Transact-SQL)
適用対象: SQL Server Azure SQL Managed Instance
プッシュ マージ サブスクリプションまたはプル マージ サブスクリプションを作成します。 このストアド プロシージャは、パブリッシャー側のパブリケーション データベースで実行されます。
構文
sp_addmergesubscription
[ @publication = ] N'publication'
[ , [ @subscriber = ] N'subscriber' ]
[ , [ @subscriber_db = ] N'subscriber_db' ]
[ , [ @subscription_type = ] N'subscription_type' ]
[ , [ @subscriber_type = ] N'subscriber_type' ]
[ , [ @subscription_priority = ] subscription_priority ]
[ , [ @sync_type = ] N'sync_type' ]
[ , [ @frequency_type = ] frequency_type ]
[ , [ @frequency_interval = ] frequency_interval ]
[ , [ @frequency_relative_interval = ] frequency_relative_interval ]
[ , [ @frequency_recurrence_factor = ] frequency_recurrence_factor ]
[ , [ @frequency_subday = ] frequency_subday ]
[ , [ @frequency_subday_interval = ] frequency_subday_interval ]
[ , [ @active_start_time_of_day = ] active_start_time_of_day ]
[ , [ @active_end_time_of_day = ] active_end_time_of_day ]
[ , [ @active_start_date = ] active_start_date ]
[ , [ @active_end_date = ] active_end_date ]
[ , [ @optional_command_line = ] N'optional_command_line' ]
[ , [ @description = ] N'description' ]
[ , [ @enabled_for_syncmgr = ] N'enabled_for_syncmgr' ]
[ , [ @offloadagent = ] offloadagent ]
[ , [ @offloadserver = ] N'offloadserver' ]
[ , [ @use_interactive_resolver = ] N'use_interactive_resolver' ]
[ , [ @merge_job_name = ] N'merge_job_name' ]
[ , [ @hostname = ] N'hostname' ]
[ ; ]
引数
[ @publication = ] N'publication'
出版物の名前。 @publication は sysname で、既定値はありません。 パブリケーションは既に存在している必要があります。
[ @subscriber = ] N'subscriber'
サブスクライバーの名前。 @subscriber は sysname で、既定値は NULL
です。
[ @subscriber_db = ] N'subscriber_db'
サブスクリプション データベースの名前。 @subscriber_db は sysname で、既定値は NULL
です。
[ @subscription_type = ] N'subscription_type'
サブスクリプションの種類。 @subscription_type は nvarchar(15) で、既定値は push
です。
push
場合、プッシュ サブスクリプションが追加され、マージ エージェントがディストリビューターに追加されます。pull
場合、ディストリビューターにマージ エージェントを追加せずにプル サブスクリプションが追加されます。
Note
匿名サブスクリプションでは、このストアド プロシージャを使用する必要はありません。
[ @subscriber_type = ] N'subscriber_type'
サブスクライバーの種類。 @subscriber_type は nvarchar(15)であり、次のいずれかの値を指定できます。
Value | 説明 |
---|---|
local (既定値) |
パブリッシャーだけが認識しているサブスクライバー。 |
global |
すべてのサーバーが認識しているサブスクライバー。 |
SQL Server 2005 (9.x) 以降のバージョンでは、ローカル サブスクリプションはクライアント サブスクリプションと呼ばれ、グローバル サブスクリプションはサーバー サブスクリプションと呼ばれます。
[ @subscription_priority = ] subscription_priority
サブスクリプションの優先度を示す数値。 @subscription_priority は real で、既定値は NULL
です。 ローカル サブスクリプションと匿名サブスクリプションの場合、優先度は 0.0
。 グローバル サブスクリプションの場合、優先度は 100.0
未満である必要があります。
[ @sync_type = ] N'sync_type'
サブスクリプション同期の種類。 @sync_type は nvarchar(15) で、既定値は automatic
です。
automatic
場合、パブリッシュされたテーブルのスキーマと初期データが最初にサブスクライバーに転送されます。none
場合、サブスクライバーはパブリッシュされたテーブルのスキーマと初期データを既に持っていると見なされます。 システム テーブルとデータは常に転送されます。
Note
none
の値は指定しないことをお勧めします。
[ @frequency_type = ] frequency_type
マージ エージェントの実行日時を示す値。 @frequency_type は int で、次のいずれかの値を指定できます。
Value | 説明 |
---|---|
1 |
1 回。 |
4 |
毎日 |
8 |
週単位 |
10 |
月単位 |
20 |
frequency_interval を基準とした月単位 |
40 |
SQL Server エージェントの起動時 |
NULL (既定) |
[ @frequency_interval = ] frequency_interval
マージ エージェントを実行する日を指定します。 @frequency_interval は int で、次のいずれかの値を指定できます。
Value | 説明 |
---|---|
1 |
日曜日 |
2 |
月曜日 |
3 |
火曜日 |
4 |
水曜日 |
5 |
Thursday |
6 |
金曜日 |
7 |
土曜日 |
8 |
日付 |
9 |
平日 |
10 |
週末 |
NULL (既定) |
[ @frequency_relative_interval = ] frequency_relative_interval
各月の頻度間隔のスケジュールされたマージの発生。 @frequency_relative_interval は int であり、これらの値のいずれかを指定できます。
Value | 説明 |
---|---|
1 |
最初 |
2 |
Second |
4 |
Third |
8 |
4 番目 |
16 |
最後 |
NULL (既定) |
[ @frequency_recurrence_factor = ] frequency_recurrence_factor
@frequency_typeによって使用される繰り返し係数。 @frequency_recurrence_factor は int で、既定値は NULL
です。
[ @frequency_subday = ] frequency_subday
@frequency_subday_intervalの単位。 @frequency_subday は int で、次のいずれかの値を指定できます。
Value | 説明 |
---|---|
1 |
1 回。 |
2 |
Second |
4 |
分 |
8 |
時間 |
NULL (既定) |
[ @frequency_subday_interval = ] frequency_subday_interval
各マージの間に @frequency_subday が発生する頻度。 @frequency_subday_interval は int で、既定値は NULL
です。
[ @active_start_time_of_day = ] active_start_time_of_day
マージ エージェントが最初にスケジュールされた時刻。HHmmss
形式です。 @active_start_time_of_day は int で、既定値は NULL
です。
[ @active_end_time_of_day = ] active_end_time_of_day
マージ エージェントのスケジュールが終了した時刻(HHmmss
形式)。 @active_end_time_of_day は int で、既定値は NULL
です。
[ @active_start_date = ] active_start_date
マージ エージェントが最初にスケジュールされた日付。yyyyMMdd
形式です。 @active_start_date は int で、既定値は NULL
です。
[ @active_end_date = ] active_end_date
マージ エージェントのスケジュールが終了した日付。yyyyMMdd
形式。 @active_end_date は int で、既定値は NULL
です。
[ @optional_command_line = ] N'optional_command_line'
実行するオプションのコマンド プロンプト。 @optional_command_line は nvarchar(4000) で、既定値は NULL
です。 このパラメーターを使用して、出力をキャプチャしてファイルに保存するコマンドを追加したり、構成ファイルや属性を指定できます。
[ @description = ] N'description'
このマージ サブスクリプションの簡単な説明。 @description は nvarchar(255) で、既定値は NULL
です。 この値は、レプリケーション モニターによって Friendly Name
列に表示されます。この列を使用して、監視対象のパブリケーションのサブスクリプションを並べ替えることができます。
[ @enabled_for_syncmgr = ] N'enabled_for_syncmgr'
サブスクリプションを Microsoft Windows 同期マネージャーを使用して同期できるかどうかを指定します。 @enabled_for_syncmgr は nvarchar(5) で、既定値は false
です。
false
場合、サブスクリプションは同期マネージャーに登録されません。true
場合、サブスクリプションは同期マネージャーに登録され、SQL Server Management Studio を起動せずに同期できます。
[ @offloadagent = ] offloadagent
エージェントをリモートでアクティブ化できることを指定します。 @offloadagent は bit で、既定値は 0
です。
このパラメーターは非推奨であり、スクリプトの下位互換性のために保持されます。
[ @offloadserver = ] N'offloadserver'
リモート エージェントのアクティブ化に使用するサーバーのネットワーク名を指定します。 @offloadserver は sysname で、既定値は NULL
です。
[ @use_interactive_resolver = ] N'use_interactive_resolver'
対話的に競合を回避できるすべてのアーティクルについて、対話的に競合を解決できるようにします。 @use_interactive_resolver は nvarchar(5) で、既定値は false
です。
[ @merge_job_name = ] N'merge_job_name'
このパラメーターは非推奨であり、設定できません。 @merge_job_name は sysname で、既定値は NULL
です。
[ @hostname = ] N'hostname'
パラメーター化されたフィルターの WHERE 句でこの関数が使用されている場合に、 HOST_NAME によって返される値をオーバーライドします。 @hostname は sysname で、既定値は NULL
です。
重要
パラメーター化された行フィルター句では列名に関数を適用しないことをお勧めします。これは、 LEFT([MyColumn]) = SUSER_SNAME()
のように指定すると、パフォーマンスに問題が生じるためです。 フィルター句で HOST_NAME を使用し、HOST_NAME値をオーバーライドする場合は、 CONVERT を使用してデータ型を変換することが必要になる場合があります。 この場合のベスト プラクティスの詳細については、「パラメーター化されたフィルター - パラメーター化された行フィルター」の「HOST_NAME() 値のオーバーライド」セクション参照してください。
リターン コードの値
0
(成功) または 1
(失敗)。
解説
sp_addmergesubscription
はマージ レプリケーションで使用されます。
sysadmin固定サーバー ロールのメンバーがプッシュ サブスクリプションを作成するためにsp_addmergesubscription
を実行すると、マージ エージェント ジョブが暗黙的に作成され、SQL Server エージェント サービス アカウントで実行されます。 sp_addmergepushsubscription_agentを実行し、@job_loginと@job_passwordのエージェント固有の別の Windows アカウントの資格情報を指定することをお勧めします。 詳細については、「 レプリケーション エージェント セキュリティ モデル」を参照してください。
例
-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). 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 @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @hostname AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica';
SET @hostname = N'adventure-works\david8'
-- Add a push subscription to a merge publication.
USE [AdventureWorks2022];
EXEC sp_addmergesubscription
@publication = @publication,
@subscriber = @subscriber,
@subscriber_db = @subscriptionDB,
@subscription_type = N'push',
@hostname = @hostname;
--Add an agent job to synchronize the push subscription.
EXEC sp_addmergepushsubscription_agent
@publication = @publication,
@subscriber = @subscriber,
@subscriber_db = @subscriptionDB,
@job_login = $(Login),
@job_password = $(Password);
GO
アクセス許可
sysadmin固定サーバー ロールまたは固定データベース ロールdb_ownerのメンバーのみがsp_addmergesubscription
を実行できます。