将订阅添加到发布并设置订阅服务器的状态。此存储过程在发布服务器的发布数据库上执行。
sp_addsubscription [ @publication = ] 'publication'
[ , [ @article = ] 'article' ]
[ , [ @subscriber = ] 'subscriber' ]
[ , [ @destination_db = ] 'destination_db' ]
[ , [ @sync_type = ] 'sync_type' ]
[ , [ @status = ] 'status'
[ , [ @subscription_type = ] 'subscription_type' ]
[ , [ @update_mode = ] 'update_mode' ]
[ , [ @loopback_detection = ] 'loopback_detection' ]
[ , [ @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' ]
[ , [ @reserved = ] 'reserved' ]
[ , [ @enabled_for_syncmgr = ] 'enabled_for_syncmgr' ]
[ , [ @offloadagent = ] remote_agent_activation ]
[ , [ @offloadserver = ] 'remote_agent_server_name' ]
[ , [ @dts_package_name = ] 'dts_package_name' ]
[ , [ @dts_package_password = ] 'dts_package_password' ]
[ , [ @dts_package_location = ] 'dts_package_location' ]
[ , [ @distribution_job_name = ] 'distribution_job_name' ]
[@publication = ] 'publication'
是发布名。publication 的数据类型为 sysname,没有默认设置。
[@article = ] 'article'
是对其订阅发布的项目。article 的数据类型为 sysname,默认设置为 all。项目名在发布内必须唯一。如果是 all 或没有提供,则表示将订阅添加到该发布内的所有项目。
[@subscriber = ] 'subscriber'
是订阅服务器名。subscriber 的数据类型为 sysname,默认设置为 NULL。
[@destination_db = ] 'destination_db'
是用来存放复制数据的目的数据库名。destination_db 的数据类型为 sysname,默认设置为 NULL,并且使用与发布数据库相同的名称。
[@sync_type = ] 'sync_type'
是订阅同步类型。sync_type 的数据类型为 nvarchar(15),默认设置为 automatic。可以是 automatic 或 none。如果是 automatic,则表示首先将已发布表的架构和初始数据传输到订阅服务器。如果是 none,则假定订阅服务器已有已发布表的架构和初始数据。始终传输系统表和数据。
[@status = ] 'status'
是订阅状态。status 的数据类型为 sysname,可以是下列值之一。
值 | 描述 |
---|---|
Active | 如果 sync_type 是 none,则 status 的默认设置为 active。若要启用订阅服务器以查看受限发布项目内的项目,必须将占位符订阅创建为不活动状态。如果 sync_type 是 automatic,则 status 不能设置为 active。 |
Subscribed | 如果 sync_type 是 none 以外的值,则 status 的默认设置为 subscribed。 |
NULL(默认值) |
[@subscription_type = ] 'subscription_type'
是订阅的类型。subscription_type 的数据类型为 nvarchar(4),默认设置为 push。可以是 push 或 pull。push 订阅的分发代理程序驻留在分发服务器上,而 pull 订阅的分发代理程序驻留在订阅服务器上。subscription_type 可以是 pull 以创建对发布服务器是已知的命名请求订阅。有关更多信息,请参见订阅发布。
说明 匿名订阅无需使用此存储过程。
[@update_mode = ] 'update_mode'
是更新的类型。update_mode 的数据类型为 nvarchar(30),可以是下列值之一。
值 | 描述 |
---|---|
read only(默认值) | 该订阅是只读的。在订阅服务器上所做的更改不会发送到发布服务器。 |
sync tran | 启用对即时更新订阅的支持。 |
queued tran | 启用排队更新的订阅。可以在订阅服务器上进行数据修改,将其存储在队列中,然后传播到发布服务器。 |
failover | 将排队更新作为故障转移的情况下启用用于即时更新的订阅。可以在订阅服务器上进行数据修改并立即传播到发布服务器。如果发布服务器与订阅服务器未连接在一起,则可以将在订阅服务器上所做的数据修改存储在队列中,直到订阅服务器与发布服务器重新连接在一起。 |
注意,如果订阅的发布允许 DTS,则不允许值 synctran 和 queued tran。
[@loopback_detection = ] 'loopback_detection'
指定分发代理程序是否将在订阅服务器上发起的事务发送回订阅服务器。loopback_detection 的数据类型为 nvarchar(5),可以是下列值之一。
值 | 描述 |
---|---|
true | 分发代理程序不将从订阅服务器上发起的事务发送回该订阅服务器。仅当订阅 update_mode 的数据类型为 synctran 且项目表有发布的 timestamp 列时,才能将值设置为 true。 |
false | 分发代理程序将在订阅服务器上发起的事务发送回订阅服务器: |
NULL(默认值) |
[@frequency_type = ] frequency_type
是调度分发代理程序所用的频率。frequency_type 的数据类型为 int,默认设置为 NULL。如果未指定值,则 sp_addsubscription 将使用 sp_addsubscriber 中指定的值。
[@frequency_interval = ] frequency_interval
是应用于 frequency_type 所设置频率的值。frequency_interval 的数据类型为 int,默认设置为 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(4000),默认设置为 NULL。
[@reserved = ] 'reserved'
仅限内部使用。
[@enabled_for_syncmgr = ] 'enabled_for_syncmgr'
表示是否可以通过 Microsoft Windows 同步管理器对订阅进行同步处理。enabled_for_syncmgr 的数据类型为 nvarchar(5),默认设置为 FALSE。如果是 false,则表示该订阅没有注册到 Windows 同步管理器上。如果是 true,则表示该订阅注册到 Windows 同步管理器上,可以在不启动 SQL Server 企业管理器的情况下进行同步处理。
[@offloadagent = ] 'remote_agent_activation'
指定可以远程地激活代理程序。remote_agent_activationt 的数据类型为 bit,默认设置为 0。0 指定不能远程地激活代理程序。1 指定可以远程地激活代理程序。
[@offloadserver = ] 'remote_agent_server_name'
指定用于远程激活的服务器的网络名。remote_agent_server_name 的数据类型为 sysname,默认设置为 NULL。
[@dts_package_name = ] 'dts_package_name'
指定 DTS 包的名称。dts_package_name 的数据类型为 sysname,默认设置为 NULL。例如,若要指定 DTSPub_Package 包,则该参数将是 @dts_package_name = N'DTSPub_Package'。该参数可用于强制订阅。若要向请求订阅添加 DTS 包信息,请使用 sp_addpullsubscription_agent。
[@dts_package_password = ] 'dts_package_password'
指定如果有密码,则密码在包上。dts_package_password 的数据类型为 sysname,默认设置为 NULL,表示包没有密码。
[@dts_package_location = ] 'dts_package_location'
指定包的位置。dts_package_location 的数据类型为 nvarchar(12),默认设置为 DISTRIBUTOR。包的位置可以是 distributor 或 subscriber。
[@distribution_job_name = ] 'distribution_job_name'
仅限内部使用。
0(成功)或 1(失败)
sp_addsubscription 用于快照复制和事务复制。
sp_addsubscription 禁止 ODBC 和 OLE DB 订阅服务器访问下列发布:
另外,如果发布将 allow_queued_tran 选项设置为 true(表示在订阅服务器上启用更改队列,直到它们可在发布服务器上应用),项目中的时间戳列将写成 timestamp 脚本,而此列中的更改将发送到订阅服务器。订阅服务器将生成并更新时间戳列值。对于 ODBC/OLE DB 订阅服务器,如果尝试订阅的发布将 allow_queued_tran 设置为 true 且包含带时间戳列的项目,则 sp_addsubscription 将失败。
如果订阅不使用 DTS 包,则不能订阅已设置为 allow_transformable_subscriptions 的发布。如果来自发布的表需要重新应用于 DTS 订阅和非 DTS 订阅,则必须分别创建两种发布。每种发布针对一种类型的订阅。
只有 sysadmin 固定服务器角色成员或 db_owner 固定数据库角色成员才能执行 sp_addsubscription。对于请求订阅,在发布访问列表中有登录的用户可以执行 sp_addsubscription。
相关文章