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'
要更改的发布属性。property 的数据类型为 nvarchar(255)。[ @value = ] 'value'
新属性值。value 的数据类型为 nvarchar(255),默认值为 NULL。下表说明了可以更改的发布属性以及对这些属性值的限制。
属性
值
说明
allow_anonymous
True
可为给定发布创建匿名订阅,并且 immediate_sync 必须为 true。对于对等发布,无法更改此属性。
False
不能为给定发布创建匿名订阅。对于对等发布,无法更改此属性。
allow_initialize_from_backup
True
订阅服务器可以从备份而非初始快照中初始化对此发布的订阅。不能为非 MicrosoftSQL 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 (Transact-SQL) 以满足下列要求:
allow_queued_tran 必须为 False。
allow_sync_tran 必须为 False。
将 enabled_for_het_sub 更改为 true 可能会更改现有发布设置。有关详细信息,请参阅非 SQL Server 订阅服务器。对于非 SQL Server 发布,无法更改此属性。
False
发布不支持非 SQL Server 订阅服务器。对于非 SQL Server 发布,无法更改此属性。
enabled_for_internet
True
为 Internet 启用发布,此时可以使用文件传输协议 (FTP) 向订阅服务器传输快照文件。发布的同步文件位于以下目录中:C:\Program Files\Microsoft SQL Server\MSSQL\Repldata\ftp。ftp_address 不能为空。对于非 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 必须为 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 值将导致错误。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 语句复制到订阅服务器。
retention
数据类型为 int,它表示订阅活动的保持期(小时)。如果订阅在保持期内不活动,则将其删除。
snapshot_in_defaultfolder
True
在默认快照文件夹中存储快照文件。如果还指定了 alt_snapshot_folder,则快照文件同时存储在默认和备用位置。
False
在 alt_snapshot_folder 指定的替代位置中存储快照文件。
status
active
发布创建后,发布数据立即可用于订阅服务器。Oracle 发布服务器不支持。
inactive
发布创建后,发布数据不可用于订阅服务器。Oracle 发布服务器不支持。
sync_method
native
同步订阅时,使用所有表的本机模式大容量复制输出。
character
同步订阅时,使用所有表的字符模式大容量复制输出。
concurrent
在快照生成期间生成所有表的本机模式大容量复制程序输出,但不锁定表。对快照复制无效。
concurrent_c
在快照生成期间生成所有表的字符模式大容量复制程序输出,但不锁定表。对快照复制无效。
taskid
不推荐使用该属性,也不再支持该属性。
NULL(默认值)
返回 property 所支持值的列表。
[ @force_invalidate_snapshot = ] force_invalidate_snapshot
确认此存储过程所执行的操作是否会使现有快照失效。force_invalidate_snapshot 的数据类型为 bit,默认值为 0。0 指定对项目所做的更改不会导致快照失效。如果该存储过程检测到更改确实需要新的快照,则会发生错误,并且不进行任何更改。
1 指定更改项目会导致快照无效。如果有现有订阅需要新快照,该值授予将现有快照标记为过时快照的权限,并生成新快照。
有关在更改时需要生成新快照的属性,请参阅“备注”部分。
[@force_reinit_subscription = ] force_reinit_subscription
确认此存储过程所执行的操作是否需要重新初始化现有订阅。force_reinit_subscription 的数据类型为 bit,默认值为 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 对象。
示例
DECLARE @publication AS sysname
SET @publication = N'AdvWorksProductTran'
-- Turn off DDL replication for the transactional publication.
USE [AdventureWorks]
EXEC sp_changepublication
@publication = @publication,
@property = N'replicate_ddl',
@value = 0
GO
权限
只有 sysadmin 固定服务器角色成员或 db_owner 固定数据库角色成员可以执行 sp_changepublication。