次の方法で共有


sp_link_publication (Transact-SQL)

パブリッシャーへの接続時に即時更新サブスクリプションの同期トリガーが使用する、構成およびセキュリティ情報を設定します。 このストアド プロシージャは、サブスクライバー側でサブスクリプション データベースについて実行されます。

セキュリティに関する注意セキュリティに関する注意

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

重要

特定の条件下で、サブスクライバーが Microsoft SQL Server 2005 Service Pack 1 以降を実行し、パブリッシャーがそれより前のバージョンを実行している場合、このストアド プロシージャは失敗する可能性があります。このシナリオでストアド プロシージャが失敗する場合は、パブリッシャーを SQL Server 2005 Service Pack 1 以降にアップグレードしてください。

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

構文

sp_link_publication [ @publisher = ] 'publisher'  
        , [ @publisher_db = ] 'publisher_db'  
        , [ @publication = ] 'publication'  
        , [ @security_mode = ] security_mode
    [ , [ @login = ] 'login' ]
    [ , [ @password = ]'password' ]
    [ , [ @distributor = ] 'distributor' ]

引数

  • [ @publisher= ] 'publisher'
    リンクするパブリッシャーの名前です。 publisher のデータ型は sysname で、既定値はありません。

  • [ @publisher_db= ] 'publisher_db'
    リンクするパブリッシャー データベースの名前です。 publisher_db のデータ型は sysname で、既定値はありません。

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

  • [ @security_mode= ] security_mode
    サブスクライバーが即時更新のためにリモートのパブリッシャーに接続するときに使用するセキュリティ モードです。 security_mode のデータ型は int で、次のいずれかの値を指定できます。 可能な場合は、Windows 認証を使用します。

    説明

    0

    このストアド プロシージャで login および password として指定されたログインで SQL Server 認証を使用します。

    注意

    前のバージョンの SQL Server では、このオプションを使用して動的なリモート プロシージャ コール (RPC) を指定していました。

    1

    サブスクライバーで変更を行うユーザーのセキュリティ コンテキスト (SQL Server 認証または Windows 認証) を使用します。

    > [!NOTE]
    > <P>パブリッシャー側でも、十分な権限を持つこのアカウントが必要です。Windows 認証を使用する場合は、セキュリティ アカウントの委任がサポートされる必要があります。</P>
    

    2

    sp_link_publication で作成された既存のユーザー定義リンク サーバー ログインを使用します。

    • [ @login= ] 'login'
      ログインを指定します。 login のデータ型は sysname で、既定値は NULL です。 このパラメーターは、security_mode0 の場合に指定する必要があります。

    • [ @password= ] 'password'
      パスワードです。 password のデータ型は sysname で、既定値は NULL です。 このパラメーターは、security_mode0 の場合に指定する必要があります。

    • [ @distributor= ] 'distributor'
      ディストリビューターの名前です。 distributor のデータ型は sysname で、既定値は NULL です。

    リターン コードの値

    成功した場合は 0 を、失敗した場合は 1 をそれぞれ返します。

    説明

    sp_link_publication は、トランザクション レプリケーションで即時更新サブスクリプションによって使用されます。

    sp_link_publication は、プッシュ サブスクリプションとプル サブスクリプションの両方に使用できます。 サブスクリプション作成前、または作成後に呼び出すことができます。 MSsubscription_properties (Transact-SQL) システム テーブルでは、エントリを挿入したり、エントリを更新できます。

    プッシュ サブスクリプションのエントリは、sp_subscription_cleanup (Transact-SQL) でクリーンアップできます。 プル サブスクリプションのエントリは、sp_droppullsubscription (Transact-SQL) または sp_subscription_cleanup (Transact-SQL) でクリーンアップできます。 また、パスワードに NULL を指定して sp_link_publication を呼び出し、MSsubscription_properties (Transact-SQL) システム テーブル内のエントリを消去しておくとセキュリティ面で安心です。

    即時更新サブスクライバーがパブリッシャーに接続するときに使用する既定モードでは、Windows 認証を使っての接続は許可されません。 Windows 認証のモードを使って接続するには、パブリッシャーに対してリンク サーバーを設定する必要があり、即時更新サブスクライバーは、サブクライバを更新するときにこの接続を使用する必要があります。 このためには、security_mode = 2 を指定して sp_link_publication を実行する必要があります。 Windows 認証を使用する場合は、セキュリティ アカウントの委任がサポートされる必要があります。

    使用例

    -- 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 @publicationDB AS sysname;
    DECLARE @publisher AS sysname;
    DECLARE @login AS sysname;
    DECLARE @password AS nvarchar(512);
    SET @publication = N'AdvWorksProductTran';
    SET @publicationDB = N'AdventureWorks2012';
    SET @publisher = $(PubServer);
    SET @login = $(Login);
    SET @password = $(Password);
    
    -- At the subscription database, create a pull subscription to a transactional 
    -- publication using immediate updating with queued updating as a failover.
    EXEC sp_addpullsubscription 
        @publisher = @publisher, 
        @publication = @publication, 
        @publisher_db = @publicationDB, 
        @update_mode = N'failover', 
        @subscription_type = N'pull';
    
    -- Add an agent job to synchronize the pull subscription, 
    -- which uses Windows Authentication when connecting to the Distributor.
    EXEC sp_addpullsubscription_agent 
        @publisher = @publisher, 
        @publisher_db = @publicationDB, 
        @publication = @publication,
        @job_login = @login,
        @job_password = @password; 
    
    -- Add a Windows Authentication-based linked server that enables the 
    -- Subscriber-side triggers to make updates at the Publisher. 
    EXEC sp_link_publication 
        @publisher = @publisher, 
        @publication = @publication,
        @publisher_db = @publicationDB, 
        @security_mode = 0,
        @login = @login,
        @password = @password;
    GO
    
    USE AdventureWorks2012
    GO
    
    -- Execute this batch at the Publisher.
    DECLARE @publication AS sysname;
    DECLARE @subscriptionDB AS sysname;
    DECLARE @subscriber AS sysname;
    SET @publication = N'AdvWorksProductTran'; 
    SET @subscriptionDB = N'AdventureWorks2012Replica'; 
    SET @subscriber = $(SubServer);
    
    -- At the Publisher, register the subscription, using the defaults.
    USE [AdventureWorks2012]
    EXEC sp_addsubscription 
        @publication = @publication, 
        @subscriber = @subscriber, 
        @destination_db = @subscriptionDB, 
        @subscription_type = N'pull', 
        @update_mode = N'failover';
    GO
    

    権限

    sp_link_publication を実行できるのは、sysadmin 固定サーバー ロールのメンバーだけです。

    関連項目

    参照

    sp_droppullsubscription (Transact-SQL)

    sp_helpsubscription_properties (Transact-SQL)

    sp_subscription_cleanup (Transact-SQL)

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