sp_link_publication (Transact-SQL)

適用于:SQL Server (所有支援的版本)

設定在連接到發行者時,立即更新訂閱的同步處理觸發程序所用的組態和安全性資訊。 這個預存程序執行於訂閱資料庫的訂閱者端。

重要事項

當利用遠端散發者來設定發行者時,提供給所有參數的值 (包括 job_loginjob_password) 都會以純文字的方式傳給散發者。 您應該先加密「發行者」及其遠端「散發者」之間的連接,再執行這個預存程序。 如需詳細資訊,請參閱啟用資料庫引擎的加密連線 (SQL Server 組態管理員)

重要事項

在某些情況下,如果訂閱者執行 Microsoft SQL Server 2005 (9.x) Service Pack 1 或更新版本,且發行者正在執行舊版,此預存程式可能會失敗。 如果此案例中的預存程式失敗,請將發行者升級至 SQL Server 2005 (9.x) 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' 這是要連結的發行者名稱。 publishersysname,沒有預設值。

[ @publisher_db = ] 'publisher_db' 這是要連結的發行者資料庫名稱。 publisher_dbsysname,沒有預設值。

[ @publication = ] 'publication' 這是要連結的發行集名稱。 publicationsysname,沒有預設值。

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

描述
0 使用 SQL Server 驗證搭配此預存程式中指定的登入做為登入密碼

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

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

[ @login = ] 'login' 這是登入。 login 是預設值為 NULL 的 sysname。 當 security_mode0時,必須指定此參數。

[ @password = ] 'password' 這是密碼。 passwordsysname,預設值為 Null。 當 security_mode0時,必須指定此參數。

[ @distributor = ] 'distributor' 這是散發者的名稱。 散發者sysname,預設值為 Null。

傳回碼值

0 (成功) 或 1 (失敗)

備註

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

sp_link_publication 可用於發送和提取訂閱。 您可以在建立訂閱之前或之後呼叫它。 在 Transact-SQL) 系統資料表的 MSsubscription_properties ( 插入或更新專案。

對於發送訂閱,您可以透過 Transact-SQL) sp_subscription_cleanup (清除專案。 針對提取訂用帳戶,您可以透過 Transact-SQL) Transact-SQL sp_subscription_cleanup () sp_droppullsubscription (來清除專案。 您也可以使用 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

另請參閱

sp_droppullsubscription (Transact-SQL)
sp_helpsubscription_properties (Transact-SQL)
sp_subscription_cleanup (Transact-SQL)
系統預存程序 (Transact-SQL)