sp_addsubscription (Transact-SQL)
適用対象: SQL Server Azure SQL データベース
パブリケーションにサブスクリプションを追加し、サブスクライバーの状態を設定します。 このストアド プロシージャは、パブリッシャー側のパブリケーション データベースで実行されます。
構文
sp_addsubscription
[ @publication = ] N'publication'
[ , [ @article = ] N'article' ]
[ , [ @subscriber = ] N'subscriber' ]
[ , [ @destination_db = ] N'destination_db' ]
[ , [ @sync_type = ] N'sync_type' ]
[ , [ @status = ] N'status' ]
[ , [ @subscription_type = ] N'subscription_type' ]
[ , [ @update_mode = ] N'update_mode' ]
[ , [ @loopback_detection = ] N'loopback_detection' ]
[ , [ @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' ]
[ , [ @reserved = ] N'reserved' ]
[ , [ @enabled_for_syncmgr = ] N'enabled_for_syncmgr' ]
[ , [ @offloadagent = ] offloadagent ]
[ , [ @offloadserver = ] N'offloadserver' ]
[ , [ @dts_package_name = ] N'dts_package_name' ]
[ , [ @dts_package_password = ] N'dts_package_password' ]
[ , [ @dts_package_location = ] N'dts_package_location' ]
[ , [ @distribution_job_name = ] N'distribution_job_name' ]
[ , [ @publisher = ] N'publisher' ]
[ , [ @backupdevicetype = ] N'backupdevicetype' ]
[ , [ @backupdevicename = ] N'backupdevicename' ]
[ , [ @mediapassword = ] N'mediapassword' ]
[ , [ @password = ] N'password' ]
[ , [ @fileidhint = ] fileidhint ]
[ , [ @unload = ] unload ]
[ , [ @subscriptionlsn = ] subscriptionlsn ]
[ , [ @subscriptionstreams = ] subscriptionstreams ]
[ , [ @subscriber_type = ] subscriber_type ]
[ , [ @memory_optimized = ] memory_optimized ]
[ ; ]
引数
[ @publication = ] N'publication'
出版物の名前。 @publicationは sysname で、既定値はありません。
[ @article = ] N'article'
パブリケーションのサブスクライブ先のアーティクル。 @articleは sysname で、既定値は all
. 場合 all
は、そのパブリケーション内のすべてのアーティクルにサブスクリプションが追加されます。 Oracle パブリッシャーの all
値のみ、または NULL
Oracle パブリッシャーでサポートされます。
[ @subscriber = ] N'subscriber'
サブスクライバーの名前。 @subscriberは sysname で、既定値は NULL
.
Note
サーバー名は、既定のインスタンスまたは<Hostname>\<InstanceName>,<PortNumber>
名前付きインスタンスとして指定<Hostname>,<PortNumber>
できます。 SQL Server がカスタム ポートを使用して Linux または Windows にデプロイされ、ブラウザー サービスが無効になっている場合に、接続のポート番号を指定します。 リモート ディストリビューターのカスタム ポート番号の使用は、SQL Server 2019 (15.x) 以降のバージョンに適用されます。
[ @destination_db = ] N'destination_db'
レプリケートされたデータを配置するコピー先データベースの名前。 @destination_dbは sysname で、既定値は NULL
. この場合 NULL
、 @destination_db パブリケーション データベースの名前が設定されます。 Oracle パブリッシャーの場合は、 @destination_db を指定する必要があります。 SQL Server 以外のサブスクライバーの場合は、@destination_dbの値 (既定の宛先) を指定します。
[ @sync_type = ] N'sync_type'
サブスクリプション同期の種類。 @sync_typeは nvarchar(255)で、次のいずれかの値を指定できます。
1 このオプションは非推奨になりました。 代わりに replication support only を使用してください。
2 SQL Server 以外のパブリケーションのサブスクリプションではサポートされていません。
Note
システム テーブルとデータは常に転送されます。
[ @status = ] N'status'
サブスクリプションの状態。 @statusは sysname で、既定値は NULL
. このパラメーターが明示的に設定されていない場合、レプリケーションによってこれらの値のいずれかが自動的に設定されます。
Value | 説明 |
---|---|
active |
サブスクリプションが初期化され、変更を受け入れる準備が整いました。 このオプションは、@sync_typeの値が none、initialize with backup、または replication support only の場合に設定されます。 |
subscribed |
サブスクリプションを初期化する必要があります。 このオプションは、@sync_typeの値が自動である場合に設定されます。 |
[ @subscription_type = ] N'subscription_type'
サブスクリプションの種類。 @subscription_typeは nvarchar(4) で、既定値は push
. push
または pull
を指定できます。 プッシュ サブスクリプションのディストリビューション エージェントはディストリビューターに存在し、プル サブスクリプションのディストリビューション エージェントはサブスクライバーに存在します。 @subscription_type、パブリッシャーに認識されている名前付きプル サブスクリプションを作成できますpull
。 詳細については、「パブリケーションのサブスクライブ」をご覧ください。
Note
匿名サブスクリプションでは、このストアド プロシージャを使用する必要はありません。
[ @update_mode = ] N'update_mode'
更新プログラムの種類。 @update_modeは nvarchar(30)で、これらの値のいずれかを指定できます。
Value | 説明 |
---|---|
read only (既定値) |
サブスクリプションは読み取り専用です。 サブスクライバーでの変更はパブリッシャーに送信されません。 |
sync tran |
即時更新サブスクリプションのサポートを有効にします。 Oracle パブリッシャーではサポートされていません。 |
queued tran |
サブスクリプションのキュー更新を有効にします。 データの変更はサブスクライバーで行い、キューに格納してからパブリッシャーに伝達できます。 Oracle パブリッシャーではサポートされていません。 |
failover |
キュー更新をフェールオーバーとするサブスクリプションの即時更新を有効にします。 サブスクライバーでデータを変更し、それを直ちにパブリッシャーに配信することができます。 パブリッシャーとサブスクライバーが接続されていない場合は、サブスクライバーとパブリッシャーが再接続されるまで、サブスクライバーで行われたデータ変更がキューに格納されるように更新モードを変更できます。 Oracle パブリッシャーではサポートされていません。 |
queued failover |
即時更新モードへの変更が可能なキュー更新サブスクリプションとしてサブスクリプションを有効にします。 データの変更はサブスクライバーで行い、サブスクライバーとパブリッシャーの間で接続が確立されるまでキューに格納できます。 継続的な接続が確立されると、更新モードを即時更新に変更できます。 Oracle パブリッシャーではサポートされていません。 |
sync tran
値。queued tran
サブスクライブしているパブリケーションで DTS が許可されている場合は許可されません。
[ @loopback_detection = ] N'loopback_detection'
ディストリビューション エージェントがサブスクライバーで発生したトランザクションをサブスクライバーに送り返すかどうかを指定します。 @loopback_detectionは nvarchar(5) であり、これらの値のいずれかを指定できます。
Value | 説明 |
---|---|
true |
ディストリビューション エージェントは、サブスクライバーで発生したトランザクションをサブスクライバーに送信しません。 双方向トランザクション レプリケーションで使用されます。 詳細については、「 Bidirectional Transactional Replication」を参照してください。 |
false |
ディストリビューション エージェントは、サブスクライバーで発生したトランザクションをサブスクライバーに戻します。 |
NULL (既定) |
SQL Server サブスクライバーの場合は自動的に true、SQL Server 以外のサブスクライバーの場合は false に設定されます。 |
[ @frequency_type = ] frequency_type
配布タスクをスケジュールする頻度。 @frequency_typeは int であり、これらの値のいずれかになります。
Value | 説明 |
---|---|
1 |
指定日時 |
2 |
オン デマンド |
4 |
毎日 |
8 |
週単位 |
16 |
月単位 |
32 |
月単位の相対 |
64 (既定) |
自動開始 |
128 |
定期的 |
[ @frequency_interval = ] frequency_interval
@frequency_typeによって設定された頻度に適用する値。 @frequency_intervalは int で、既定値は NULL
.
[ @frequency_relative_interval = ] frequency_relative_interval
ディストリビューション エージェントの日付。 このパラメーターは、@frequency_typeが (月単位の相対) に設定されている場合に32
使用されます。 @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は 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
.
[ @reserved = ] N'reserved'
単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
[ @enabled_for_syncmgr = ] N'enabled_for_syncmgr'
サブスクリプションを Windows 同期マネージャーを使用して同期できるかどうかを指定します。 @enabled_for_syncmgrは nvarchar(5) で、既定値は NULL
false
. 場合 false
、サブスクリプションは Windows 同期マネージャーに登録されていません。 の場合 true
、サブスクリプションは Windows 同期マネージャーに登録され、SQL Server Management Studio を起動せずに同期できます。 Oracle パブリッシャーではサポートされていません。
[ @offloadagent = ] offloadagent
エージェントをリモートでアクティブ化できることを指定します。 @offloadagentはビットで、既定値は 0
.
Note
このパラメーターは非推奨となり、スクリプトの下位互換性のためにのみ維持されています。
[ @offloadserver = ] N'offloadserver'
リモート ライセンス認証に使用するサーバーのネットワーク名を指定します。 @offloadserverは sysname で、既定値は NULL
.
[ @dts_package_name = ] N'dts_package_name'
データ変換サービス (DTS) パッケージの名前を指定します。 @dts_package_nameは sysname で、既定値は NULL
. たとえば、DTSPub_Package
というパッケージを指定するには、パラメーターを @dts_package_name = N'DTSPub_Package'
と設定します。 このパラメーターは、プッシュ サブスクリプションで使用できます。 DTS パッケージ情報をプル サブスクリプションに追加するには、次を使用 sp_addpullsubscription_agent
します。
[ @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) で、既定値は NULL
distributor
. パッケージの場所は、次subscriber
のいずれかになりますdistributor
。
[ @distribution_job_name = ] N'distribution_job_name'
単に情報を示すためだけに特定されます。 サポートされていません。 将来の互換性は保証されません。
[ @publisher = ] N'publisher'
SQL Server 以外のパブリッシャーを指定します。 @publisherは sysname で、既定値は NULL
.
Note
@publisherは、SQL Server パブリッシャーに対して指定しないでください。
[ @backupdevicetype = ] N'backupdevicetype'
バックアップからサブスクライバーを初期化する際に使用するバックアップ デバイスの種類を指定します。 @backupdevicetypeは nvarchar(20)で、次のいずれかの値を指定できます。
Value | 説明 |
---|---|
logical (既定値) |
バックアップ デバイスが論理デバイスである |
disk |
バックアップ デバイスがディスク ドライブである |
tape |
バックアップ デバイスがテープ ドライブである |
url |
バックアップ デバイスが URL である |
@backupdevicetypeは、@sync_methodが initialize_with_backup に設定されている場合にのみ使用されます。
[ @backupdevicename = ] N'backupdevicename'
バックアップからサブスクライバーを初期化する際に使用するデバイスの名前を指定します。 @backupdevicenameは nvarchar(1000) で、既定値は NULL
.
[ @mediapassword = ] N'mediapassword'
メディア セットのパスワードを指定します (メディアをフォーマットしたときにパスワードを設定した場合)。 @mediapasswordは sysname で、既定値は NULL
.
Note
この機能は、 SQL Serverの将来のバージョンで削除される予定です。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。
[ @password = ] N'password'
バックアップのパスワードを指定します (バックアップを作成したときにパスワードを設定した場合)。 @passwordは sysname で、既定値は NULL
.
[ @fileidhint = ] fileidhint
復元するバックアップ セットの序数値を識別します。 @fileidhintは int で、既定値は NULL
.
[ @unload = ] unload
バックアップからの初期化が完了した後テープ バックアップ デバイスをアンロードするかどうかを指定します。 @unloadはビットで、既定値は1
テープをアンロードすることを指定します。 @unloadは、@backupdevicetypeが tape
.
[ @subscriptionlsn = ] subscriptionlsn
サブスクリプションがピアツーピア トランザクション レプリケーション トポロジ内のノードへの変更の配信を開始するログ シーケンス番号 (LSN) を指定します。 @subscriptionlsnは binary(10) で、既定値は NULL
. @sync_type値initialize from lsn
と共に使用して、関連するすべてのトランザクションが新しいノードにレプリケートされるようにします。 詳細については、「ピア ツー ピア - トランザクション レプリケーション」を参照してください。
[ @subscriptionstreams = ] subscriptionstreams
1 つのスレッドを使用する場合に存在するトランザクション特性の多くを維持しながら、変更のバッチをサブスクライバーに並列で適用するために、ディストリビューション エージェントごとに許可される接続の数。 @subscriptionstreamsは tinyint で、既定値は NULL
. 値の1
64
範囲がサポートされています。 このパラメーターは、SQL Server 以外のサブスクライバー、Oracle パブリッシャー、またはピア ツー ピア サブスクリプションではサポートされていません。 @subscriptionstreamsが使用されるたびに、テーブルにmsreplication_subscriptions
追加の行が追加されます (ストリームごとに 1 行)。agent_id
NULL
Note
サブスクリプション ストリームは、Transact-SQL を配信するように構成された記事では機能しません。 サブスクリプション ストリームを使用するには、代わりにストアド プロシージャ呼び出しを配信するようにアーティクルを構成します。
[ @subscriber_type = ] subscriber_type
サブスクライバーの種類。 @subscriber_typeは tinyint であり、これらの値のいずれかになります。
Value | 説明 |
---|---|
0 (既定値) |
SQL Server サブスクライバー |
1 |
ODBC データ ソース サーバー |
2 |
Microsoft Jet データベース |
3 |
OLE DB プロバイダー |
[ @memory_optimized = ] memory_optimized
サブスクリプションがメモリ最適化テーブルをサポートしていることを示します。 @memory_optimizedはビットで、既定値は 0
(false) です。 1
(true) は、サブスクリプションがメモリ最適化テーブルをサポートしていることを意味します。
リターン コードの値
0
(成功) または 1
(失敗)。
解説
sp_addsubscription
は、スナップショット レプリケーションとトランザクション レプリケーションで使用されます。
sysadmin 固定サーバー ロールのメンバーがプッシュ サブスクリプションを作成するために実行されるとsp_addsubscription
、ディストリビューション エージェント ジョブが暗黙的に作成され、SQL Server エージェント サービス アカウントで実行されます。 sp_addpushsubscription_agentを実行し、エージェント固有の別の Windows アカウント@job_login@job_passwordの資格情報を指定することをお勧めします。 詳細については、「 レプリケーション エージェント セキュリティ モデル」を参照してください。
sp_addsubscription
では、ODBC および OLE DB サブスクライバーが次のパブリケーションにアクセスできなくなります。
sp_addpublicationの呼び出しでネイティブ @sync_methodを使用して作成されました。
@pre_creation_cmd パラメーター値が 3 (切り捨て) のsp_addarticleストアド プロシージャを使用してパブリケーションに追加されたアーティクルが含まれます。
@update_modeの設定を
sync tran
試みます。パラメーター化されたステートメントを使用するように構成されたアーティクルを含むパブリケーション。
さらに、パブリケーションで @allow_queued_tran オプションが true に設定されている場合 (パブリッシャーで適用できるようになるまでサブスクライバーでの変更のキューを有効にします)、アーティクルのタイムスタンプ列はタイムスタンプとしてスクリプト化され、その列の変更がサブスクライバーに送信されます。 サブスクライバーは、タイムスタンプ列の値を生成して更新します。 ODBC または OLE DB サブスクライバーの場合、sp_addsubscription
@allow_queued_tran true に設定されたパブリケーションとタイムスタンプ列を含むアーティクルをサブスクライブしようとすると失敗します。
サブスクリプションで DTS パッケージが使用されていない場合、@allow_transformable_subscriptionsに設定されているパブリケーションをサブスクライブすることはできません。 パブリケーションのテーブルを DTS サブスクリプションと非 DTS サブスクリプションの両方にレプリケートする必要がある場合は、サブスクリプションの種類ごとに 1 つずつ、2 つの別々のパブリケーションを作成する必要があります。
sync_type オプション (または) を選択する場合、セットアップ スクリプトがディストリビューション データベースに書き込まれるように、ログ リーダー エージェントは実行sp_addsubscription
後に実行する必要があります。initialize from lsn
initialize with backup
replication support only
ログ リーダー エージェントが、 sysadmin 固定サーバー ロールのメンバーであるアカウントで実行されている必要があります。 @sync_type オプションがAutomatic
設定されている場合、特別なログ リーダー エージェントアクションは必要ありません。
アクセス許可
sysadmin 固定サーバー ロールまたは固定データベース ロールdb_ownerメンバーのみが実行sp_addsubscription
できます。 プル サブスクリプションの場合、パブリケーション アクセス リストにログインしているユーザーは実行 sp_addsubscription
できます。
例
-- 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