sp_link_publication (Transact-SQL)
適用於:SQL Server
設定連線到發行者時,立即更新訂閱的同步觸發程式所使用的組態和安全性資訊。 這個預存程式會在訂閱資料庫的訂閱者端執行。
重要
當您使用遠端散發者設定發行者時,所有參數所提供的值,包括 @job_login 和 @job_password,都會以純文本形式傳送給散發者。 您應該先加密「發行者」及其遠端「散發者」之間的連接,再執行這個預存程序。 如需詳細資訊,請參閱針對加密連線設定 SQL Server 資料庫引擎。
語法
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_mode 為0
時,必須指定此參數。
[ @password = ] N'password'
密碼。 @password為 sysname,預設值為 NULL
。 當 @security_mode 為0
時,必須指定此參數。
[ @distributor = ] N'distributor'
散發者的名稱。 @distributor為 sysname,預設值為空字串。
傳回碼值
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 驗證模式進行連線,鏈接的伺服器必須設定為發行者,而且立即更新訂閱者在更新訂閱者時應該使用此連線。 這需要 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
。