sp_changepublication (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'
发布的名称。 publication 为 sysname,默认值为 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 | 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 之前,可能需要 (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 必须是 连续的。 - 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。 有关 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 | 指定在初始同步期间应用所有其他复制对象脚本和数据后,分发代理运行的 Transact-SQL 脚本文件的位置。 | |
pre_snapshot_script | 指定在初始同步期间应用所有其他复制对象脚本和数据之前,分发代理运行的 Transact-SQL 脚本文件的位置。 | |
publish_to_ActiveDirectory | true | 已不推荐使用该参数,支持该参数只是为了让脚本能够向后兼容。 无法再将发布信息添加到 Microsoft Active Directory。 |
false | 将发布信息从 Active Directory 上删除。 | |
queue_type | sql | 使用 SQL Server 存储事务。 只有在没有活动订阅时才能更改该属性。 注意:已停止对使用 Microsoft 消息队列的支持。 将值 指定为 msmq的值 会导致错误。 |
redirected_publisher | 可用性组侦听器的名称。 当对等方位于可用性组中时,用于对等复制。 对于非SQL Server发布,不能更改此属性。 在 2019 SQL Server (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 语句复制到订阅服务器。 仅当 allow_partition_switch 设置为 TRUE 时,此选项才有效。 有关详细信息,请参阅复制已分区表和索引。 |
false | ALTER TABLE...SWITCH 语句不应复制到订阅服务器。 | |
保留 | int 表示订阅活动的保留期(以小时为单位)。 如果订阅在保持期内不活动,则将其删除。 | |
snapshot_in_defaultfolder | true | 在默认快照文件夹中存储快照文件。 如果还指定 了alt_snapshot_folder,则快照文件将存储在默认位置和备用位置。 |
false | 快照文件存储在 alt_snapshot_folder 指定的备用位置中。 | |
status | active | 发布创建后,发布数据立即可用于订阅服务器。 Oracle 发布服务器不支持。 |
inactive | 发布创建后,发布数据不可用于订阅服务器。 Oracle 发布服务器不支持。 | |
sync_method | native | 同步订阅时,使用所有表的本机模式大容量复制输出。 |
character | 同步订阅时,使用所有表的字符模式大容量复制输出。 | |
并发 | 在快照生成期间生成所有表的本机模式大容量复制程序输出,但不锁定表。 对快照复制无效。 | |
concurrent_c | 在快照生成期间生成所有表的字符模式大容量复制程序输出,但不锁定表。 对快照复制无效。 | |
taskid | 不推荐使用该属性,也不再支持该属性。 | |
allow_drop | true | 为属于事务复制的一部分的项目启用 DROP TABLE DLL 支持。 支持的最低版本:SQL Server 2014 (12.x) Service Pack 2 或更高版本和 2016 SQL Server 2016 (13.x) Service Pack 1 或更高版本。 其他参考: KB 3170123 |
false | 禁用 DROP TABLE 对属于事务复制的项目的 DLL 支持。 这是此属性的 默认值 。 |
|
NULL (默认) | 返回 属性的受支持值列表。 |
[ @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 = ] '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。
另请参阅
查看和修改发布属性
更改发布和项目属性
sp_addpublication (Transact-SQL)
sp_droppublication (Transact-SQL)
sp_helppublication (Transact-SQL)
复制存储过程 (Transact-SQL)