sp_addpullsubscription_agent (Transact-SQL)

向事务发布添加用于同步请求订阅的全新预定的代理作业。 此存储过程在订阅服务器的订阅数据库中执行。

主题链接图标Transact-SQL 语法约定

语法

sp_addpullsubscription_agent [ @publisher = ] 'publisher'
    [ , [ @publisher_db = ] 'publisher_db' ]
        , [ @publication = ] 'publication'
    [ , [ @subscriber = ] 'subscriber' ]
    [ , [ @subscriber_db = ] 'subscriber_db' ]
    [ , [ @subscriber_security_mode = ] subscriber_security_mode ]
    [ , [ @subscriber_login = ] 'subscriber_login' ]
    [ , [ @subscriber_password = ] 'subscriber_password' ]
    [ , [ @distributor = ] 'distributor' ]
    [ , [ @distribution_db = ] 'distribution_db' ]
    [ , [ @distributor_security_mode = ] distributor_security_mode ]
    [ , [ @distributor_login = ] 'distributor_login' ]
    [ , [ @distributor_password = ] 'distributor_password' ]
    [ , [ @optional_command_line = ] 'optional_command_line' ]
    [ , [ @frequency_type = ] frequency_type ]
    [ , [ @frequency_interval = ] frequency_interval ]
    [ , [ @frequency_relative_interval = ] frequency_relative_interval ]
    [ , [ @frequency_recurrence_factor = ] frequency_recurrence_factor ]
    [ , [ @frequency_subda y= ] 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 ]
    [ , [ @distribution_jobid = ] distribution_jobid OUTPUT ]
    [ , [ @encrypted_distributor_password = ] encrypted_distributor_password ]
    [ , [ @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' ]
    [ , [ @publication_type = ] publication_type ]
    [ , [ @dts_package_name = ] 'dts_package_name' ]
    [ , [ @dts_package_password = ] 'dts_package_password' ]
    [ , [ @dts_package_location = ] 'dts_package_location' ]
    [ , [ @reserved = ] 'reserved' ]
    [ , [ @offloadagent = ] 'remote_agent_activation' ]
    [ , [ @offloadserver = ] 'remote_agent_server_name']
    [ , [ @job_name = ] 'job_name' ]
    [ , [ @job_login = ] 'job_login' ] 
    [ , [ @job_password = ] 'job_password' ] 

参数

  • [ @publisher = ] 'publisher'
    发布服务器的名称。publisher 的数据类型为 sysname,无默认值。

  • [ @publisher_db=] **'**publisher_db'
    发布服务器数据库的名称。publisher_db 的数据类型为 sysname,默认值为 NULL。Oracle 发布服务器忽略 publisher_db。

  • [ @publication = ] 'publication'
    发布的名称。publication 的数据类型为 sysname,无默认值。

  • [ @subscriber=] 'subscriber'
    订阅服务器的名称。subscriber 的数据类型为 sysname,默认值为 NULL。

    注意注意

    不推荐使用此参数,保留它是为了让脚本能够向后兼容。

  • [ @subscriber_db=] 'subscriber_db'
    订阅数据库的名称。subscriber_db 的数据类型为 sysname,默认值为 NULL。

    注意注意

    不推荐使用此参数,保留它是为了让脚本能够向后兼容。

  • [ @subscriber_security_mode=] subscriber_security_mode
    同步时连接到订阅服务器所使用的安全模式。subscriber_security_mode 的数据类型为 int,,默认值为 NULL。 0 指定 SQL Server 身份验证。 1 指定 Windows 身份验证。

    注意注意

    不推荐使用此参数,保留它是为了让脚本能够向后兼容。 分发代理始终使用 Windows 身份验证连接到本地订阅服务器。 如果为此参数指定了 NULL 或 1 以外的值,则返回一条警告消息。

  • [ @subscriber_login =] 'subscriber_login'
    同步时连接到订阅服务器所使用的订阅服务器登录名。subscriber_login 的数据类型为 sysname,默认值为 NULL。

    注意注意

    不推荐使用此参数,保留它是为了让脚本能够向后兼容。 如果为此参数指定了值,将返回警告消息,但将忽略该值。

  • [ @subscriber_password=] 'subscriber_password'
    订阅服务器密码。如果将 subscriber_security_mode 设置为 0,则 subscriber_password 是必需的。subscriber_password 的数据类型为 sysname,默认值为 NULL。 如果使用订阅服务器密码,将自动对密码进行加密。

    注意注意

    不推荐使用此参数,保留它是为了让脚本能够向后兼容。 如果为此参数指定了值,将返回警告消息,但将忽略该值。

  • [ @distributor=] 'distributor'
    分发服务器的名称。distributor 的数据类型为 sysname,默认值由 publisher 指定。

  • [ @distribution_db=] 'distribution_db'
    分发数据库的名称。distribution_db 的数据类型为 sysname,默认值为 NULL。

  • [ @distributor_security_mode=] distributor_security_mode
    同步时连接到分发服务器所使用的安全模式。distributor_security_mode 的数据类型为 int,默认值为 10 指定了 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。

    安全说明安全说明

    请不要使用空密码。 建议使用强密码。 如果可能,请在运行时提示用户输入安全凭据。如果必须在脚本文件中存储凭据,则必须保护文件以防止未经授权的访问。

  • [ @optional_command_line=] 'optional_command_line'
    提供给分发代理的可选命令提示符。 例如,-DefinitionFile C:\Distdef.txt 或 -CommitBatchSize 10。optional_command_line 的数据类型为 nvarchar(4000),默认值为空字符串。

  • [ @frequency_type = ] frequency_type
    安排分发代理计划的频率。frequency_type 的数据类型为 int,可以是下列值之一。

    说明

    1

    一次

    2(默认值)

    按需

    4

    每天

    8

    每周

    16

    每月

    32

    “每月”选项相关

    64

    自动启动

    128

    重复执行

    注意注意

    指定值 64 会使分发代理在连续模式下运行。 这相当于设置代理的 -Continuous 参数。 有关详细信息,请参阅复制分发代理

  • [ @frequency_interval = ] frequency_interval
    应用于由 frequency_type 所设频率的值。frequency_interval 的数据类型为 int,默认值为 1。

  • [ @frequency_relative_interval = ]frequency_relative_interval
    分发代理的日期。 当 frequency_type 设置为 32(与“每月”选项相关)时使用此参数。frequency_relative_interval 的数据类型为 int,可以是下列值之一。

    说明

    1(默认值)

    第一个

    2

    第二个

    4

    第三个

    8

    第四个

    16

    最后一个

  • [ @frequency_recurrence_factor = ] frequency_recurrence_factor
    frequency_type 使用的重复因子。frequency_recurrence_factor 的数据类型为 int,默认值为 1

  • [ @frequency_subday = ]frequency_subday
    在指定期内重新安排计划的频率。frequency_subday 的数据类型为 int,可以是下列值之一。

    说明

    1(默认值)

    一次

    2

    4

    分钟

    8

    小时

  • [ @frequency_subday_interval=] frequency_subday_interval
    frequency_subday 的间隔。frequency_subday_interval 的数据类型为 int,默认值为 1

  • [ @active_start_time_of_day=] active_start_time_of_day
    第一次安排分发代理的时间,格式为 HHMMSS。active_start_time_of_day 的数据类型为 int,默认值为 0

  • [ @active_end_time_of_day = ] active_end_time_of_day
    停止安排分发代理的时间,格式为 HHMMSS。active_end_time_of_day 的数据类型为 int,默认值为 0

  • [ @active_start_date=] active_start_date
    第一次安排分发代理的日期,格式为 YYYYMMDD。active_start_date 的数据类型为 int,默认值为 0

  • [ @active_end_date=] active_end_date
    停止安排分发代理的日期,格式为 YYYYMMDD。active_end_date 的数据类型为 int,默认值为 0

  • [ @distribution_jobid =] distribution_jobidOUTPUT
    此作业的分发代理 ID。distribution_jobid 的数据类型为 binary(16),默认值为 NULL,并且该参数是 OUTPUT 参数。

  • [ @encrypted_distributor_password=] encrypted_distributor_password
    不再支持设置 encrypted_distributor_password。 尝试将此 bit 参数设置为 1 会导致错误。

  • [ @enabled_for_syncmgr=] 'enabled_for_syncmgr'
    指示是否可以通过 Microsoft 同步管理器同步订阅。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。

  • [ @working_directory= ] 'working_director'
    用于存储发布的数据和架构文件的工作目录名。working_directory 的数据类型为 nvarchar(255),默认值为 NULL。 名称应按 UNC 格式指定。

  • [ @use_ftp= ] 'use_ftp'
    指定使用 FTP 而不是常规协议来检索快照。use_ftp 的数据类型为 nvarchar(5),默认值为 FALSE。

  • [ @publication_type = ] publication_type
    指定发布的复制类型。publication_type 的数据类型为 tinyint,默认值为 0。 如果该值为 0,则发布为事务类型。 如果该值为 1,则发布为快照类型。 如果该值为 2,则发布为合并类型。

  • [ @dts_package_name= ] 'dts_package_name'
    指定 DTS 包的名称。dts_package_name 的数据类型为 sysname,默认值为 NULL。 例如,若要将包名称指定为 DTSPub_Package,则该参数应为 @dts\_package\_name = N'DTSPub_Package'。

  • [ @dts_package_password= ] 'dts_package_password'
    指定包的密码(如果有的话)。dts_package_password 的数据类型为 sysname,默认值为 NULL,表示包没有密码。

    注意注意

    如果指定了 dts_package_name,则必须指定密码。

  • [ @dts_package_location= ] 'dts_package_location'
    指定包的位置。dts_package_location 的数据类型为 nvarchar(12),默认值为 subscriber。 包的位置可以是 distributorsubscriber

  • [ @reserved= ] 'reserved'
    标识为仅供参考。 不提供支持。 不保证以后的兼容性。

  • [ @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。

  • [ @job_login= ] 'job_login'
    用于运行代理的 Windows 帐户的登录名。job_login 的数据类型为 nvarchar(257),无默认值。 代理始终可以使用此 Windows 帐户连接到订阅服务器。

  • [ @job_password= ] 'job_password'
    运行代理时所用的 Windows 帐户的密码。job_password 的数据类型为 sysname,无默认值。

    安全说明安全说明

    如果可能,请在运行时提示用户输入安全凭据。 如果必须在脚本文件中存储凭据,则必须保护文件以防止未经授权的访问。

返回代码值

0(成功)或 1(失败)

注释

sp_addpullsubscription_agent 可用于快照复制和事务复制。

示例

-- 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;
SET @publication = N'AdvWorksProductTran';
SET @publisher = $(PubServer);
SET @publicationDB = N'AdventureWorks';

-- At the subscription database, create a pull subscription 
-- to a transactional publication.
USE [AdventureWorksReplica]
EXEC sp_addpullsubscription 
  @publisher = @publisher, 
  @publication = @publication, 
  @publisher_db = @publicationDB;

-- Add an agent job to synchronize the pull subscription.
EXEC sp_addpullsubscription_agent 
  @publisher = @publisher, 
  @publisher_db = @publicationDB, 
  @publication = @publication, 
  @distributor = @publisher, 
  @job_login = $(Login), 
  @job_password = $(Password);
GO

权限

只有 sysadmin 固定服务器角色成员或 db_owner 固定数据库角色成员才能执行 sp_addpullsubscription_agent