sp_addpushsubscription_agent (Transact-SQL)

適用対象: SQL ServerAzure SQL Managed Instance

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

重要

リモート ディストリビューターを使用するパブリッシャーを構成する場合は、 job_login および job_passwordを含むすべてのパラメーターに指定された値がディストリビューターにプレーン テキストとして送信されます。 このストアド プロシージャを実行する前に、パブリッシャーとリモート ディストリビューターの間の接続を暗号化する必要があります。 詳細については、「接続を暗号化するために SQL Server データベース エンジンを構成する」を参照してください。

Transact-SQL 構文表記規則

構文

sp_addpushsubscription_agent
    [ @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' ]
    [ , [ @job_login = ] N'job_login' ]
    [ , [ @job_password = ] N'job_password' ]
    [ , [ @job_name = ] N'job_name' ]
    [ , [ @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 ]
    [ , [ @dts_package_name = ] N'dts_package_name' ]
    [ , [ @dts_package_password = ] N'dts_package_password' ]
    [ , [ @dts_package_location = ] N'dts_package_location' ]
    [ , [ @enabled_for_syncmgr = ] N'enabled_for_syncmgr' ]
    [ , [ @distribution_job_name = ] N'distribution_job_name' ]
    [ , [ @publisher = ] N'publisher' ]
    [ , [ @subscriber_provider = ] N'subscriber_provider' ]
    [ , [ @subscriber_datasrc = ] N'subscriber_datasrc' ]
    [ , [ @subscriber_location = ] N'subscriber_location' ]
    [ , [ @subscriber_provider_string = ] N'subscriber_provider_string' ]
    [ , [ @subscriber_catalog = ] N'subscriber_catalog' ]
[ ; ]

引数

[ @publication = ] N'publication'

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

[ @subscriber = ] N'subscriber'

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

Note

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

[ @subscriber_db = ] N'subscriber_db'

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

SQL Server 以外のサブスクライバーの場合は、subscriber_db値 (既定の宛先)指定します。

[ @subscriber_security_mode = ] subscriber_security_mode

Note

Microsoft Entra ID は、以前は Azure Active Directory (Azure AD) と呼ばれていました。

同期時にサブスクライバーに接続するときに使用するセキュリティ モード。 @subscriber_security_modeは smallint で、既定値は 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 トークン認証を指定します。

重要

キュー更新サブスクリプションの場合は、サブスクライバーへの接続に SQL Server 認証を使用し、各サブスクライバーへの接続に別のアカウントを指定します。 その他のすべてのサブスクリプションでは、Windows 認証を使用します。

[ @subscriber_login = ] N'subscriber_login'

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

[ @subscriber_password = ] N'subscriber_password'

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

重要

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

[ @job_login = ] N'job_login'

エージェントが実行されているアカウントのログイン。 Azure SQL Managed Instance では、SQL Server アカウントを使用します。 @job_loginは nvarchar(257) で、既定値は NULL. この Windows アカウントは、エージェントがディストリビューターに接続するとき、および Windows 統合認証を使用してサブスクライバーに接続するときに必ず使用されます。

[ @job_password = ] N'job_password'

エージェントを実行するアカウントのパスワード。 @job_passwordは sysname で、既定値はありません。

重要

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

[ @job_name = ] N'job_name'

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

[ @frequency_type = ] frequency_type

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

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

Note

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

[ @frequency_interval = ] frequency_interval

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

[ @frequency_relative_interval = ] frequency_relative_interval

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

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

[ @frequency_recurrence_factor = ] frequency_recurrence_factor

@frequency_typeによって使用される 繰り返し係数。 @frequency_recurrence_factorは int で、既定値は 0.

[ @frequency_subday = ] frequency_subday

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

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

[ @frequency_subday_interval = ] frequency_subday_interval

@frequency_subday間隔。 @frequency_subday_intervalは int で、既定値は 5.

[ @active_start_time_of_day = ] active_start_time_of_day

ディストリビューション エージェントが最初にスケジュールされる時刻。次のようにHHmmss書式設定されます。 @active_start_time_of_dayは int で、既定値は 0.

[ @active_end_time_of_day = ] active_end_time_of_day

ディストリビューション エージェントのスケジュールが終了した時刻。次のようにHHmmss書式設定されます。 @active_end_time_of_dayは int で、既定値は 235959.

[ @active_start_date = ] active_start_date

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

[ @active_end_date = ] active_end_date

ディストリビューション エージェントのスケジュールが終了した日付。次のようにyyyyMMdd書式設定されます。 @active_end_dateは int で、既定値は 99991231.

[ @dts_package_name = ] N'dts_package_name'

データ変換サービス (DTS) パッケージの名前を指定します。 @dts_package_nameは sysname で、既定値は NULL. たとえば、パッケージ名 DTSPub_Packageを指定する場合、パラメーターは @dts_package_name = N'DTSPub_Package'.

[ @dts_package_password = ] N'dts_package_password'

パッケージを実行するために必要なパスワードを指定します。 @dts_package_passwordは sysname で、既定値はNULLパッケージにパスワードがないことを意味します。

Note

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

[ @dts_package_location = ] N'dts_package_location'

パッケージの場所を指定します。 @dts_package_locationは nvarchar(12) で、既定値は distributor. パッケージの場所は、次subscriberのいずれかになりますdistributor

[ @enabled_for_syncmgr = ] N'enabled_for_syncmgr'

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

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

[ @distribution_job_name = ] N'distribution_job_name'

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

[ @publisher = ] N'publisher'

パブリッシャーの名前。 @publisherは sysname で、既定値は NULL.

[ @subscriber_provider = ] N'subscriber_provider'

SQL Server 以外のデータ ソースの OLE DB プロバイダーが登録される一意のプログラム識別子 (PROGID)。 @subscriber_providerは sysname で、既定値は NULL. @subscriber_providerは、ディストリビューターにインストールされている OLE DB プロバイダーに対して一意である必要があります。 @subscriber_providerは、SQL Server 以外のサブスクライバーでのみサポートされます。

[ @subscriber_datasrc = ] N'subscriber_datasrc'

OLE DB プロバイダーによって認識されるデータ ソースの名前。@subscriber_datasrcは nvarchar(4000) で、既定値は NULL. @subscriber_datasrcは、OLE DB プロバイダーをDBPROP_INIT_DATASOURCE初期化するためのプロパティとして渡されます。 @subscriber_datasrcは、SQL Server 以外のサブスクライバーでのみサポートされます。

[ @subscriber_location = ] N'subscriber_location'

OLE DB プロバイダーによって認識されるデータベースの場所。 @subscriber_locationは nvarchar(4000) で、既定値は NULL. @subscriber_locationは、OLE DB プロバイダーをDBPROP_INIT_LOCATION初期化するためのプロパティとして渡されます。 @subscriber_locationは、SQL Server 以外のサブスクライバーでのみサポートされます。

[ @subscriber_provider_string = ] N'subscriber_provider_string'

データ ソースを識別する OLE DB プロバイダー固有の接続文字列。 @subscriber_provider_stringは nvarchar(4000) で、既定値は NULL. @subscriber_provider_stringは、IDataInitialize に渡されるか、OLE DB プロバイダーをDBPROP_INIT_PROVIDERSTRING初期化するためのプロパティとして設定されます。 @subscriber_provider_stringは、SQL Server 以外のサブスクライバーでのみサポートされます。

[ @subscriber_catalog = ] N'subscriber_catalog'

OLE DB プロバイダーへの接続時に使用するカタログ。 @subscriber_catalogは sysname で、既定値は NULL. @subscriber_catalogは、OLE DB プロバイダーをDBPROP_INIT_CATALOG初期化するためのプロパティとして渡されます。 @subscriber_catalogは、SQL Server 以外のサブスクライバーでのみサポートされます。

リターン コードの値

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

解説

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

DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorks2022Replica';

--Add a push subscription to a transactional publication.
USE [AdventureWorks2022]
EXEC sp_addsubscription 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @destination_db = @subscriptionDB, 
  @subscription_type = N'push';

--Add an agent job to synchronize the push subscription.
EXEC sp_addpushsubscription_agent 
  @publication = @publication, 
  @subscriber = @subscriber, 
  @subscriber_db = @subscriptionDB, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO

アクセス許可

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