sp_attachsubscription (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库

将现有的订阅数据库附加到任何订阅服务器。 此存储过程在数据库的新订阅服务器上 master 执行。

重要

不推荐使用此功能,该功能将在未来版本中删除。 此功能不应在新开发工作中使用。 对于使用参数化筛选器分区的合并发布,建议您使用分区快照的新功能,这些功能可简化大量订阅的初始化。 有关详细信息,请参阅 为包含参数化筛选器的合并发布创建快照。 对于未分区的发布,可以使用备份初始化订阅。 有关详细信息,请参阅 初始化事务订阅(不使用快照)中手动初始化订阅。

Transact-SQL 语法约定

语法

sp_attachsubscription
    [ @dbname = ] N'dbname'
    , [ @filename = ] N'filename'
    [ , [ @subscriber_security_mode = ] subscriber_security_mode ]
    [ , [ @subscriber_login = ] N'subscriber_login' ]
    [ , [ @subscriber_password = ] N'subscriber_password' ]
    [ , [ @distributor_security_mode = ] distributor_security_mode ]
    [ , [ @distributor_login = ] N'distributor_login' ]
    [ , [ @distributor_password = ] N'distributor_password' ]
    [ , [ @publisher_security_mode = ] publisher_security_mode ]
    [ , [ @publisher_login = ] N'publisher_login' ]
    [ , [ @publisher_password = ] N'publisher_password' ]
    [ , [ @job_login = ] N'job_login' ]
    [ , [ @job_password = ] N'job_password' ]
    [ , [ @db_master_key_password = ] N'db_master_key_password' ]
[ ; ]

参数

[ @dbname = ] N'dbname'

指定目标订阅数据库的名称。 @dbname为 sysname,无默认值。

[ @filename = ] N'filename'

主数据文件的名称和物理位置(.mdf)。 @filename为 nvarchar(260),没有默认值。

[ @subscriber_security_mode = ] subscriber_security_mode

同步时连接到订阅服务器时要使用的订阅服务器的安全模式。 @subscriber_security_mode为 int,默认值为 NULL.

注意

必须使用 Windows 身份验证。 如果 @subscriber_security_mode 不是 1 (Windows 身份验证),则会收到错误。

[ @subscriber_login = ] N'subscriber_login'

同步时连接到订阅服务器的订阅服务器时要使用的订阅服务器登录名。 @subscriber_login为 sysname,默认值为 NULL.

注意

此参数已弃用,并维护脚本的向后兼容性。 如果未指定@subscriber_security_mode1并且指定了@subscriber_login,则会收到错误。

[ @subscriber_password = ] N'subscriber_password'

订阅服务器密码。 @subscriber_password为 sysname,默认值为 NULL.

注意

此参数已弃用,并维护脚本的向后兼容性。 如果未指定@subscriber_security_mode1,并且指定了@subscriber_password,则会收到错误。

[ @distributor_security_mode = ] distributor_security_mode

同步时连接到分发服务器时要使用的安全模式。 @distributor_security_mode为 int,默认值为 1.

  • 0 指定 SQL Server 身份验证
  • 1指定Windows 身份验证

请尽可能使用 Windows 身份验证。

[ @distributor_login = ] N'distributor_login'

同步时连接到分发服务器的分发服务器时要使用的分发服务器登录名。 @distributor_login为 sysname,默认值为 NULL. 如果@distributor_security_mode设置为0@distributor_login,则需要@distributor_login

[ @distributor_password = ] N'distributor_password'

分发服务器密码。 @distributor_password为 sysname,默认值为 NULL. 如果@distributor_security_mode设置为 0,则需要@distributor_password 。 @distributor_password的值必须短于 120 个 Unicode 字符。

重要

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

[ @publisher_security_mode = ] publisher_security_mode

同步时连接到发布服务器时要使用的安全模式。 @publisher_security_mode为 int,默认值为 1.

  • 如果 0指定 SQL Server 身份验证。
  • 如果 1指定 Windows 身份验证。 请尽可能使用 Windows 身份验证。

[ @publisher_login = ] N'publisher_login'

同步时连接到发布服务器时要使用的登录名。 @publisher_login为 sysname,默认值为 NULL.

[ @publisher_password = ] N'publisher_password'

连接到发布服务器时使用的密码。 @publisher_password为 sysname,默认值为 NULL. @publisher_password的值必须短于 120 个 Unicode 字符。

重要

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

[ @job_login = ] N'job_login'

运行代理的 Windows 帐户的登录名。 @job_login为 nvarchar(257),没有默认值。 此 Windows 帐户总是用于与分发服务器建立代理连接。

[ @job_password = ] N'job_password'

运行代理的 Windows 帐户的密码。 @job_password为 sysname,默认值为 NULL. job_password的值必须短于 120 个 Unicode 字符。

重要

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

[ @db_master_key_password = ] N'db_master_key_password'

用户定义的数据库主密钥(DMK)的密码。 @db_master_key_password为 nvarchar(524),默认值为 NULL. 如果未 指定@db_master_key_password ,则会删除现有 DMK 并重新创建。

重要

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

返回代码值

0(成功)或 1(失败)。

注解

sp_attachsubscription用于快照 副本 (replica)、事务副本 (replica)和合并副本 (replica)。

如果发布保留期已过期,则订阅无法附加到发布。 如果指定了具有已用保留期的订阅,则附加或首次同步订阅时会出现错误。 将忽略具有发布保留期 0 (永不过期)的发布。

权限

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