Share via


sp_addsubscription (Transact-SQL)

パブリケーションにサブスクリプションを追加し、サブスクライバーの状態を設定します。 このストアド プロシージャは、パブリッシャー側でパブリケーション データベースについて実行されます。

トピック リンク アイコン Transact-SQL 構文表記規則

構文

sp_addsubscription [ @publication = ] 'publication'
    [ , [ @article = ] 'article']
    [ , [ @subscriber = ] 'subscriber' ]
    [ , [ @destination_db = ] 'destination_db' ]
        [ , [ @sync_type = ] 'sync_type' ]
    [ , [ @status = ] 'status'
        [ , [ @subscription_type = ] 'subscription_type' ]
    [ , [ @update_mode = ] 'update_mode' ]
    [ , [ @loopback_detection = ] '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 = ] 'optional_command_line' ]
    [ , [ @reserved = ] 'reserved' ]
    [ , [ @enabled_for_syncmgr= ] 'enabled_for_syncmgr' ]
    [ , [ @offloadagent= ] remote_agent_activation]
    [ , [ @offloadserver= ] 'remote_agent_server_name' ]
    [ , [ @dts_package_name= ] 'dts_package_name' ]
    [ , [ @dts_package_password= ] 'dts_package_password' ]
    [ , [ @dts_package_location= ] 'dts_package_location' ]
    [ , [ @distribution_job_name= ] 'distribution_job_name' ]
    [ , [ @publisher = ] 'publisher' ]
    [ , [ @backupdevicetype = ] 'backupdevicetype' ]
    [ , [ @backupdevicename = ] 'backupdevicename' ]
    [ , [ @mediapassword = ] 'mediapassword' ]
    [ , [ @password = ] 'password' ]
    [ , [ @fileidhint = ] fileidhint ]
    [ , [ @unload = ] unload ]
    [ , [ @subscriptionlsn = ] subscriptionlsn ]
    [ , [ @subscriptionstreams = ] subscriptionstreams ]
    [ , [ @subscriber_type = ] subscriber_type ]

引数

  • [ @publication=\] 'publication'
    パブリケーションの名前です。 publication のデータ型は sysname で、既定値はありません。

  • [ @article=\] 'article'
    パブリケーションがサブスクライブされるアーティクルを指定します。 article のデータ型は sysname で、既定値は all です。 all に設定した場合は、そのパブリケーションのすべてのアーティクルに対してサブスクリプションが加えられます。 Oracle パブリッシャーの場合、サポートされている値は all と NULL だけです。

  • [ @subscriber=\] 'subscriber'
    サブスクライバーの名前を指定します。 subscriber のデータ型は sysname で、既定値は NULL です。

  • [ @destination\_db=\] 'destination_db'
    レプリケートされたデータの格納先となるデータベースの名前を指定します。 destination_db のデータ型は sysname で、既定値は NULL です。 NULL の場合、destination_db はパブリケーション データベースの名前に設定されます。 Oracle パブリッシャーの場合は、常に destination_db を指定する必要があります。 SQL Server 以外のサブスクライバーでは、destination_db に値 (既定の転送先) を指定します。

  • [ @sync\_type=\] 'sync_type'
    サブスクリプションの同期の種類を指定します。 sync_type のデータ型は nvarchar(255) で、次のいずれかの値を指定できます。

    説明

    none

    パブリッシュされたテーブルのスキーマと初期データは既にサブスクライバーにあります。

    注意

    このオプションは推奨されません。 代わりに replication support only を使用してください。

    automatic (既定値)

    パブリッシュされたテーブルのスキーマと初期データが最初にサブスクライバーに転送されます。

    replication support only

    更新サブスクリプションをサポートするアーティクルのカスタム ストアド プロシージャとトリガーがサブスクライバー側で必要に応じて自動的に生成されます。 パブリッシュされたテーブルのスキーマと初期データがサブスクライバーにあることが前提となります。 ピアツーピア トランザクション レプリケーション トポロジを構成する場合は、トポロジのすべてのノードのデータが一致していることを確認してください。 詳細については、「ピア ツー ピア トランザクション レプリケーション」を参照してください。

    SQL Server 以外のパブリケーションへのサブスクリプションではサポートされません。

    initialize with backup

    パブリッシュされたテーブルのスキーマと初期データがパブリケーション データベースのバックアップから取得されます。 パブリケーション データベースのバックアップにサブスクライバーがアクセスできることが前提となります。 バックアップの場所とメディアの種類は、backupdevicename と backupdevicetype で指定します。 このオプションを使用する場合は、構成時にピアツーピア トランザクション レプリケーション トポロジを停止する必要はありません。

    SQL Server 以外のパブリケーションへのサブスクリプションではサポートされません。

    initialize from lsn

    ピア ツー ピア トランザクション レプリケーション トポロジにノードを追加するときに使用します。 @subscriptionlsn と共に使用すると、関連するトランザクションのすべてが、新しいノードに確実にレプリケートされます。 パブリッシュされたテーブルのスキーマと初期データがサブスクライバーにあることが前提となります。 詳細については、「ピア ツー ピア トランザクション レプリケーション」を参照してください。

    注意

    システム テーブルとデータは常に転送されます。

  • [ @status=\] 'status'
    サブスクリプションの状態を指定します。 status のデータ型は sysname で、既定値は NULL です。 このパラメーターを明示的に設定しない場合は、レプリケーションで自動的に次のいずれかの値が設定されます。

    説明

    active

    サブスクリプションは初期化され、変更の準備ができています。 sync_type の値が none、initialize with backup、または replication support only の場合、このオプションが設定されます。

    subscribed

    サブスクリプションを初期化する必要があります。 sync_type の値が automatic の場合、このオプションが設定されます。

  • [ @subscription\_type=\] 'subscription_type'
    サブスクリプションの種類を指定します。 subscription_type のデータ型は nvarchar(4) で、既定値は push です。 push または pull に設定できます。 push サブスクリプションのディストリビューション エージェントはディストリビューター側にあり、pull サブスクリプションのディストリビューション エージェントはサブスクライバー側にあります。 subscription_type を pull に設定して、パブリッシャーにとって既知の名前付きプル サブスクリプションを作成することができます。 詳細については、「パブリケーションのサブスクライブ」を参照してください。

    注意

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

  • [ @update\_mode=\] 'update_mode'
    更新の種類を指定します。update_mode のデータ型は nvarchar(30) で、次のいずれかの値を指定できます。

    説明

    read only (既定値)

    サブスクリプションは読み取り専用です。 サブスクライバーで加えられた変更はパブリッシャーに送られません。

    sync tran

    即時更新サブスクリプションのサポートを有効にします。 Oracle パブリッシャーに対してはサポートされていません。

    queued tran

    サブスクリプションのキュー更新を有効にします。 サブスクライバーでデータを変更し、キューに格納し、それをパブリッシャーに配信することができます。 Oracle パブリッシャーに対してはサポートされていません。

    failover

    キュー更新をフェールオーバーとするサブスクリプションの即時更新を有効にします。 サブスクライバーでデータを変更し、それを直ちにパブリッシャーに配信することができます。 パブリッシャーとサブスクライバーが接続されていない場合は、更新モードを変更して、サブスクライバーとパブリッシャーが再接続されるまで、サブスクライバーで加えられたデータの変更をキューに格納することができます。 Oracle パブリッシャーに対してはサポートされていません。

    queued failover

    即時更新モードへの変更が可能なキュー更新サブスクリプションとしてサブスクリプションを有効にします。 サブスクライバーでデータを変更し、サブスクライバーとパブリッシャーの間の接続が確立されるまで、その変更をキューに格納することができます。 継続的な接続が確立された場合は、更新モードを即時更新に変更できます。 Oracle パブリッシャーに対してはサポートされていません。

    サブスクライブされるパブリケーションで DTS が許可されている場合、値 sync tran および queued tran は指定できません。

  • [ @loopback\_detection=\] 'loopback_detection'
    ディストリビューション エージェントがサブスクライバーで発生したトランザクションをサブスクライバーに戻すかどうかを指定します。 loopback_detection のデータ型は nvarchar(5) で、次のいずれかの値を指定できます。

    説明

    true

    ディストリビューション エージェントは、サブスクライバーで発生したトランザクションをサブスクライバーに戻しません。 双方向トランザクション レプリケーションで使用されます。 詳細については、「双方向トランザクション レプリケーション」を参照してください。

    false

    ディストリビューション エージェントは、サブスクライバーで発生したトランザクションをサブスクライバーに戻します。

    NULL (既定値)

    SQL Server サブスクライバーの場合は true、SQL Server 以外のサブスクライバーの場合は false に自動設定されます。

  • [ @frequency\_type=\] frequency_type
    ディストリビューション タスクをスケジュールに組み込む頻度を指定します。 frequency_type のデータ型は int で、次のいずれかの値を指定できます。

    説明

    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 で、次のいずれかの値を指定できます。

    説明

    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 のデータ型は 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 です。

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

  • [ @enabled\_for\_syncmgr=\] 'enabled_for_syncmgr'
    Microsoft Windows 同期マネージャーを使用してサブスクリプションを同期させることができるかどうかを指定します。enabled_for_syncmgr のデータ型は nvarchar(5) で、既定値は FALSE です。 false の場合、サブスクリプションは Windows 同期マネージャーに登録されません。 true の場合、サブスクリプションは Windows 同期マネージャーに登録され、SQL Server Management Studio を起動せずに同期させることができます。 Oracle パブリッシャーに対してはサポートされていません。

  • [ @offloadagent= ] 'remote_agent_activation'
    エージェントをリモートから起動できるかどうかを指定します。 remote_agent_activation のデータ型は bit で、既定値は 0 です。

    注意

    このパラメーターは、スクリプトの下位互換性を確保するために用意されているものであり、使用は推奨されません。

  • [ @offloadserver= ] 'remote_agent_server_name'
    リモート起動に使用されるサーバーのネットワーク名を指定します。 remote_agent_server_name のデータ型は sysname で、既定値は NULL です。

  • [ @dts\_package\_name= ] 'dts_package_name'
    データ変換サービス (DTS) パッケージの名前。 dts_package_name のデータ型は sysname で、既定値は NULL です。 たとえば、DTSPub_Package というパッケージを指定するには、パラメーターを @dts\_package\_name = N'DTSPub_Package' にする必要があります。 プッシュ サブスクリプションでは、このパラメーターを使用できます。 プル サブスクリプションに DTS パッケージ情報を追加するには、sp_addpullsubscription_agent を使用します。

  • [ @dts\_package\_password= ] 'dts_package_password'
    パッケージのパスワード (ある場合) を指定します。 dts_package_password のデータ型は sysname で、既定値は NULL です。

    注意

    dts_package_name を指定した場合は、パスワードを指定する必要があります。

  • [ @dts\_package\_location= ] 'dts_package_location'
    パッケージの場所を指定します。 dts_package_location のデータ型は nvarchar(12) で、既定値は DISTRIBUTOR です。 パッケージの場所としては、distributor または subscriber を指定できます。

  • [ @distribution\_job\_name= ] 'distribution_job_name'
    単に情報を示すためだけに特定されます。サポートされていません。将来の互換性は保証されません。

  • [ @publisher= ] 'publisher'
    Microsoft SQL Server 以外のパブリッシャーを指定します。 publisher のデータ型は sysname で、既定値は NULL です。

    注意

    SQL Server パブリッシャーには publisher を指定しないでください。

  • [ @backupdevicetype= ] 'backupdevicetype'
    バックアップからサブスクライバーを初期化する際に使用するバックアップ デバイスの種類を指定します。 backupdevicetype のデータ型は nvarchar(20) で、次のいずれかの値を指定できます。

    説明

    logical (既定値)

    バックアップ デバイスは論理デバイスです。

    disk

    バックアップ デバイスはディスク ドライブです。

    tape

    バックアップ デバイスはテープ ドライブです。

    backupdevicetype を使用するのは、sync_method が initialize_with_backup に設定されている場合だけです。

  • [ @backupdevicename= ] 'backupdevicename'
    バックアップからサブスクライバーを初期化する際に使用するデバイスの名前を指定します。 backupdevicename のデータ型は nvarchar(1000) で、既定値は NULL です。

  • [ @mediapassword= ] 'mediapassword'
    メディア セットのパスワードを指定します (メディアをフォーマットしたときにパスワードを設定した場合)。 mediapassword のデータ型は sysname で、既定値は NULL です。

    注意

    この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。新しい開発作業では、この機能の使用を避け、現在この機能を使用しているアプリケーションは修正するようにしてください。

  • [ @password= ] 'password'
    バックアップのパスワードを指定します (バックアップを作成したときにパスワードを設定した場合)。 password のデータ型は sysname で、既定値は NULL です。

  • [ @fileidhint= ] fileidhint
    復元するバックアップ セットの序数値を識別します。 fileidhint のデータ型は int で、既定値は NULL です。

  • [ @unload= ] unload
    バックアップからの初期化が完了した後テープ バックアップ デバイスをアンロードするかどうかを指定します。 unload のデータ型は bit で、既定値は 1 です。 1 を指定すると、テープがアンロードされます。 unload を使用するのは、backupdevicetype が tape の場合だけです。

  • [ @subscriptionlsn= ] subscriptionlsn
    サブスクリプションでピア ツー ピア トランザクション レプリケーション トポロジのノードへの変更の配信を開始するログ シーケンス番号 (LSN) を指定します。 値 initialize from lsn の @sync\_type と共に使用すると、関連するトランザクションのすべてが、新しいノードに確実にレプリケートされます。 詳細については、「ピア ツー ピア トランザクション レプリケーション」を参照してください。

  • [ @subscriptionstreams= ] subscriptionstreams
    単一のスレッドを使用しているときに、トランザクションに関連したさまざまな特性を維持しながら、サブスクライバーに対してバッチ変更を適用することのできる、ディストリビューション エージェントあたりの接続数です。 subscriptionstreams のデータ型は tinyint で、既定値は NULL です。 サポートされている値の範囲は 1 ~ 64 です。 このパラメーターは、SQL Server 以外のサブスクライバー、Oracle パブリッシャー、およびピアツーピア サブスクリプションではサポートされていません。 サブスクリプション ストリームが使用されるたびに、msreplication_subscriptions テーブルに行が追加され (ストリームごとに 1 行)、agent_id が NULL に設定されます。

    注意

    Subscriptionstreams は、Transact-SQL を渡すように構成されたアーティクルでは使用できません。 subscriptionstreams を使用するには、代わりにストアド プロシージャの呼び出しを渡すようにアーティクルを構成します。

  • [ @subscriber\_type=\] subscriber_type
    サブスクライバーの種類を指定します。 subscriber_type のデータ型は tinyint で、次のいずれかの値を指定できます。

    説明

    0 (既定値)

    SQL Server サブスクライバー

    1

    ODBC データ ソース サーバー

    2

    Microsoft Jet データベース

    3

    OLE DB プロバイダー

リターン コードの値

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

説明

sp_addsubscription は、スナップショット レプリケーションおよびトランザクション レプリケーションで使用します。

sp_addsubscription が固定サーバー ロール sysadmin のメンバーによってプッシュ サブスクリプションを作成するために実行されると、ディストリビューション エージェントのジョブが暗黙的に作成され、SQL Server エージェント サービス アカウントで実行されます。 sp_addpushsubscription_agent を実行し、@job_login および @job\_password に対してエージェントごとに異なる Windows アカウントの資格情報を指定することをお勧めします。 詳細については、「レプリケーション エージェントのセキュリティ モデル」を参照してください。

sp_addsubscription は、ODBC サブスクライバーおよび OLE DB サブスクライバーが次のパブリケーションにアクセスするのを禁止します。

  • sp_addpublication の呼び出しで、ネイティブ sync_method を指定して作成されたパブリケーション。

  • pre_creation_cmd パラメーターに 3 (切り捨て) を指定した sp_addarticle ストアド プロシージャで、追加されたアーティクルを持つパブリケーション。

  • update_mode を sync tran に設定しようとするパブリケーション。

  • パラメーター化されたステートメントを使用するように構成されたアーティクルを含むパブリケーション。

さらに、パブリケーションの allow_queued_tran オプションが true に設定されており、変更をパブリッシャーに適用できるようになるまでサブスクライバーで変更をキューイングする機能が有効になっていると、アーティクルのタイムスタンプ列は、スクリプトに timestamp として出力され、その列に加えられた変更はサブスクライバーに送信されます。 サブスクライバーは、タイムスタンプ列値を生成し、更新します。 ODBC/OLE DB サブスクライバーの場合、allow_queued_tran が true に設定されていて、タイムスタンプ列を持つアーティクルが含まれているパブリケーションにサブスクライブしようとすると、sp_addsubscription は失敗します。

DTS パッケージを使用しないサブスクリプションは、allow_transformable_subscriptions に設定されているパブリケーションにサブスクライブすることはできません。 パブリケーションのテーブルを DTS サブスクリプションと非 DTS サブスクリプションの両方にレプリケートする必要がある場合は、サブスクリプションの種類ごとに別々の 2 つのパブリケーションを作成する必要があります。

sync_type オプション replication support only、initialize with backup、または initialize from lsn を選択した場合、sp_addsubscription の実行後にログ リーダー エージェントを実行して、スクリプトの設定がディストリビューション データベースに書き込まれるようにする必要があります。 ログ リーダー エージェントが、sysadmin 固定サーバー ロールのメンバーであるアカウントで実行されている必要があります。 sync_type オプションが Automatic に設定されている場合、特別なログ リーダー エージェントの操作は必要ありません。

権限

sp_addsubscription を実行できるのは、固定サーバー ロール sysadmin または固定データベース ロール db_owner のメンバーだけです。 プル サブスクリプションの場合、パブリケーションのアクセス リストにログインのあるユーザーは 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'AdventureWorks2012Replica';

--Add a push subscription to a transactional publication.
USE [AdventureWorks2012]
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

関連項目

参照

sp_addpushsubscription_agent (Transact-SQL)

sp_changesubstatus (Transact-SQL)

sp_dropsubscription (Transact-SQL)

sp_helpsubscription (Transact-SQL)

システム ストアド プロシージャ (Transact-SQL)

概念

プッシュ サブスクリプションの作成

SQL Server 以外のサブスクライバーのサブスクリプションの作成

パブリケーションのサブスクライブ