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 | 酒吧赢了 | 更新订阅服务器的冲突解决策略,此时发布服务器入选冲突。 只有在没有活动订阅时才能更改该属性。 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 发布服务器。 publisher 为 sysname,默认值为 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)
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈