sp_addmergesubscription (Transact-SQL)
プッシュ マージ サブスクリプションまたはプル マージ サブスクリプションを作成します。このストアド プロシージャは、パブリッシャ側でパブリケーション データベースについて実行されます。
構文
sp_addmergesubscription [ @publication= ] 'publication'
[ , [ @subscriber = ] 'subscriber' ]
[ , [ @subscriber_db= ] 'subscriber_db' ]
[ , [ @subscription_type= ] 'subscription_type' ]
[ , [ @subscriber_type= ] 'subscriber_type' ]
[ , [ @subscription_priority= ] subscription_priority ]
[ , [ @sync_type= ] '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= ] 'optional_command_line' ]
[ , [ @description= ] 'description' ]
[ , [ @enabled_for_syncmgr= ] 'enabled_for_syncmgr' ]
[ , [ @offloadagent= ] remote_agent_activation]
[ , [ @offloadserver= ] 'remote_agent_server_name' ]
[ , [ @use_interactive_resolver= ] 'use_interactive_resolver' ]
[ , [ @merge_job_name= ] 'merge_job_name' ]
[ , [ @hostname = ] 'hostname'
引数
[ @publication=] 'publication'
パブリケーションの名前を指定します。publication のデータ型は sysname で、既定値はありません。パブリケーションは既に存在している必要があります。[ @subscriber =] 'subscriber'
サブスクライバの名前を指定します。subscriber のデータ型は sysname で、既定値は NULL です。[ @subscriber_db=] 'subscriber_db'
サブスクリプション データベースの名前を指定します。subscriber_db のデータ型は sysname で、既定値は NULL です。[ @subscription_type=] 'subscription_type'
サブスクリプションの種類を指定します。subscription_type のデータ型は nvarchar(15) で、既定値は PUSH です。push を指定した場合は、プッシュ サブスクリプションが追加され、ディストリビュータ側でマージ エージェントが追加されます。pull を指定した場合は、プル サブスクリプションが追加され、ディストリビュータ側でマージ エージェントは追加されません。注意 匿名サブスクリプションの場合、このストアド プロシージャを使用する必要はありません。
[ @subscriber_type=] 'subscriber_type'
サブスクライバの種類を指定します。subscriber_type のデータ型は nvarchar(15) で、次のいずれかの値を指定できます。値
説明
local (既定値)
パブリッシャだけが認識しているサブスクライバ。
global
すべてのサーバーが認識しているサブスクライバ。
SQL Server 2005 以降のバージョンでは、ローカル サブスクリプションはクライアント サブスクリプションと呼ばれ、グローバル サブスクリプションはサーバー サブスクリプションと呼ばれます。詳細については、「マージ レプリケーションで競合を検出および解決する方法」の「サブスクリプションの種類」を参照してください。
[ @subscription_priority=] subscription_priority
サブスクリプションの優先度を示す数値を指定します。subscription_priority のデータ型は real で、既定値は NULL です。ローカル サブスクリプションと匿名サブスクリプションの場合、優先度は 0.0 です。グローバル サブスクリプションの場合は、優先度を 100.0 未満にする必要があります。[ @sync_type=] 'sync_type'
サブスクリプションの同期の種類を指定します。sync_type のデータ型は nvarchar(15) で、既定値は automatic です。automatic または none を指定できます。automatic を指定した場合は、最初に、パブリッシュされたテーブルのスキーマと初期データがサブスクライバに転送されます。none を指定した場合は、パブリッシュされたテーブルのスキーマと初期データがサブスクライバに既に存在すると見なされます。システム テーブルとデータは常に転送されます。注意 none を指定することはお勧めしません。詳細については、「スナップショットを使用しないマージ サブスクリプションの初期化」を参照してください。
[ @frequency_type=] frequency_type
いつマージ エージェントを実行するかを示す値を指定します。frequency_type のデータ型は int で、次のいずれかの値を指定できます。値
説明
1
1 回
4
毎日
8
毎週
10
毎月
20
frequency_interval を基準とした月単位
40
SQL Server エージェントの起動時
NULL (既定値)
[ @frequency_interval=] frequency_interval
マージ エージェントを実行する日を指定します。frequency_interval のデータ型は int で、次のいずれかの値を指定できます。値
説明
1
日曜日
2
月曜日
3
火曜日
4
水曜日
5
木曜日
6
金曜日
7
土曜日
8
日
9
平日
10
週末
NULL (既定値)
[ @frequency_relative_interval=] frequency_relative_interval
スケジュールに組み込まれているマージを毎月第何週に実行するかを指定します。frequency_relative_interval のデータ型は int で、次のいずれかの値を指定できます。値
説明
1
第 1
2
第 2
4
第 3
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 で、次のいずれかの値を指定できます。値
説明
1
1 回
2
秒
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=] 'optional_command_line'
省略可能な実行用のコマンド プロンプトを指定します。optional_command_line のデータ型は nvarchar(4000) で、既定値は NULL です。このパラメータを使用して、出力をキャプチャしてファイルに保存するコマンドを追加したり、構成ファイルや属性を指定できます。[ @description=] 'description'
対象となるマージ サブスクリプションの短い説明を指定します。description のデータ型は nvarchar(255) で、既定値は NULL です。この値はレプリケーション モニタの Friendly Name 列に表示され、監視されるパブリケーションのサブスクリプションの並べ替えに使用できます。[ @enabled_for_syncmgr=] 'enabled_for_syncmgr'
Microsoft Windows 同期マネージャを介してサブスクリプションを同期できるかどうかを指定します。enabled_for_syncmgr のデータ型は nvarchar(5) で、既定値は FALSE です。false の場合、サブスクリプションは同期マネージャに登録されません。true の場合、サブスクリプションは同期マネージャに登録され、MicrosoftSQL Server Management Studio を起動しなくても同期できます。[ @offloadagent= ] remote_agent_activation
エージェントをリモートからアクティブ化できるかどうかを指定します。remote_agent_activation のデータ型は bit で、既定値は 0 です。注意 このパラメータは、スクリプトの下位互換性を確保するために用意されているものであり、使用は推奨されません。
[ @offloadserver= ] 'remote_agent_server_name'
エージェントのリモート起動に使用されるサーバーのネットワーク名を指定します。remote_agent_server_name のデータ型は sysname で、既定値は NULL です。[ @use_interactive_resolver= ] 'use_interactive_resolver'
対話的な競合解決が可能なすべてのアーティクルについて、競合を対話的に解決します。use_interactive_resolver のデータ型は nvarchar(5) で、既定値は FALSE です。[ @merge_job_name= ] 'merge_job_name'
このサブスクリプションに追加されるマージ エージェント ジョブの名前を指定します。merge_job_name のデータ型は sysname で、既定値は NULL です。このパラメータでは、ジョブを後で管理できるよう、マージ エージェント ジョブ名を提供できます。[ @hostname= ] 'hostname'
HOST_NAME がパラメータ化フィルタの WHERE 句で使用される場合に、この関数で返される値よりも優先する値を指定します。Hostname のデータ型は sysname で、既定値は NULL です。重要 パラメータ化された行フィルタ句では列名に関数を適用しないことをお勧めします。これは、LEFT([MyColumn]) = SUSER_SNAME() のように指定すると、パフォーマンスに問題が生じるためです。フィルタ句に HOST_NAME を指定して HOST_NAME 値よりも優先的に使用する場合は、CONVERT を使ってデータ型を変換する必要があります。このようなケースの推奨事項の詳細については、「パラメータ化された行フィルタ」の「HOST_NAME() 値の上書き」を参照してください。
戻り値
0 (成功) または 1 (失敗)
説明
sp_addmergesubscription はマージ レプリケーションで使用します。
sp_addmergesubscription が sysadmin 固定サーバー ロールのメンバによって実行され、プッシュ サブスクリプションが作成されると、マージ エージェント ジョブが暗黙的に作成され、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 [AdventureWorks]
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
権限
sp_addmergesubscription を実行できるのは、sysadmin 固定サーバー ロールまたは db_owner 固定データベース ロールのメンバだけです。