分享方式:


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'

要連結之發行者的名稱。 @publisher為 sysname,沒有預設值。

[ @publisher_db = ] N'publisher_db'

要連結之發行者資料庫的名稱。 @publisher_db為 sysname,沒有預設值。

[ @publication = ] N'publication'

要連結之發行集的名稱。 @publication為 sysname,沒有預設值。

[ @security_mode = ] security_mode

訂閱者用來連線到遠端發行者以進行立即更新的安全性模式。 @security_mode為 int,而且可以是下列其中一個值。 儘可能使用 Windows 驗證。

Description
0 使用 SQL Server 驗證搭配這個預存程式中指定的登入作為 @login@password

注意:在舊版的 SQL Server 中,此選項是用來指定動態遠端過程調用 (RPC)。
1 使用使用者在訂閱者端進行變更的安全性內容(SQL Server 驗證或 Windows 驗證)。

注意:此帳戶也必須存在於具有足夠許可權的發行者端。 當您使用 Windows 驗證時,必須支援安全性帳戶委派。
2 使用使用 sp_link_publication建立的現有使用者定義的連結伺服器登入。

[ @login = ] N'login'

登入。 @login為 sysname,預設值為 NULL。 當 @security_mode0,必須指定此參數。

[ @password = ] N'password'

密碼。 @password為 sysname,預設值為 NULL。 當 @security_mode0,必須指定此參數。

[ @distributor = ] N'distributor'

散發者的名稱。 @distributor為 sysname,預設值為空字串。

傳回碼值

0 (成功) 或 1 (失敗)。

備註

sp_link_publication 是由事務複製中的立即更新訂閱所使用。

sp_link_publication 可發送和提取訂閱。 您可以在建立訂用帳戶之前或之後呼叫它。 在MSsubscription_properties系統數據表中插入或更新專案。

針對發送訂閱,專案可以透過 sp_subscription_cleanup清除。 針對提取訂閱,專案可以透過 sp_droppullsubscriptionsp_subscription_cleanup來清除。 您也可以使用NULL密碼呼叫 sp_link_publication ,以清除MSsubscription_properties系統數據表中的專案,以取得安全性考慮。

當訂閱者連接到發行者時,立即更新訂閱者所使用的預設模式不允許使用 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

權限

只有系統管理員固定伺服器角色的成員才能執行 sp_link_publication