sp_link_publication (Transact-SQL)

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

安全性注意事項安全性注意事項

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

重要事項重要事項

在某些情況下,如果「訂閱者」執行 Microsoft SQL Server 2005 Service Pack 1 或更新版本,而「發行者」執行較舊的版本,此預存程序可能會失敗。如果在此情況下預存程序失敗,請將「發行者」升級為 SQL Server 2005 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 驗證,以這個預存程序指定的登入為 loginpassword

    注意

    在舊版的 SQL Server 中,這個選項用來指定動態遠端程序呼叫 (RPC)。

    1

    使用在訂閱者端進行變更之使用者的安全性內容 (SQL Server 驗證或 Windows 驗證)。

    > [!NOTE]
    > <P>這個帳戶也必須存在於發行者端,且具有足夠的權限。當使用 Windows 驗證時,必須支援安全性帳戶的委派。</P>
    

    2

    使用 sp_link_publication 所建立的現有使用者自訂連結伺服器登入。

    • [ @login= ] 'login'
      這是登入。 loginsysname,預設值是 NULL。 當 security_mode0 時,必須指定這個參數。

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

    • [ @distributor= ] 'distributor'
      這是散發者的名稱。 distributorsysname,預設值是 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 驗證模式來連接,則必須設定發行者的連結伺服器,當更新訂閱者時,立即更新訂閱者應該使用這個連接。 這需要用 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
    

    權限

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

    請參閱

    參考

    sp_droppullsubscription (Transact-SQL)

    sp_helpsubscription_properties (Transact-SQL)

    sp_subscription_cleanup (Transact-SQL)

    系統預存程序 (Transact-SQL)