sp_addmergepullsubscription_agent (Transact-SQL)
向合并发布添加一个用于计划请求订阅同步的新代理作业。 此存储过程在订阅服务器的订阅数据库中执行。
语法
sp_addmergepullsubscription_agent [ [ @name = ] 'name' ]
, [ @publisher = ] 'publisher'
, [ @publisher_db = ] 'publisher_db'
, [ @publication =] 'publication'
[ , [ @publisher_security_mod e= ] publisher_security_mode ]
[ , [ @publisher_login = ] 'publisher_login' ]
[ , [ @publisher_password = ] 'publisher_password' ]
[ , [ @publisher_encrypted_password = ] publisher_encrypted_password ]
[ , [ @subscriber = ] 'subscriber' ]
[ , [ @subscriber_db = ] 'subscriber_db' ]
[ , [ @subscriber_security_mode = ] subscriber_security_mode ]
[ , [ @subscriber_login = ] 'subscriber_login' ]
[ , [ @subscriber_password= ] 'subscriber_password' ]
[ , [ @distributor = ] 'distributor' ]
[ , [ @distributor_security_mode = ] distributor_security_mode ]
[ , [ @distributor_login = ] 'distributor_login' ]
[ , [ @distributor_password = ] 'distributor_password' ]
[ , [ @encrypted_password = ] encrypted_password ]
[ , [ @frequency_type = ] frequency_type ]
[ , [ @frequency_interval = ] frequency_interval ]
[ , [ @frequency_relative_interval = ] frequency_relative_interval ]
[ , [ @frequency_recurrence_factor = ] frequency_recurrence_factor ]
[ , [ @frequency_subday = ] frequency_subday ]
[ , [ @frequency_subday_interval = ] frequency_subday_interval ]
[ , [ @active_start_time_of_day = ] active_start_time_of_day ]
[ , [ @active_end_time_of_day = ] active_end_time_of_day ]
[ , [ @active_start_date = ] active_start_date ]
[ , [ @active_end_date = ] active_end_date ]
[ , [ @optional_command_line = ] 'optional_command_line' ]
[ , [ @merge_jobid = ] merge_jobid ]
[ , [ @enabled_for_syncmgr = ] 'enabled_for_syncmgr' ]
[ , [ @ftp_address = ] 'ftp_address' ]
[ , [ @ftp_port = ] ftp_port ]
[ , [ @ftp_login = ] 'ftp_login' ]
[ , [ @ftp_password = ] 'ftp_password' ]
[ , [ @alt_snapshot_folder = ] 'alternate_snapshot_folder' ]
[ , [ @working_directory = ] 'working_directory' ]
[ , [ @use_ftp = ] 'use_ftp' ]
[ , [ @reserved = ] 'reserved' ]
[ , [ @use_interactive_resolver = ] 'use_interactive_resolver' ]
[ , [ @offloadagent = ] 'remote_agent_activation' ]
[ , [ @offloadserver = ] 'remote_agent_server_name']
[ , [ @job_name = ] 'job_name' ]
[ , [ @dynamic_snapshot_location = ] 'dynamic_snapshot_location' ]
[ , [ @use_web_sync = ] use_web_sync ]
[ , [ @internet_url = ] 'internet_url' ]
[ , [ @internet_login = ] 'internet_login' ]
[ , [ @internet_password = ] 'internet_password' ]
[ , [ @internet_security_mode = ] internet_security_mode ]
[ , [ @internet_timeout = ] internet_timeout ]
[ , [ @hostname = ] 'hostname' ]
[ , [ @job_login = ] 'job_login' ]
[ , [ @job_password = ] 'job_password' ]
参数
[ @name = ] 'name'
代理的名称。name 的数据类型为 sysname,默认值为 NULL。[ @publisher =] 'publisher'
发布服务器的名称。publisher 的数据类型为 sysname,无默认值。[ @publisher_db =] 'publisher_db'
发布服务器数据库的名称。publisher_db 的数据类型为 sysname,无默认值。[ @publication =] 'publication'
发布的名称。publication 的数据类型为 sysname,无默认值。[ @publisher_security_mode = ] publisher_security_mode
在同步时连接到发布服务器所采用的安全模式。publisher_security_mode 的数据类型为 int,默认值为 1。如果此值为 0,则指定 SQL Server 身份验证。 如果为 1,则指定了 Windows 身份验证。安全说明 请尽可能使用 Windows 身份验证。
[ @publisher_login = ] 'publisher_login'
在同步时用于连接到发布服务器的登录名。publisher_login 的数据类型为 sysname,默认值为 NULL。[ @publisher_password = ] 'publisher_password'
连接到发布服务器时所用的密码。publisher_password 的数据类型为 sysname,默认值为 NULL。安全说明 不要使用空密码。请使用强密码。 如果可能,请在运行时提示用户输入安全凭据。 如果必须在脚本文件中存储凭据,则必须保护文件以防止未经授权的访问。
[ @publisher_encrypted_password = ]publisher_encrypted_password
不再支持设置 publisher_encrypted_password。 尝试将此 bit 参数设置为 1 会导致错误。[ @subscriber= ] 'subscriber'
订阅服务器的名称。subscriber 的数据类型为 sysname,默认值为 NULL。[ @subscriber_db=] 'subscriber_db'
订阅数据库的名称。subscriber_db 的数据类型为 sysname,默认值为 NULL。[ @subscriber_security_mode=] subscriber_security_mode
在同步时连接到订阅服务器所采用的安全模式。subscriber_security_mode 的数据类型为 int,默认值为 1。如果此值为 0,则指定 SQL Server 身份验证。 如果为 1,则指定了 Windows 身份验证。注意 不推荐使用此参数,保留它是为了让脚本能够向后兼容。 合并代理始终使用 Windows 身份验证连接到本地订阅服务器。 如果为此参数指定了值,将返回警告消息,但将忽略该值。
[ @subscriber_login =] 'subscriber_login'
同步时连接到订阅服务器所使用的订阅服务器登录名。如果将 subscriber_security_mode 设置为 0,则 subscriber_login 是必需的。subscriber_login 的数据类型为 sysname,默认值为 NULL。注意 不推荐使用此参数,保留它是为了让脚本能够向后兼容。 如果为此参数指定了值,将返回警告消息,但将忽略该值。
[ @subscriber_password=] 'subscriber_password'
用于 SQL Server 身份验证的订阅服务器密码。如果将 subscriber_security_mode 设置为 0,则 subscriber_password 是必需的。subscriber_password 的数据类型为 sysname,默认值为 NULL。注意 不推荐使用此参数,保留它是为了让脚本能够向后兼容。 如果为此参数指定了值,将返回警告消息,但将忽略该值。
[ @distributor=] 'distributor'
分发服务器的名称。distributor 的数据类型为 sysname,默认值为 publisher;即发布服务器也是分发服务器。[ @distributor_security_mode=] distributor_security_mode
在同步时连接到分发服务器所采用的安全模式。distributor_security_mode 的数据类型为 int,默认值为 0。0 指定了 SQL Server 身份验证。 1 指定 Windows 身份验证。安全说明 请尽可能使用 Windows 身份验证。
[ @distributor_login=] 'distributor_login'
在同步时为连接到分发服务器而使用的分发服务器登录名。如果将 distributor_security_mode 设置为 0,则需要 distributor_login。distributor_login 的数据类型为 sysname,默认值为 NULL。[ @distributor_password =] 'distributor_password'
分发服务器密码。如果将 distributor_security_mode 设置为 0,则需要 distributor_password。distributor_password 的数据类型为 sysname,默认值为 NULL。安全说明 不要使用空密码。请使用强密码。 如果可能,请在运行时提示用户输入安全凭据。 如果必须在脚本文件中存储凭据,则必须保护文件以防止未经授权的访问。
[ @encrypted_password=] encrypted_password
不再支持设置 encrypted_password。 尝试将此 bit 参数设置为 1 会导致错误。[ @frequency_type=] frequency_type
安排合并代理的频率。frequency_type 的数据类型为 int,可以是下列值之一。值
说明
1
一次
2
按需
4
每天
8
每周
16
每月
32
“每月”选项相关
64
自动启动
128
重复执行
NULL(默认值)
注意 指定值 64 将使合并代理在连续模式下运行。 这相当于设置代理的 -Continuous 参数。 有关详细信息,请参阅复制合并代理。
[ @frequency_interval=] frequency_interval
合并代理在星期几运行。frequency_interval 的数据类型为 int,可以是下列值之一。值
说明
1
星期日
2
星期一
3
星期二
4
星期三
5
星期四
6
星期五
7
星期六
8
日
9
工作日
10
周末
NULL(默认值)
[ @frequency_relative_interval = ]frequency_relative_interval
合并代理的日期。 如果 frequency_type 设置为 32(与“每月”选项相关),则使用此参数。frequency_relative_interval 的数据类型为 int,可以是下列值之一。值
说明
1
第一个
2
第二个
4
第三个
8
第四个
16
最后一个
NULL(默认值)
[ @frequency_recurrence_factor=] frequency_recurrence_factor
frequency_type 使用的重复因子。frequency_recurrence_factor 的数据类型为 int,默认值为 NULL。[ @frequency_subday = ]frequency_subday
在定义的周期内重新计划的频率。frequency_subday 的数据类型为 int,可以是下列值之一。值
说明
1
一次
2
秒
4
分钟
8
小时
NULL(默认值)
[ @frequency_subday_interval = ] frequency_subday_interval
frequency_subday 的间隔。frequency_subday_interval 的数据类型为 int,默认值为 NULL。[ @active_start_time_of_day=] active_start_time_of_day
第一次安排合并代理的时间,格式为 HHMMSS。active_start_time_of_day 的数据类型为 int,默认值为 NULL。[ @active_end_time_of_day=] active_end_time_of_day
停止安排合并代理的时间,格式为 HHMMSS。active_end_time_of_day 的数据类型为 int,默认值为 NULL。[ @active_start_date = ] active_start_date
第一次安排合并代理的日期,格式为 YYYYMMDD。active_start_date 的数据类型为 int,默认值为 NULL。[ @active_end_date = ] active_end_date
停止安排合并代理的日期,格式为 YYYYMMDD。active_end_date 的数据类型为 int,默认值为 NULL。[ @optional_command_line=] 'optional_command_line'
提供给合并代理的可选命令提示符。optional_command_line 的数据类型为 nvarchar(255),默认值为“ ”。 可用于向合并代理提供其他参数,例如在以下示例中,将默认的查询超时值增加到 600 秒:@optional_command_line = N'-QueryTimeOut 600'
[ @merge_jobid = ] merge_jobid
作业 ID 的输出参数。merge_jobid 的数据类型为 binary(16),默认值为 NULL。[ @enabled_for_syncmgr=] 'enabled_for_syncmgr'
指定是否可以通过 Windows 同步管理器同步订阅。enabled_for_syncmgr 的数据类型为 nvarchar(5),默认值为 FALSE。 如果为 false,则表示该订阅没有向同步管理器注册。 如果为 true,则表示该订阅已向同步管理器注册,可以在不启动 SQL Server Management Studio 的情况下进行同步。[ @ftp_address = ] 'ftp_address'
仅为保持向后兼容。[ @ftp_port= ] ftp_port
仅为保持向后兼容。[ @ftp_login = ] 'ftp_login'
仅为保持向后兼容。[ @ftp_password = ] 'ftp_password'
仅为保持向后兼容。[ @alt_snapshot_folder= ] 'alternate_snapshot_folder'
指定快照文件的选取位置。alternate_snapshot_folder 的数据类型为 nvarchar(255),默认值为 NULL。 如果为 NULL,则从发布服务器指定的默认位置拾取快照文件。[ @working_directory = ] 'working_directory'
使用 FTP 传输快照文件时用于临时存储发布的数据和架构文件的工作目录的名称。working_directory 的数据类型为 nvarchar(255),默认值为 NULL。[ @use_ftp = ] 'use_ftp'
指定使用 FTP 而不使用常规协议检索快照。use_ftp 的数据类型为 nvarchar(5),默认值为 FALSE。[ @reserved=] 'reserved'
标识为仅供参考。不提供支持。不保证以后的兼容性。[ @use_interactive_resolver = ] 'use_interactive_resolver' ]
使用交互式冲突解决程序解决所有允许交互式解决方法的项目的冲突。use_interactive_resolver 的数据类型为 nvarchar(5),默认值为 FALSE。[ @offloadagent= ] 'remote_agent_activation'
注意 已不推荐使用远程代理激活,也不再支持该功能。 支持此参数只是为了让脚本能够向后兼容。 将 remote_agent_activation 设置为除 false 之外的值会生成错误。
[ @offloadserver= ] 'remote_agent_server_name'
注意 已不推荐使用远程代理激活,也不再支持该功能。 支持此参数只是为了让脚本能够向后兼容。 将 remote_agent_server_name 设置为任何非 NULL 值将会生成错误。
[ @job_name= ] 'job_name' ]
现有代理作业的名称。job_name 的数据类型为 sysname,默认值为 NULL。 只有在使用现有作业而不是新创建的作业(此为默认设置)来同步订阅时,才需要指定此参数。 如果不是 sysadmin 固定服务器角色的成员,则在指定 job_name 时,必须指定 job_login 和 job_password。[ @dynamic_snapshot_location = ] 'dynamic_snapshot_location' ]
在使用已筛选的数据快照时要读取的快照文件所在文件夹的路径。dynamic_snapshot_location 的数据类型为 nvarchar(260),默认值为 NULL。 有关详细信息,请参阅参数化行筛选器。[ @use_web_sync = ] use_web_sync
指示已启用 Web 同步。use_web_sync 的数据类型为 bit,默认值为 0。1 指定请求订阅可以使用 HTTP 通过 Internet 进行同步。[ @internet_url = ] 'internet_url'
用于 Web 同步的复制侦听器 (REPLISAPI.DLL) 的位置。internet_url 的数据类型为 nvarchar(260),默认值为 NULL。internet_url 是一个完全限定 URL,格式为 http://server.domain.com/directory/replisapi.dll。 如果将服务器配置为侦听端口 80 以外的端口,则提供的端口号的格式也必须为 http://server.domain.com:portnumber/directory/replisapi.dll,其中的 portnumber 表示端口。[ @internet_login = ] 'internet_login'
合并代理使用 HTTP 基本身份验证连接到承载 Web 同步的 Web 服务器时所用的登录名。internet_login 的数据类型为 sysname,默认值为 NULL。[ @internet_password = ] 'internet_password'
合并代理使用 HTTP 基本身份验证连接到承载 Web 同步的 Web 服务器时所用的密码。internet_password 的数据类型为 nvarchar(524),默认值为 NULL。安全说明 不要使用空密码。请使用强密码。
[ @internet_security_mode = ] internet_security_mode
合并代理在 Web 同步过程中使用 HTTPS 连接到 Web 服务器时所用的身份验证方法。internet_security_mode 的数据类型为 int,可以是下列值之一。值
说明
0
使用基本身份验证。
1(默认值)
使用 Windows 集成身份验证。
注意 建议您将基本身份验证与 Web 同步结合使用。 若要使用 Web 同步,必须与 Web 服务器进行 SSL 连接。 有关详细信息,请参阅配置 Web 同步。
[ @internet_timeout = ] internet_timeout
Web 同步请求过期之前的时间长度(以秒为单位)。internet_timeout 的数据类型为 int,默认值为 300 秒。[ @hostname = ] 'hostname'
在参数化筛选器的 WHERE 子句中使用此函数时,覆盖 HOST_NAME() 的值。hostname 的数据类型为 sysname,默认值为 NULL。[ @job_login = ] 'job_login'
用于运行代理的 Windows 帐户的登录名。job_login 的数据类型为 nvarchar(257),无默认值。 使用 Windows 集成身份验证时,该 Windows 帐户始终用于到订阅服务器的代理连接及到分发服务器和发布服务器的连接。[ @job_password = ] 'job_password'
运行代理时所用的 Windows 帐户的密码。job_password 的数据类型为 sysname,无默认值。安全说明 请不要将身份验证信息存储在脚本文件中。 为保证安全性,应当在运行时再提供登录名和密码。
返回代码值
0(成功)或 1(失败)
注释
sp_addmergepullsubscription_agent 用于合并复制,并使用与 sp_addpullsubscription_agent 相似的功能。
与 SQL Server 2000 相比,复制代理安全模式已发生了显著的更改。 有关如何在执行 sp_addmergepullsubscription_agent 时正确指定安全设置的示例,请参阅如何创建请求订阅(复制 Transact-SQL 编程)。
示例
-- 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 @publisher AS sysname;
DECLARE @publicationDB AS sysname;
DECLARE @hostname AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks2008R2';
SET @hostname = N'adventure-works\david8';
-- At the subscription database, create a pull subscription
-- to a merge publication.
USE [AdventureWorks2008R2Replica]
EXEC sp_addmergepullsubscription
@publisher = @publisher,
@publication = @publication,
@publisher_db = @publicationDB;
-- Add an agent job to synchronize the pull subscription.
EXEC sp_addmergepullsubscription_agent
@publisher = @publisher,
@publisher_db = @publicationDB,
@publication = @publication,
@distributor = @publisher,
@job_login = $(Login),
@job_password = $(Password),
@hostname = @hostname;
GO
权限
只有 sysadmin 固定服务器角色的成员或 db_owner 固定数据库角色成的员才能执行 sp_addmergepullsubscription_agent。