sp_link_publication (Transact-SQL)

设置在连接到发布服务器时立即更新订阅的同步触发器所使用的配置和安全信息。此存储过程在订阅服务器的订阅数据库中执行。

ms174991.security(zh-cn,SQL.90).gif安全说明:
使用远程分发服务器配置发布服务器时,为所有参数(包括 job_loginjob_password)提供的值都将作为纯文本发送到分发服务器。在执行此存储过程之前,应当对发布服务器与其远程分发服务器之间的连接进行加密。有关详细信息,请参阅加密与 SQL Server 的连接
ms174991.note(zh-cn,SQL.90).gif重要提示:
在某些情况下,如果订阅服务器正在运行 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'
    要链接到的发布服务器名。publisher 的数据类型为 sysname,没有默认值。
  • [ @publisher_db= ] 'publisher_db'
    要链接到的发布服务器数据库名。publisher_db 的数据类型为 sysname,没有默认值。
  • [ @publication= ] 'publication'
    要链接到的发布名。publication 的数据类型为 sysname,没有默认值。
  • [ @security_mode= ] security_mode
    订阅服务器为执行立即更新而连接到远程发布服务器时所用的安全模式。security_mode 的数据类型为 int,可以是下列值之一。

  • [ @login= ] 'login'
    登录名。login 的数据类型为 sysname,默认值为 NULL。如果 security_mode0,则必须指定此参数。
  • [ @password= ] 'password'
    密码。password 的数据类型为 sysname,默认值为 NULL。如果 security_mode0,则必须指定此参数。
  • [ @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_publicationsecurity_mode = 2 模式运行。使用 Windows 身份验证时,必须支持安全策略帐户委托。

权限

只有 sysadmin 固定服务器角色成员才能执行 sp_link_publication

示例

-- 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'AdventureWorks';
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 AdventureWorks
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'AdventureWorksReplica'; 
SET @subscriber = $(SubServer);

-- At the Publisher, register the subscription, using the defaults.
USE [AdventureWorks]
EXEC sp_addsubscription 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @destination_db = @subscriptionDB, 
    @subscription_type = N'pull', 
    @update_mode = N'failover';
GO

请参阅

参考

sp_droppullsubscription (Transact-SQL)
sp_helpsubscription_properties (Transact-SQL)
sp_subscription_cleanup (Transact-SQL)
系统存储过程 (Transact-SQL)

其他资源

更新订阅的安全注意事项

帮助和信息

获取 SQL Server 2005 帮助