sp_addmergesubscription (Transact-SQL)

適用対象: SQL Server Azure SQL Managed Instance

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

Transact-SQL 構文表記規則

構文

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'

出版物の名前。 @publicationsysname で、既定値はありません。 パブリケーションは既に存在している必要があります。

[ @subscriber = ] N'subscriber'

サブスクライバーの名前。 @subscribersysname で、既定値は NULL です。

[ @subscriber_db = ] N'subscriber_db'

サブスクリプション データベースの名前。 @subscriber_dbsysname で、既定値は NULL です。

[ @subscription_type = ] N'subscription_type'

サブスクリプションの種類。 @subscription_typenvarchar(15) で、既定値は push です。

  • push場合、プッシュ サブスクリプションが追加され、マージ エージェントがディストリビューターに追加されます。
  • pull場合、ディストリビューターにマージ エージェントを追加せずにプル サブスクリプションが追加されます。

Note

匿名サブスクリプションでは、このストアド プロシージャを使用する必要はありません。

[ @subscriber_type = ] N'subscriber_type'

サブスクライバーの種類。 @subscriber_typenvarchar(15)であり、次のいずれかの値を指定できます。

Value 説明
local (既定値) パブリッシャーだけが認識しているサブスクライバー。
global すべてのサーバーが認識しているサブスクライバー。

SQL Server 2005 (9.x) 以降のバージョンでは、ローカル サブスクリプションはクライアント サブスクリプションと呼ばれ、グローバル サブスクリプションはサーバー サブスクリプションと呼ばれます。

[ @subscription_priority = ] subscription_priority

サブスクリプションの優先度を示す数値。 @subscription_priorityreal で、既定値は NULL です。 ローカル サブスクリプションと匿名サブスクリプションの場合、優先度は 0.0。 グローバル サブスクリプションの場合、優先度は 100.0未満である必要があります。

[ @sync_type = ] N'sync_type'

サブスクリプション同期の種類。 @sync_typenvarchar(15) で、既定値は automatic です。

  • automatic場合、パブリッシュされたテーブルのスキーマと初期データが最初にサブスクライバーに転送されます。
  • none場合、サブスクライバーはパブリッシュされたテーブルのスキーマと初期データを既に持っていると見なされます。 システム テーブルとデータは常に転送されます。

Note

noneの値は指定しないことをお勧めします。

[ @frequency_type = ] frequency_type

マージ エージェントの実行日時を示す値。 @frequency_typeint で、次のいずれかの値を指定できます。

Value 説明
1 1 回。
4 毎日
8 週単位
10 月単位
20 frequency_interval を基準とした月単位
40 SQL Server エージェントの起動時
NULL (既定)

[ @frequency_interval = ] frequency_interval

マージ エージェントを実行する日を指定します。 @frequency_intervalint で、次のいずれかの値を指定できます。

Value 説明
1 日曜日
2 月曜日
3 火曜日
4 水曜日
5 Thursday
6 金曜日
7 土曜日
8 日付
9 平日
10 週末
NULL (既定)

[ @frequency_relative_interval = ] frequency_relative_interval

各月の頻度間隔のスケジュールされたマージの発生。 @frequency_relative_intervalint であり、これらの値のいずれかを指定できます。

Value 説明
1 最初
2 Second
4 Third
8 4 番目
16 最後
NULL (既定)

[ @frequency_recurrence_factor = ] frequency_recurrence_factor

@frequency_typeによって使用される繰り返し係数。 @frequency_recurrence_factorint で、既定値は NULL です。

[ @frequency_subday = ] frequency_subday

@frequency_subday_intervalの単位。 @frequency_subdayint で、次のいずれかの値を指定できます。

Value 説明
1 1 回。
2 Second
4
8 時間
NULL (既定)

[ @frequency_subday_interval = ] frequency_subday_interval

各マージの間に @frequency_subday が発生する頻度。 @frequency_subday_intervalint で、既定値は NULL です。

[ @active_start_time_of_day = ] active_start_time_of_day

マージ エージェントが最初にスケジュールされた時刻。HHmmss形式です。 @active_start_time_of_dayint で、既定値は NULL です。

[ @active_end_time_of_day = ] active_end_time_of_day

マージ エージェントのスケジュールが終了した時刻(HHmmss形式)。 @active_end_time_of_dayint で、既定値は NULL です。

[ @active_start_date = ] active_start_date

マージ エージェントが最初にスケジュールされた日付。yyyyMMdd形式です。 @active_start_dateint で、既定値は NULL です。

[ @active_end_date = ] active_end_date

マージ エージェントのスケジュールが終了した日付。yyyyMMdd形式。 @active_end_dateint で、既定値は NULL です。

[ @optional_command_line = ] N'optional_command_line'

実行するオプションのコマンド プロンプト。 @optional_command_linenvarchar(4000) で、既定値は NULL です。 このパラメーターを使用して、出力をキャプチャしてファイルに保存するコマンドを追加したり、構成ファイルや属性を指定できます。

[ @description = ] N'description'

このマージ サブスクリプションの簡単な説明。 @descriptionnvarchar(255) で、既定値は NULL です。 この値は、レプリケーション モニターによって Friendly Name 列に表示されます。この列を使用して、監視対象のパブリケーションのサブスクリプションを並べ替えることができます。

[ @enabled_for_syncmgr = ] N'enabled_for_syncmgr'

サブスクリプションを Microsoft Windows 同期マネージャーを使用して同期できるかどうかを指定します。 @enabled_for_syncmgrnvarchar(5) で、既定値は false です。

  • false場合、サブスクリプションは同期マネージャーに登録されません。
  • true場合、サブスクリプションは同期マネージャーに登録され、SQL Server Management Studio を起動せずに同期できます。

[ @offloadagent = ] offloadagent

エージェントをリモートでアクティブ化できることを指定します。 @offloadagentbit で、既定値は 0 です。

このパラメーターは非推奨であり、スクリプトの下位互換性のために保持されます。

[ @offloadserver = ] N'offloadserver'

リモート エージェントのアクティブ化に使用するサーバーのネットワーク名を指定します。 @offloadserversysname で、既定値は NULL です。

[ @use_interactive_resolver = ] N'use_interactive_resolver'

対話的に競合を回避できるすべてのアーティクルについて、対話的に競合を解決できるようにします。 @use_interactive_resolvernvarchar(5) で、既定値は false です。

[ @merge_job_name = ] N'merge_job_name'

このパラメーターは非推奨であり、設定できません。 @merge_job_namesysname で、既定値は NULL です。

[ @hostname = ] N'hostname'

パラメーター化されたフィルターの WHERE 句でこの関数が使用されている場合に、 HOST_NAME によって返される値をオーバーライドします。 @hostnamesysname で、既定値は 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を実行できます。