如何创建推送订阅(复制 Transact-SQL 编程)
推送订阅可以使用复制存储过程以编程的方式进行创建。所用的存储过程取决于订阅所属的发布的类型。
安全说明: |
---|
如果可能,请在运行时提示用户输入安全凭据。如果不得不将凭据存储在脚本文件中,则必须确保文件的安全性以防止未经授权的访问。 |
创建快照或事务性发布的推送订阅
在发布服务器的发布数据库中,通过执行 sp_helppublication 核实发布是否支持推送订阅。
- 如果 allow_push 的值为 1,则支持推送订阅。
- 如果 allow_push 的值为 0,则执行 sp_changepublication,将 @property 指定为 allow_push,将 @value 指定为 true。
在发布服务器的发布数据库中,执行 sp_addsubscription。指定 @publication、@subscriber 和 @destination_db。将 @subscription_type 的值指定为 push。有关如何更新 Subscription 的信息,请参阅How to: Create an Updatable Subscription to a Transactional Publication (Replication Transact-SQL Programming)。
在发布服务器的发布数据库中,执行 sp_addpushsubscription_agent。指定下列各项:
- @subscriber、@subscriber_db 和 @publication 参数。
- 分发服务器中的分发代理运行时所使用的 @job_login 和 @job_password 指定的 Microsoft Windows 凭据。
注意: 使用 Windows 集成身份验证进行的连接始终使用由 @job_login 和 @job_password 指定的 Windows 凭据。分发代理始终使用 Windows 集成身份验证与分发服务器进行本地连接。默认情况下,该代理将使用 Windows 集成身份验证连接到订阅服务器。 - (可选)@subscriber_security_mode 的 0 值以及 @subscriber_login 和 @subscriber_password 指定的 Microsoft SQL Server 登录信息。如果您需要在连接到订阅服务器时使用 SQL Server 身份验证,则指定这些参数。
- 该订阅的分发代理作业计划。有关详细信息,请参阅How to: Specify Synchronization Schedules (Replication Transact-SQL Programming)。
安全说明: 在发布服务器上使用远程分发服务器创建推送订阅时,为所有参数(包括 job_login 和 job_password)提供的值都将作为纯文本发送到分发服务器。在执行此存储过程之前,应该对发布服务器及其远程分发服务器之间的连接进行加密。有关详细信息,请参阅加密与 SQL Server 的连接。
创建合并发布的推送订阅
在发布服务器的发布数据库中,通过执行 sp_helpmergepublication 核实发布是否支持推送订阅。
- 如果 allow_push 的值为 1,则发布支持推送订阅。
- 如果 allow_push 的值不为 1,则执行 sp_changemergepublication,将 @property 指定为 allow_push,将 @value 指定为 true。
在发布服务器的发布数据库中,执行 sp_addmergesubscription,并指定以下参数:
- @publication。这是发布的名称。
- @subscriber_type。对于客户端订阅,请指定 local,对于服务器订阅,请指定 global。
- @subscription_priority。对于服务器订阅,请指定订阅的优先级(从 0.00 到 99.99)。
有关详细信息,请参阅高级合并复制冲突的检测和解决。
在发布服务器的发布数据库中,执行 sp_addmergepushsubscription_agent。指定下列各项:
- @subscriber、@subscriber_db 和 @publication 参数。
- 分发服务器中的合并代理运行时所使用的 @job_login 和 @job_password 指定的 Windows 凭据。
注意: 使用 Windows 集成身份验证进行的连接始终使用由 @job_login 和 @job_password 指定的 Windows 凭据。合并代理始终使用 Windows 集成身份验证与分发服务器进行本地连接。默认情况下,该代理将使用 Windows 集成身份验证连接到订阅服务器。 - (可选)@subscriber_security_mode 的 0 值以及 @subscriber_login 和 @subscriber_password 指定的 SQL Server 登录信息。如果您需要在连接到订阅服务器时使用 SQL Server 身份验证,则指定这些参数。
- (可选)@publisher_security_mode 的 0 值以及 @publisher_login 和 @publisher_password 指定的 SQL Server 登录信息。如果您需要在连接到发布服务器时使用 SQL Server 身份验证,则指定这些值。
- 该订阅的合并代理作业计划。有关详细信息,请参阅How to: Specify Synchronization Schedules (Replication Transact-SQL Programming)。
安全说明: 在发布服务器上使用远程分发服务器创建推送订阅时,为所有参数(包括 job_login 和 job_password)提供的值都将作为纯文本发送到分发服务器。在执行此存储过程之前,应该对发布服务器及其远程分发服务器之间的连接进行加密。有关详细信息,请参阅加密与 SQL Server 的连接。
示例
以下示例创建事务性发布的推送订阅。登录名和密码在运行时使用 sqlcmd 脚本变量进行提供。
-- 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".
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica';
--Add a push subscription to a transactional publication.
USE [AdventureWorks]
EXEC sp_addsubscription
@publication = @publication,
@subscriber = @subscriber,
@destination_db = @subscriptionDB,
@subscription_type = N'push';
--Add an agent job to synchronize the push subscription.
EXEC sp_addpushsubscription_agent
@publication = @publication,
@subscriber = @subscriber,
@subscriber_db = @subscriptionDB,
@job_login = $(Login),
@job_password = $(Password);
GO
以下示例创建合并发布的推送订阅。登录名和密码在运行时使用 sqlcmd 脚本变量进行提供。
-- 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".
DECLARE @publication AS sysname;
DECLARE @subscriber AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @hostname AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @subscriber = $(SubServer);
SET @subscriptionDB = N'AdventureWorksReplica';
SET @hostname = N'adventure-works\david8'
-- Add a push subscription to a merge publication.
USE [AdventureWorks]
EXEC sp_addmergesubscription
@publication = @publication,
@subscriber = @subscriber,
@subscriber_db = @subscriptionDB,
@subscription_type = N'push',
@hostname = @hostname;
--Add an agent job to synchronize the push subscription.
EXEC sp_addmergepushsubscription_agent
@publication = @publication,
@subscriber = @subscriber,
@subscriber_db = @subscriptionDB,
@job_login = $(Login),
@job_password = $(Password);
GO
请参阅
任务
如何创建请求订阅(复制 Transact-SQL 编程)
如何创建推送订阅(RMO 编程)