次の方法で共有


sp_link_publication (Transact-SQL)

適用対象: SQL Server

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

重要

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

Transact-SQL 構文表記規則

構文

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

引数

[ @publisher = ] N'publisher'

リンク先のパブリッシャーの名前。 @publishersysname で、既定値はありません。

[ @publisher_db = ] N'publisher_db'

リンク先のパブリッシャー データベースの名前。 @publisher_dbsysname で、既定値はありません。

[ @publication = ] N'publication'

リンク先のパブリケーションの名前。 @publicationsysname で、既定値はありません。

[ @security_mode = ] security_mode

即時更新のためにサブスクライバーがリモート パブリッシャーに接続するために使用するセキュリティ モード。 @security_modeint であり、これらの値のいずれかを指定できます。 可能な場合は、Windows 認証を使用します。

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

注: 以前のバージョンの SQL Server では、このオプションを使用して動的リモート プロシージャ コール (RPC) を指定していました。
1 サブスクライバーで変更を行うユーザーのセキュリティ コンテキスト (SQL Server 認証または Windows 認証) を使用します。

注: このアカウントは、十分な特権を持つパブリッシャーにも存在する必要があります。 Windows 認証を使用する場合は、セキュリティ アカウントの委任がサポートされている必要があります。
2 sp_link_publicationを使用して作成された既存のユーザー定義のリンク サーバー ログインを使用します。

[ @login = ] N'login'

ログイン。 @loginsysname で、既定値は NULL です。 このパラメーターは、 @security_mode0されるときに指定する必要があります。

[ @password = ] N'password'

パスワード。 @passwordsysname で、既定値は NULL です。 このパラメーターは、 @security_mode0されるときに指定する必要があります。

[ @distributor = ] N'distributor'

ディストリビューターの名前。 @distributorsysname で、既定値は空の文字列です。

リターン コードの値

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

解説

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

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

プッシュ サブスクリプションの場合は、 sp_subscription_cleanupによってエントリをクリーンアップできます。 プル サブスクリプションの場合、エントリは sp_droppullsubscription または sp_subscription_cleanupでクリーンアップできます。 NULLパスワードを使用してsp_link_publicationを呼び出して、MSsubscription_properties システム テーブルのエントリをクリアしてセキュリティ上の問題を引き出すこともできます。

パブリッシャーに接続するときに即時更新サブスクライバーによって使用される既定のモードでは、Windows 認証を使用した接続は許可されません。 Windows 認証モードで接続するには、リンク サーバーをパブリッシャーに設定する必要があります。即時更新サブスクライバーは、サブスクライバーの更新時にこの接続を使用する必要があります。 そのためには、@security_mode2 に設定して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'AdventureWorks2022';
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 AdventureWorks2022;
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'AdventureWorks2022Replica'; 
SET @subscriber = $(SubServer);

-- At the Publisher, register the subscription, using the defaults.
USE [AdventureWorks2022]
EXEC sp_addsubscription 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @destination_db = @subscriptionDB, 
    @subscription_type = N'pull', 
    @update_mode = N'failover';
GO

アクセス許可

sysadmin固定サーバー ロールのメンバーのみがsp_link_publicationを実行できます。