sp_changepublication (Transact-SQL)

适用于:SQL ServerAzure SQL 托管实例

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

Transact-SQL 语法约定

语法

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

参数

[ @publication = ] 'publication' 发布的名称。 publicationsysname,默认值为 NULL。

[ @property = ] 'property' 要更改的发布属性。 属性nvarchar(255)。

[ @value = ] 'value' 新属性值。 值为 nvarchar(255),默认值为 NULL。

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

属性 描述
allow_anonymous true 可以为给定的发布创建匿名订阅, immediate_sync 也必须 为 true。 对于对等发布,无法更改此属性。
false 不能为给定发布创建匿名订阅。 对于对等发布,无法更改此属性。
allow_initialize_from_backup true 订阅服务器可以从备份而非初始快照中初始化对此发布的订阅。 对于非 Microsoft 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 酒吧赢了 更新订阅服务器的冲突解决策略,此时发布服务器入选冲突。 只有在没有活动订阅时才能更改该属性。 Oracle 发布服务器不支持。
sub reinit 要更新订阅服务器,如果出现冲突,则必须重新初始化订阅。 只有在没有活动订阅时才能更改该属性。 Oracle 发布服务器不支持。
sub wins 更新订阅服务器的冲突解决策略,此时订阅服务器入选冲突。 只有在没有活动订阅时才能更改该属性。 Oracle 发布服务器不支持。
conflict_retention 指定冲突保留期的 int (以天为单位)。 默认保持期为 14 天。 0 表示不需要冲突清理。 Oracle 发布服务器不支持。
说明 用于说明发布的可选项。
enabled_for_het_sub true 使发布支持非 SQL Server 订阅服务器。 当发布有订阅时,无法更改enabled_for_het_sub 。 在将enabled_for_het_sub设置为 true 之前,可能需要执行复制存储过程(Transact-SQL)以符合以下要求:
- allow_queued_tran 必须为 false
- allow_sync_tran必须为 false
enabled_for_het_sub 更改为 true 可能会更改现有发布设置。 有关详细信息,请参阅 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_p2p设置为 true,可应用以下限制:
- 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必须是连续的。
- 副本 (replica)te_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。 有关immediate_sync的其他信息,请参阅下面的说明。
false 仅当有新订阅时,才创建同步文件。 在启动并完成快照代理之前,订阅服务器无法在订阅后接收同步文件。
independent_agent true 发布具有专用的分发代理。
false 发布使用共享分发代理,每一对发布/订阅数据库共享一个代理。
p2p_continue_onconflict true 检测到冲突时,分发代理继续处理更改。
警告:建议使用默认值 。FALSE 如果此选项设置为TRUE,则分发代理尝试通过应用具有最高发起方 ID 的节点中的冲突行来聚合拓扑中的数据。 此方法不保证将会收敛。 您应确保检测到冲突之后拓扑保持一致。 有关详细信息,请参阅 Conflict Detection in Peer-to-Peer Replication中的“处理冲突”。
false 检测到冲突时,分发代理将停止处理更改。
post_snapshot_script 指定在初始同步期间应用所有其他副本 (replica)对象脚本和数据之后运行分发代理的 Transact-SQL 脚本文件的位置。
pre_snapshot_script 指定在初始同步期间应用所有其他副本 (replica)对象脚本和数据之前运行分发代理的 Transact-SQL 脚本文件的位置。
publish_to_ActiveDirectory true 已不推荐使用该参数,支持该参数只是为了让脚本能够向后兼容。 不能再将发布信息添加到 Microsoft Active Directory。
false 将发布信息从 Active Directory 上删除。
queue_type sql 使用 SQL Server 存储事务。 只有在没有活动订阅时才能更改该属性。

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

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

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

[@force_reinit_subscription = ] force_reinit_subscription
确认此存储过程执行的操作可能需要重新初始化现有订阅。 force_reinit_subscription是一个默认值为 0 的位

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

[ @publisher = ] 'publisher' 指定非 SQL Server 发布服务器。 publishersysname,默认值为 NULL。

注意

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

返回代码值

0 (成功) 或 1 (失败)

注解

sp_changepublication用于快照 副本 (replica)和事务副本 (replica)。

更改以下任何属性后,必须生成新的快照,并且必须为 force_invalidate_快照 参数指定值 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 小时。

当立即同步关闭时,更改至少保留最小保留期,并立即清理已副本 (replica)的所有事务。 如果已关闭立即同步并为其配置了默认保持期,很可能会清理在进行备份后所需要的更改,并且不会正确初始化新的对等节点。 剩下的唯一选项是使拓扑静止。 将立即同步设置为打开可提供更大的灵活性,并且是用于 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

另请参阅

查看和修改发布属性
更改发布和项目属性
sp_addpublication (Transact-SQL)
sp_droppublication (Transact-SQL)
sp_helppublication (Transact-SQL)
复制存储过程 (Transact-SQL)