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

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

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

    initialize with backup

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

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

    initialize from lsn

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

    注意

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

  • [ @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 と共に使用すると、関連するトランザクションのすべてが、新しいノードに確実にレプリケートされます。詳細については、「ピア ツー ピア トランザクション レプリケーションを構成する方法 (レプリケーション Transact-SQL プログラミング)」を参照してください。

  • [ @subscriptionstreams = ] subscriptionstreams
    単一のスレッドを使用する場合のトランザクションの特性の多くを維持しつつ、変更のバッチをサブスクライバに並列的に適用するためにディストリビューション エージェントで使用できる接続の数を指定します。subscriptionstreams のデータ型は tinyint で、既定値は NULL です。サポートされている値の範囲は 1 ~ 64 です。このパラメータは、SQL Server 以外のサブスクライバ、Oracle パブリッシャ、およびピアツーピア サブスクリプションではサポートされていません。

  • [ @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 つのパブリケーションを作成する必要があります。

使用例

-- 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'AdventureWorks2008R2Replica';

--Add a push subscription to a transactional publication.
USE [AdventureWorks2008R2]
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_addsubscription を実行できるのは、固定サーバー ロール sysadmin または固定データベース ロール db_owner のメンバだけです。プル サブスクリプションの場合、パブリケーションのアクセス リストにログインのあるユーザーは sp_addsubscription を実行できます。