次の方法で共有


sp_addpullsubscription_agent (Transact-SQL)

適用対象: SQL Server Azure SQL Managed Instance

トランザクション パブリケーションに対するプル サブスクリプションの同期で使用される、スケジュールされたエージェント ジョブを追加します。 このストアド プロシージャは、サブスクリプション データベースのサブスクライバーで実行されます。

Transact-SQL 構文表記規則

構文

sp_addpullsubscription_agent
    [ @publisher = ] N'publisher'
    [ , [ @publisher_db = ] N'publisher_db' ]
    , [ @publication = ] N'publication'
    [ , [ @subscriber = ] N'subscriber' ]
    [ , [ @subscriber_db = ] N'subscriber_db' ]
    [ , [ @subscriber_security_mode = ] subscriber_security_mode ]
    [ , [ @subscriber_login = ] N'subscriber_login' ]
    [ , [ @subscriber_password = ] N'subscriber_password' ]
    [ , [ @distributor = ] N'distributor' ]
    [ , [ @distribution_db = ] N'distribution_db' ]
    [ , [ @distributor_security_mode = ] distributor_security_mode ]
    [ , [ @distributor_login = ] N'distributor_login' ]
    [ , [ @distributor_password = ] N'distributor_password' ]
    [ , [ @optional_command_line = ] N'optional_command_line' ]
    [ , [ @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 ]
    [ , [ @distribution_jobid = ] distribution_jobid OUTPUT ]
    [ , [ @encrypted_distributor_password = ] encrypted_distributor_password ]
    [ , [ @enabled_for_syncmgr = ] N'enabled_for_syncmgr' ]
    [ , [ @ftp_address = ] N'ftp_address' ]
    [ , [ @ftp_port = ] ftp_port ]
    [ , [ @ftp_login = ] N'ftp_login' ]
    [ , [ @ftp_password = ] N'ftp_password' ]
    [ , [ @alt_snapshot_folder = ] N'alt_snapshot_folder' ]
    [ , [ @working_directory = ] N'working_directory' ]
    [ , [ @use_ftp = ] N'use_ftp' ]
    [ , [ @publication_type = ] publication_type ]
    [ , [ @dts_package_name = ] N'dts_package_name' ]
    [ , [ @dts_package_password = ] N'dts_package_password' ]
    [ , [ @dts_package_location = ] N'dts_package_location' ]
    [ , [ @reserved = ] N'reserved' ]
    [ , [ @offloadagent = ] N'offloadagent' ]
    [ , [ @offloadserver = ] N'offloadserver' ]
    [ , [ @job_name = ] N'job_name' ]
    [ , [ @job_login = ] N'job_login' ]
    [ , [ @job_password = ] N'job_password' ]
[ ; ]

引数

[ @publisher = ] N'publisher'

パブリッシャーの名前。 @publishersysname で、既定値はありません。

Note

サーバー名は、既定のインスタンスの <Hostname>,<PortNumber> として指定することも、名前付きインスタンスの <Hostname>\<InstanceName>,<PortNumber> として指定することもできます。 SQL Server がカスタム ポートを使用して Linux または Windows にデプロイされ、ブラウザー サービスが無効になっている場合に、接続のポート番号を指定します。 リモート ディストリビューターのカスタム ポート番号の使用は、SQL Server 2019 (15.x) 以降のバージョンに適用されます。

[ @publisher_db = ] N'publisher_db'

パブリッシャー データベースの名前。 @publisher_dbsysname で、既定値は NULL です。 @publisher_db は Oracle パブリッシャーによって無視されます。

[ @publication = ] N'publication'

出版物の名前。 @publicationsysname で、既定値はありません。

[ @subscriber = ] N'subscriber'

サブスクライバー データベースが可用性グループ内にある場合は、サブスクライバー インスタンスの名前または AG リスナーの名前。 @subscribersysname で、既定値は NULL です。

Note

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

AG の一部であるサブスクライバーに対して sp_addpullsubscription_agent を実行する場合は、 @subscriber を AG リスナー名に設定します。 SQL Server 2016 (13.x) 以前のバージョンまたは CU 16 より前の SQL Server 2017 (14.x) を実行した場合、ストアド プロシージャはエラーを返さずに実行されますが、Replication ディストリビューション エージェント@subscriber パラメーターは AG リスナー名を参照しません。パラメーターは、コマンドが実行されるサブスクライバー サーバー名で作成されます。 この問題を修正するには、ディストリビューション エージェント ジョブ @subscriberパラメーターを AG リスナー名の値で手動で更新します。

[ @subscriber_db = ] N'subscriber_db'

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

Note

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

[ @subscriber_security_mode = ] subscriber_security_mode

同期時にサブスクライバーに接続するときに使用するセキュリティ モード。 @subscriber_security_modeint で、既定値は NULL です。

  • 0 は SQL Server 認証を指定します
  • 1Windows 認証を指定します

Note

このパラメーターは非推奨であり、スクリプトの下位互換性のために保持されます。 ディストリビューション エージェントは、常に Windows 認証を使用してローカル サブスクライバーに接続します。 このパラメーターに NULL または 1 以外の値を指定すると、警告メッセージが返されます。

[ @subscriber_login = ] N'subscriber_login'

同期時にサブスクライバーに接続するときに使用するサブスクライバー ログイン。 @subscriber_loginsysname で、既定値は NULL です。

Note

このパラメーターは非推奨であり、スクリプトの下位互換性のために保持されます。 このパラメーターに値を指定すると、警告メッセージが返されますが、値は無視されます。

[ @subscriber_password = ] N'subscriber_password'

サブスクライバーのパスワード。 subscriber_security_mode0 に設定されている場合は、subscriber_passwordが必要です。 @subscriber_passwordsysname で、既定値は NULL です。 サブスクライバー パスワードが使用されている場合は、自動的に暗号化されます。

Note

このパラメーターは非推奨であり、スクリプトの下位互換性のために保持されます。 このパラメーターに値を指定すると、警告メッセージが返されますが、値は無視されます。

[ @distributor = ] N'distributor'

ディストリビューターの名前。 @distributorsysname で、既定値は @publisher で指定されています。

[ @distribution_db = ] N'distribution_db'

ディストリビューション データベースの名前。 @distribution_dbsysname で、既定値は NULL です。

[ @distributor_security_mode = ] distributor_security_mode

Note

Microsoft Entra ID の、旧称は Azure Active Directory(Azure AD)です。

同期時にディストリビューターに接続するときに使用するセキュリティ モード。 @distributor_security_modeint で、既定値は 1 です。 次の値は、セキュリティ モードを定義します。

  • 0 は SQL Server 認証を指定します。
  • 1はWindows 認証を指定します。
  • 2 は、SQL Server 2022 (16.x) CU 6 以降の Microsoft Entra パスワード認証を指定します。
  • 3 は、SQL Server 2022 (16.x) CU 6 以降の Microsoft Entra 統合認証を指定します。
  • 4 は、SQL Server 2022 (16.x) CU 6 以降の Microsoft Entra トークン認証を指定します。

重要

可能な場合は、Windows 認証を使用します。

[ @distributor_login = ] N'distributor_login'

同期時にディストリビューターに接続するときに使用するディストリビューター ログイン。 @distributor_loginsysname で、既定値は NULL です。 @distributor_security_mode0 に設定されている場合は、@distributor_loginが必要です。

[ @distributor_password = ] N'distributor_password'

ディストリビューターのパスワード。 distributor_security_mode0 に設定されている場合は、distributor_passwordが必要です。 @distributor_passwordsysname で、既定値は NULL です。

重要

空白のパスワードは使用しないでください。 強力なパスワードを使用してください。 可能であれば、実行時、ユーザーに対してセキュリティ資格情報の入力を要求します。 スクリプト ファイルに資格情報を格納する必要がある場合は、不正アクセスを防ぐために、ファイルを保護します。

[ @optional_command_line = ] N'optional_command_line'

ディストリビューション エージェントに提供される省略可能なコマンド プロンプト。 たとえば、-DefinitionFile C:\Distdef.txt または -CommitBatchSize 10 です。 @optional_command_linenvarchar(4000)で、既定値は空の文字列です。

[ @frequency_type = ] frequency_type

ディストリビューション エージェントをスケジュールする頻度。 @frequency_typeint で、次のいずれかの値を指定できます。

説明
1 指定日時
2 (既定) オン デマンド
4 毎日
8 週単位
16 月単位
32 月単位の相対
64 自動開始
128 定期的

Note

64の値を指定すると、ディストリビューション エージェントが連続モードで実行されます。 これは、エージェントの -Continuous パラメーターの設定に対応します。 詳細については、「 Replication Distribution Agent」を参照してください。

[ @frequency_interval = ] frequency_interval

@frequency_typeによって設定された頻度に適用する値。 @frequency_intervalint で、既定値は 1 です。

[ @frequency_relative_interval = ] frequency_relative_interval

ディストリビューション エージェントの日付。 このパラメーターは、 @frequency_type32 (毎月の相対) に設定されている場合に使用されます。 @frequency_relative_intervalint で、次のいずれかの値を指定できます。

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

[ @frequency_recurrence_factor = ] frequency_recurrence_factor

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

[ @frequency_subday = ] frequency_subday

定義された期間中にスケジュールを変更する頻度を指定します。 @frequency_subdayint で、次のいずれかの値を指定できます。

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

[ @frequency_subday_interval = ] frequency_subday_interval

@frequency_subdayの間隔。 @frequency_subday_intervalint で、既定値は 1 です。

[ @active_start_time_of_day = ] active_start_time_of_day

ディストリビューション エージェントが最初にスケジュールされ、HHmmss形式の時刻。 @active_start_time_of_dayint で、既定値は 0 です。

[ @active_end_time_of_day = ] active_end_time_of_day

ディストリビューション エージェントのスケジュールが終了した時刻。HHmmss形式です。 @active_end_time_of_dayint で、既定値は 0 です。

[ @active_start_date = ] active_start_date

ディストリビューション エージェントが最初にスケジュールされた日付。yyyyMMdd形式です。 @active_start_dateint で、既定値は 0 です。

[ @active_end_date = ] active_end_date

ディストリビューション エージェントのスケジュールが終了した日付。yyyyMMdd形式です。 @active_end_dateint で、既定値は 0 です。

[ @distribution_jobid = ] distribution_jobid OUTPUT

このジョブのディストリビューション エージェントの ID。 @distribution_jobid は、 binary(16) 型の OUTPUT パラメーターで、既定値は NULL です。

[ @encrypted_distributor_password = ] encrypted_distributor_password

@encrypted_distributor_passwordbit で、既定値は 0 です。

Note

@encrypted_distributor_passwordの設定はサポートされなくなりました。 この bit パラメーターを 1 に設定しようとすると、エラーが発生します。

[ @enabled_for_syncmgr = ] N'enabled_for_syncmgr'

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

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

[ @ftp_address = ] N'ftp_address'

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

[ @ftp_port = ] ftp_port

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

[ @ftp_login = ] N'ftp_login'

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

[ @ftp_password = ] N'ftp_password'

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

[ @alt_snapshot_folder = ] N'alt_snapshot_folder'

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

[ @working_directory = ] N'working_directory'

パブリケーションのデータ ファイルとスキーマ ファイルを格納するために使用される作業ディレクトリの名前。 @working_directorynvarchar(255) で、既定値は NULL です。 名前は UNC 形式で指定する必要があります。

[ @use_ftp = ] N'use_ftp'

通常のプロトコルの代わりに FTP を使用してスナップショットを取得することを指定します。 @use_ftpnvarchar(5) で、既定値は false です。

[ @publication_type = ] publication_type

パブリケーションのレプリケーションの種類を指定します。 @publication_typetinyint で、既定値は 0 です。

  • 0場合、パブリケーションはトランザクションの種類です。
  • 1場合、パブリケーションはスナップショットの種類です。
  • 2場合、パブリケーションはマージ型です。

[ @dts_package_name = ] N'dts_package_name'

DTS パッケージの名前を指定します。 @dts_package_namesysname で、既定値は NULL です。 たとえば、DTSPub_Package というパッケージを指定するには、パラメーターを @dts_package_name = N'DTSPub_Package' と設定します。

[ @dts_package_password = ] N'dts_package_password'

パッケージにパスワードがある場合は、そのパスワードを指定します。 @dts_package_passwordsysname で、既定値は NULL です。つまり、パスワードがパッケージに含まれていないことを意味します。

Note

@dts_package_nameが指定されている場合は、パスワードを指定する必要があります。

[ @dts_package_location = ] N'dts_package_location'

パッケージの場所を指定します。 @dts_package_locationnvarchar(12) で、既定値は subscriber です。 パッケージの場所は、 distributor または subscriberできます。

[ @reserved = ] N'reserved'

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

[ @offloadagent = ] N'offloadagent'

このパラメーターは非推奨であり、スクリプトの下位互換性のために保持されます。 このパラメーターに値を指定すると、警告メッセージが返されますが、値は無視されます。 @offloadagentfalse 以外の値に設定すると、エラーが発生します。

[ @offloadserver = ] N'offloadserver'

このパラメーターは非推奨であり、スクリプトの下位互換性のために保持されます。 このパラメーターに値を指定すると、警告メッセージが返されますが、値は無視されます。 @offloadserverfalse 以外の値に設定すると、エラーが発生します。

[ @job_name = ] N'job_name'

既存のエージェント ジョブの名前。 @job_namesysname で、既定値は NULL です。 このパラメーターは、新しく作成されたジョブ (既定値) ではなく、既存のジョブを使用してサブスクリプションが同期されている場合にのみ指定されます。 sysadmin固定サーバー ロールのメンバーでない場合は、@job_nameを指定するときに@job_login@job_passwordを指定する必要があります。

[ @job_login = ] N'job_login'

エージェントが実行される Windows アカウントのログイン。 @job_loginnvarchar(257)で、既定値はありません。 この Windows アカウントはサブスクライバーへのエージェント接続で常に使用されます。

[ @job_password = ] N'job_password'

エージェントが実行される Windows アカウントのパスワード。 @job_passwordsysname で、既定値はありません。

重要

空白のパスワードは使用しないでください。 強力なパスワードを使用してください。 可能であれば、実行時、ユーザーに対してセキュリティ資格情報の入力を要求します。 スクリプト ファイルに資格情報を格納する必要がある場合は、不正アクセスを防ぐために、ファイルを保護します。

リターン コードの値

0 (成功) または 1 (失敗)。

解説

sp_addpullsubscription_agent は、スナップショット レプリケーションとトランザクション レプリケーションで使用されます。

-- 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".

-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publisher AS sysname;
DECLARE @publicationDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks2022';

-- At the subscription database, create a pull subscription 
-- to a transactional publication.
USE [AdventureWorks2022Replica]
EXEC sp_addpullsubscription 
  @publisher = @publisher, 
  @publication = @publication, 
  @publisher_db = @publicationDB;

-- Add an agent job to synchronize the pull subscription.
EXEC sp_addpullsubscription_agent 
  @publisher = @publisher, 
  @publisher_db = @publicationDB, 
  @publication = @publication, 
  @distributor = @publisher, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO

アクセス許可

sysadmin固定サーバー ロールまたは固定データベース ロールdb_ownerのメンバーのみがsp_addpullsubscription_agentを実行できます。