sp_changepublication (Transact-SQL)

适用于: SQL Server Azure SQL 托管实例

更改发布的属性。 此存储过程在发布服务器上对发布数据库执行。

Transact-SQL 语法约定

语法

sp_changepublication
    [ [ @publication = ] N'publication' ]
    [ , [ @property = ] N'property' ]
    [ , [ @value = ] N'value' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
    [ , [ @publisher = ] N'publisher' ]
[ ; ]

参数

[ @publication = ] N'publication'

发布的名称。 @publication为 sysname,默认值为 NULL.

[ @property = ] N'property'

要更改的发布属性。 @property为 nvarchar(255),默认值为 NULL.

[ @value = ] N'value'

属性的新值。 @valuenvarchar(255),默认值为 NULL.

下表说明了可以更改的发布属性以及对这些属性值的限制。

属性 价值 说明
allow_anonymous true 可以为给定的发布创建匿名订阅, immediate_sync 还必须创建 true匿名订阅。 无法更改对等发布。
false 无法为给定的发布创建匿名订阅。 无法更改对等发布。
allow_initialize_from_backup true 订阅服务器可以从备份而非初始快照中初始化对此发布的订阅。 对于非 SQL Server 发布,无法更改此属性。
false 订阅服务器必须使用初始快照。 对于非 SQL Server 发布,无法更改此属性。
allow_partition_switch true ALTER TABLE...SWITCH 可以针对已发布的数据库执行语句。 有关详细信息,请参阅复制已分区表和索引
false ALTER TABLE...SWITCH 不能对已发布的数据库执行语句。
allow_pull true 给定的发布允许请求订阅。 对于非 SQL Server 发布,无法更改此属性。
false 给定发布不允许请求订阅。 对于非 SQL Server 发布,无法更改此属性。
allow_push true 给定的发布允许推送订阅。
false 给定发布不允许推送订阅。
allow_subscription_copy true 启用复制订阅该发布的数据库的功能。 对于非 SQL Server 发布,无法更改此属性。
false 禁用复制订阅该发布的数据库的功能。 对于非 SQL Server 发布,无法更改此属性。
alt_snapshot_folder 快照的备用文件夹的位置。
centralized_conflicts true 在发布服务器上存储冲突记录。 只有在没有任何活动订阅的情况下才能更改此属性。 对于非 SQL Server 发布,无法更改此属性。
false 冲突记录同时存储在导致冲突的发布服务器和订阅服务器上。 只有在没有任何活动订阅的情况下才能更改此属性。 对于非 SQL Server 发布,无法更改此属性。
compress_snapshot true 备用快照文件夹中的快照压缩为 .cab 文件格式。 无法压缩默认快照文件夹中的快照。
false 快照未压缩,这是复制的默认行为。
conflict_policy pub wins 更新订阅服务器的冲突解决策略,此时发布服务器入选冲突。 只有在没有活动订阅时才能更改该属性。 Oracle 发布服务器不支持。
sub reinit 要更新订阅服务器,如果出现冲突,则必须重新初始化订阅。 只有在没有活动订阅时才能更改该属性。 Oracle 发布服务器不支持。
sub wins 更新订阅服务器的冲突解决策略,此时订阅服务器入选冲突。 只有在没有活动订阅时才能更改该属性。 Oracle 发布服务器不支持。
conflict_retention 一个 int 值,该值指定冲突保留期(以天为单位)。 默认保持期为 14 天。 0 表示不需要冲突清理。 Oracle 发布服务器不支持。
description 用于说明发布的可选项。
enabled_for_het_sub true 使发布支持非 SQL Server 订阅服务器。 enabled_for_het_sub 当发布有订阅时,无法更改。 在设置为 enabled_for_het_sub true 之前,可能需要执行sp_changepublication以符合以下要求:
- allow_queued_tran 必须为 false
- allow_sync_tran 必须为 false
更改为enabled_for_het_subtrue可能更改现有发布设置。 有关详细信息,请参阅 Non-SQL Server Subscribers。 对于非 SQL Server 发布,无法更改此属性。
false 发布不支持非 SQL Server 订阅服务器。 对于非 SQL Server 发布,无法更改此属性。
enabled_for_internet true 为 Internet 启用发布,此时可以使用文件传输协议 (FTP) 向订阅服务器传输快照文件。 发布的同步文件将放入以下目录中: C:\Program Files\Microsoft SQL Server\MSSQL\Repldata\ftp ftp_address 不能是 NULL。 对于非 SQL Server 发布,无法更改此属性。
false 未为 Internet 启用发布。 对于非 SQL Server 发布,无法更改此属性。
enabled_for_p2p true 发布支持对等复制。 对于非 SQL Server 发布,无法更改此属性。
若要设置为enabled_for_p2ptrue,以下限制适用:
- allow_anonymous 必须是 false
- allow_dts 必须为 false
- allow_initialize_from_backup 必须是 true
- allow_queued_tran 必须为 false
- allow_sync_tran 必须为 false
- enabled_for_het_sub 必须为 false
- independent_agent 必须为 true
- repl_freq 必须为 continuous
- replicate_ddl 必须为 1
false 发布不支持对等复制。 对于非 SQL Server 发布,无法更改此属性。
ftp_address 发布快照文件的可访问 FTP 地址。 对于非 SQL Server 发布,无法更改此属性。
ftp_login 用于连接到 FTP 服务的用户名,允许该值 anonymous 。 对于非 SQL Server 发布,无法更改此属性。
ftp_password 用于连接到 FTP 服务的用户名的密码。 对于非 SQL Server 发布,无法更改此属性。
ftp_port 分发服务器的 FTP 服务端口号。 对于非 SQL Server 发布,无法更改此属性。
ftp_subdirectory 指定如果发布支持使用 FTP 传播快照,则创建快照文件的位置。 对于非 SQL Server 发布,无法更改此属性。
immediate_sync true 每次运行快照代理时创建或重新创建发布的同步文件。 如果订阅之前快照代理完成一次,则订阅服务器能够在订阅后立即接收同步文件。 新订阅将获取最近一次执行快照代理所生成的最新同步文件。 independent_agent 也必须是 true。 有关详细信息,请参阅 即时同步的效果。
false 仅当有新订阅时,才创建同步文件。 在启动并完成快照代理之前,订阅服务器在订阅后无法接收同步文件。
independent_agent true 发布具有专用的分发代理。
false 发布使用共享分发代理,每一对发布/订阅数据库共享一个代理。
p2p_continue_onconflict true 检测到冲突时,分发代理继续处理更改。

警告:建议使用默认值 。FALSE 如果此选项设置为TRUE,则分发代理尝试通过应用来自最原始发起方 ID 的节点中的冲突行来聚合拓扑中的数据。 此方法不能保证收敛。 您应确保检测到冲突之后拓扑保持一致。 有关详细信息,请参阅对等复制中的 “处理冲突” - 对等复制中的冲突检测。
false 检测到冲突时,分发代理将停止处理更改。
post_snapshot_script 指定在初始同步期间应用所有其他复制对象脚本和数据后,分发代理运行的 Transact-SQL 脚本文件的位置。
pre_snapshot_script 指定 Transact-SQL 脚本文件的位置,分发代理在初始同步期间应用所有其他复制的对象脚本和数据之前运行。
publish_to_ActiveDirectory true 此参数已弃用,仅支持脚本的向后兼容性。 不能再将发布信息添加到 Microsoft Active Directory。
false 将发布信息从 Active Directory 上删除。
queue_type sql 使用 SQL Server 存储事务。 只有在没有活动订阅时才能更改该属性。

注意: 停止使用Microsoft消息队列。 为@value指定值msmq会导致错误。
redirected_publisher 可用性组侦听器的名称。 当对等方位于可用性组中时,用于对等复制。 对于非 SQL Server 发布,无法更改此属性。 SQL Server 2019 (15.x) CU 13 中引入。 有关详细信息,请参阅 将一个对等机配置为可用性组 的一部分,或在 可用性组中配置这两个对等方。
repl_freq continuous 发布所有基于日志的事务的输出。
snapshot 仅发布计划的同步事件。
replicate_ddl 1 复制在发布服务器上执行的数据定义语言 (DDL) 语句。 对于非 SQL Server 发布,无法更改此属性。
0 不会复制 DDL 语句。 对于非 SQL Server 发布,无法更改此属性。 使用对等复制时,无法禁用架构更改的复制。
replicate_partition_switch true ALTER TABLE...SWITCH 应将针对已发布数据库执行的语句复制到订阅服务器。 仅当此选项设置为 trueallow_partition_switch,此选项才有效。 有关详细信息,请参阅复制已分区表和索引
false ALTER TABLE...SWITCH 不应将语句复制到订阅服务器。
retention 表示订阅活动的保留期(以小时为单位)。 如果订阅在保留期内未处于活动状态,则会将其删除。
snapshot_in_defaultfolder true 在默认快照文件夹中存储快照文件。 如果 alt_snapshot_folder 还指定了快照文件,快照文件将同时存储在默认位置和备用位置。
false 快照文件存储在指定的 alt_snapshot_folder备用位置。
status active 发布创建后,发布数据立即可用于订阅服务器。 Oracle 发布服务器不支持。
inactive 创建发布时,发布数据不适用于订阅服务器。 Oracle 发布服务器不支持。
sync_method native 同步订阅时,使用所有表的本机模式大容量复制输出。
character 同步订阅时,使用所有表的字符模式大容量复制输出。
concurrent 使用所有表的本机模式大容量复制程序输出,但在快照生成过程中不会锁定表。 对快照复制无效。
concurrent_c 使用所有表的字符模式大容量复制程序输出,但在快照生成过程中不会锁定表。 对快照复制无效。
taskid 此属性已弃用,不再受支持。
allow_drop true 启用 DROP TABLE 对属于事务复制的项目的 DLL 支持。 支持的最低版本:SQL Server 2014 (12.x) Service Pack 2 或更高版本和 SQL Server 2016 (13.x) Service Pack 1 或更高版本。 有关详细信息,请参阅 KB 3170123
false(默认值) DROP TABLE 属于事务复制的项目禁用 DLL 支持。
NULL(默认值) 返回@property支持的值列表。

[ @force_invalidate_snapshot = ] force_invalidate_snapshot

确认此存储过程执行的操作可能会使现有快照失效。 @force_invalidate_snapshot为,默认值为 0.

  • 0 指定对项目所做的更改不会导致快照无效。 如果该存储过程检测到更改确实需要新的快照,则会发生错误,并且不进行任何更改。
  • 1 指定对项目所做的更改可能会导致快照无效。 如果有现有订阅需要新快照,该值授予将现有快照标记为过时快照的权限,并生成新快照。

有关更改时需要生成新快照的属性,请参阅“备注”部分。

[ @force_reinit_subscription = ] force_reinit_subscription

确认此存储过程所执行的操作是否需要重新初始化现有订阅。 @force_reinit_subscription为,默认值为 0.

  • 0 指定对项目所做的更改不会导致重新初始化订阅。 如果该存储过程检测到更改将需要重新初始化现有订阅,则会发生错误,并且不进行任何更改。
  • 1 指定对项目所做的更改会导致现有订阅重新初始化,并授予订阅重新初始化的权限。

[ @publisher = ] N'publisher'

指定非 SQL Server 发布服务器。 @publisher为 sysname,默认值为 NULL.

更改 SQL Server 发布服务器上的项目属性时,不应使用@publisher。

返回代码值

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

注解

sp_changepublication 用于快照复制和事务复制。

更改以下任何属性后,必须生成新的快照,并且必须为 @force_invalidate_snapshot 参数指定值。1

  • alt_snapshot_folder
  • compress_snapshot
  • enabled_for_het_sub
  • ftp_address
  • ftp_login
  • ftp_password
  • ftp_port
  • ftp_subdirectory
  • post_snapshot_script
  • pre_snapshot_script
  • snapshot_in_defaultfolder
  • sync_mode

若要使用 publish_to_active_directory 参数列出 Active Directory 中的发布对象,必须在 Active Directory 中创建 SQL Server 对象。

即时同步的效果

当立即同步处于打开状态时,即使没有订阅,也会在生成初始快照后立即跟踪日志中的所有更改。 当客户使用备份添加新对等节点时,将使用记录的更改。 还原备份后,对等方与执行备份后发生的任何其他更改同步。 由于命令在分发数据库中被跟踪,因此同步逻辑可以查看上次备份的 LSN,并将其用作起点,知道该命令在最大保留期内执行备份时可用。 (最小保留期的默认值为 0 小时,最大保留期为 24 小时。

当立即同步关闭时,更改至少保留最小保留期,并立即清理已复制的所有事务。 如果立即同步关闭并配置了默认保留期,则可能是在清理备份后所需的更改,并且不会正确初始化新的对等节点。 剩下的唯一选项是使拓扑静止。 将立即同步设置为打开可提供更大的灵活性,并且是用于 P2P 复制的推荐设置。

示例

DECLARE @publication AS sysname
SET @publication = N'AdvWorksProductTran' 

-- Turn off DDL replication for the transactional publication.
USE [AdventureWorks2022]
EXEC sp_changepublication 
  @publication = @publication, 
  @property = N'replicate_ddl', 
  @value = 0
GO

权限

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