sp_link_publication (Transact-SQL)
適用対象: SQL サーバー
パブリッシャーに接続するときに即時更新サブスクリプションの同期トリガーによって使用される構成とセキュリティ情報を設定します。 このストアド プロシージャは、サブスクリプション データベースのサブスクライバーで実行されます。
重要
リモート ディストリビューターを使用するパブリッシャーを構成する場合は、 job_login および job_passwordを含むすべてのパラメーターに指定された値がディストリビューターにプレーン テキストとして送信されます。 このストアド プロシージャを実行する前に、パブリッシャーとリモート ディストリビューターの間の接続を暗号化する必要があります。 詳細については、「データベース エンジンへの暗号化接続の有効化 (SQL Server 構成マネージャー)」を参照してください。
重要
特定の条件下では、サブスクライバーが Microsoft SQL Server 2005 (9.x) Service Pack 1 以降を実行していて、パブリッシャーが以前のバージョンを実行している場合、このストアド プロシージャは失敗することがあります。 このシナリオでストアド プロシージャが失敗した場合は、パブリッシャーを SQL Server 2005 (9.x) Service Pack 1 以降にアップグレードします。
構文
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 認証を使用します。
Value | 説明 |
---|---|
0 | このストアド プロシージャで指定されたログインと共に、 login および password として SQL Server 認証を使用します。 注: 以前のバージョンの SQL Server では、このオプションを使用して動的リモート プロシージャ コール (RPC) を指定していました。 |
1 | サブスクライバーで変更を行うユーザーのセキュリティ コンテキスト (SQL Server 認証または Windows 認証) を使用します。 注: このアカウントは、十分な特権を持つパブリッシャーにも存在する必要があります。 Windows 認証を使用する場合は、セキュリティ アカウントの委任がサポートされている必要があります。 |
2 | sp_link_publicationを使用して作成された既存のユーザー定義リンク サーバー ログインを使用します。 |
[ @login = ] 'login'
ログインです。 login のデータ型は sysname で、既定値は NULL です。 このパラメーターは、 security_mode が 0 の場合に指定する必要があります。
[ @password = ] 'password'
パスワードです。 password は sysname で、既定値は NULL です。 このパラメーターは、 security_mode が 0 の場合に指定する必要があります。
[ @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 認証モードで接続するには、リンク サーバーをパブリッシャーに設定する必要があります。即時更新サブスクライバーは、サブスクライバーの更新時にこの接続を使用する必要があります。 そのためには、 sp_link_publication を security_mode = 2 で実行する必要があります。 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を実行できます。
参照
sp_droppullsubscription (Transact-SQL)
sp_helpsubscription_properties (Transact-SQL)
sp_subscription_cleanup (Transact-SQL)
システム ストアド プロシージャ (Transact-SQL)
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示