适用范围:SQL Server
更改合并发布的属性。 此存储过程在发布服务器上对发布数据库执行。
语法
sp_changemergepublication
    [ @publication = ] N'publication'
    [ , [ @property = ] N'property' ]
    [ , [ @value = ] N'value' ]
    [ , [ @force_invalidate_snapshot = ] force_invalidate_snapshot ]
    [ , [ @force_reinit_subscription = ] force_reinit_subscription ]
[ ; ]
参数
[ @publication = ] N'publication'
发布的名称。 @publication 为 sysname,无默认值。
[ @property = ] N'property'
给定发布的要更改的属性。 @property 是 sysname,可以是下表中列出的值之一。
[ @value = ] N'value'
指定属性的新值。 @value 为 nvarchar(255),默认值为 NULL.
,可以是下表中列出的值之一。
下表描述了可更改的发布的属性,并描述了对这些属性的值的限制。
| 属性 | 价值 | 说明 | 
|---|---|---|
| allow_anonymous | true | 允许匿名订阅。 | 
| false | 不允许匿名订阅。 | |
| allow_partition_realignment | true | 将删除指令发送到订阅服务器,删除不再属于订阅服务器分区的数据以反映分区更改结果。 这是默认行为。 | 
| false | 旧分区中的数据保留在订阅服务器上,其中对发布服务器上的此数据所做的更改不会复制到此订阅服务器。 相反,在订阅服务器上进行的更改将复制到发布服务器。 此属性用于保留旧分区中的订阅数据,以便满足用户访问历史数据的需要。 | |
| allow_pull | true | 给定的发布允许请求订阅。 | 
| false | 给定发布不允许请求订阅。 | |
| allow_push | true | 给定的发布允许推送订阅。 | 
| false | 给定发布不允许推送订阅。 | |
| allow_subscriber_initiated_snapshot | true | 订阅服务器可以启动快照进程。 | 
| false | 订阅服务器无法启动快照过程。 | |
| allow_subscription_copy | true | 可以复制订阅此发布的订阅数据库。 | 
| false | 无法复制订阅此发布的订阅数据库。 | |
| allow_synctoalternate | true | 允许备用同步伙伴与此发布服务器进行同步。 | 
| false | 不允许备用同步合作伙伴与此发布服务器同步。 | |
| allow_web_synchronization | true | 可以通过 HTTPS 同步订阅。 | 
| false | 无法通过 HTTPS 同步订阅。 | |
| alt_snapshot_folder | 指定快照的备用文件夹的位置。 | |
| automatic_reinitialization_policy | 1 | 在重新初始化订阅之前,从订阅服务器上载更改。 | 
| 0 | 不先上载更改就重新初始化订阅。 | |
| centralized_conflicts | true | 所有冲突记录都存储在发布服务器上。 如果更改此属性,则必须重新初始化现有订阅服务器。 | 
| false | 冲突记录存储在冲突解决中落选的服务器上。 如果更改此属性,则必须重新初始化现有订阅服务器。 | |
| compress_snapshot | true | 备用快照文件夹中的快照将压缩为 CAB 格式。 无法压缩默认快照文件夹中的快照。 若要更改此属性,则需要新的快照。 | 
| false | 默认情况下,不会压缩快照。 若要更改此属性,则需要新的快照。 | |
| conflict_logging | publisher | 在发布服务器上存储冲突记录。 | 
| subscriber | 在导致冲突的订阅服务器上存储冲突记录。 SQL Server Compact 订阅服务器不支持。 | |
| both | 在发布服务器和订阅服务器上都存储冲突记录。 | |
| conflict_retention | 一个 int ,指定保留期(以天为单位),其中保留冲突。 0设置为conflict_retention意味着不需要冲突清理。 | |
| description | 对发布的说明。 | |
| dynamic_filters | true | 根据动态子句筛选发布。 | 
| false | 发布不会动态筛选。 | |
| enabled_for_internet | true | 为 Internet 启用发布。 可以使用文件传输协议 (FTP) 将快照文件传输到订阅服务器。 发布的同步文件将 C:\Program Files\Microsoft SQL Server\MSSQL\Repldata\ftp放入目录中。 | 
| false | 未为 Internet 启用发布。 | |
| ftp_address | 分发服务器的 FTP 服务的网络地址。 指定存储发布快照文件的位置。 | |
| ftp_login | 用于连接到 FTP 服务的用户名。 | |
| ftp_password | 用于连接到 FTP 服务的用户密码。 | |
| ftp_port | 分发服务器的 FTP 服务的端口号。 指定存储发布快照文件的 FTP 站点的 TCP 端口号。 | |
| ftp_subdirectory | 指定当发布支持使用 FTP 传播快照时用于创建快照文件的位置。 | |
| generation_leveling_threshold | int | 指定一代中包含的更改数。 生成是传递到发布服务器或订阅服务器的更改的集合。 | 
| keep_partition_changes | true | 对同步进行优化,只有所包含的一些行位于已更改分区中的订阅服务器才会受影响。 若要更改此属性,则需要新的快照。 | 
| false | 同步未优化,在分区中的数据发生更改时,会验证发送到订阅服务器的分区。 若要更改此属性,则需要新的快照。 | |
| max_concurrent_merge | 一个 int ,表示可针对发布运行的并发合并进程的最大数目。 如果为 0,则没有限制。 如果计划同时运行多个合并进程,则会将多余的作业放入队列中,直到当前lmerge 进程完成。 | |
| max_concurrent_dynamic_snapshots | 一个 int ,表示生成可同时针对使用参数化行筛选器的合并发布运行的筛选数据快照的最大快照会话数。 如果 0存在限制,则没有限制。 如果计划同时执行的快照进程数超出这一数值,则多出的作业将被放到队列中等待,直到当前运行的合并进程完成。 | |
| post_snapshot_script | 指定指向文件位置的 .sql指针。 在初始同步过程中应用了所有其他复制的对象脚本和数据之后,分发代理或合并代理才运行快照后脚本。 若要更改此属性,则需要新的快照。 | |
| pre_snapshot_script | 指定指向文件位置的 .sql指针。 合并代理在订阅服务器上应用快照时,在复制的任何对象脚本之前运行预快照脚本。 若要更改此属性,则需要新的快照。 | |
| publication_compatibility_level | 100RTM | SQL Server 2008 (10.0.x) | 
| 90RTM | SQL Server 2005 (9.x) | |
| publish_to_activedirectory | true | 此参数已弃用,并维护脚本的向后兼容性。 您不再能够向 Active Directory 中添加发布信息。 | 
| false | 将发布信息从 Active Directory 上删除。 | |
| replicate_ddl | 1 | 复制在发布服务器上执行的数据定义语言 (DDL) 语句。 | 
| 0 | 不会复制 DDL 语句。 | |
| retention | 一个 int ,表示保存给定出版物的更改的 retention_period_unit单位数。 如果订阅未在保留期内同步,并且其收到的挂起更改已被分发服务器的清理操作删除,则订阅将过期,并且必须重新初始化。 允许的最大保持期为当前日期到 9999 年 12 月 31 日之间的天数。注意: 合并发布的保留期为 24 小时宽限期,以适应不同时区的订阅服务器。 | |
| retention_period_unit | day | 按天指定保持期。 | 
| week | 按周指定保持期。 | |
| month | 按月指定保持期。 | |
| year | 按年指定保持期。 | |
| snapshot_in_defaultfolder | true | 在默认快照文件夹中存储快照文件。 | 
| false | 快照文件存储在由 alt_snapshot_folder指定的备用位置。 此组合指定将快照文件同时存储在默认位置和备用位置中。 | |
| snapshot_ready | true | 用于发布的快照已准备就绪。 | 
| false | 发布快照不可用。 | |
| status | active | 发布处于活动状态。 | 
| inactive | 发布处于非活动状态。 | |
| sync_mode | native或bcp native | 将所有表的本机模式大容量复制程序输出用于初始快照。 | 
| character或 bcp character | 所有表的字符模式大容量复制程序输出用于初始快照,这是所有非 SQL Server 订阅服务器所必需的。 | |
| use_partition_groups注意: 使用分区组后,如果要还原为使用 setupbelongs并设置use_partition_groups=false,changemergearticle则拍摄快照后可能无法正确反映。 快照生成的触发器符合分区组。此方案的解决方法是将状态设置为“非活动”,修改状态 use_partition_groups,然后将状态设置为“活动”。 | true | 发布使用预计算分区。 | 
| false | 发布不使用预计算分区。 | |
| validate_subscriber_info | 列出用于检索订阅服务器信息的函数。 然后,验证用于订阅服务器的动态筛选条件,以验证信息是否一致地分区。 | |
| web_synchronization_url | 用于 Web 同步的 Internet URL 的默认值。 | |
| 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表示对发布重新初始化现有订阅的更改,并授予订阅重新初始化的权限。
有关更改的属性,请参阅“备注”部分,这些属性要求重新初始化所有现有订阅。
返回代码值
0(成功)或 1(失败)。
注解
sp_changemergepublication 用于合并复制。
更改以下属性需要生成新的快照。 必须为@force_invalidate_snapshot参数指定值。1 
- alt_snapshot_folder
- compress_snapshot
- dynamic_filters
- ftp_address
- ftp_login
- ftp_password
- ftp_port
- ftp_subdirectory
- post_snapshot_script
- publication_compatibility_level- 80SP3(仅)
- pre_snapshot_script
- snapshot_in_defaultfolder
- sync_mode
- use_partition_groups
若要更改下列属性,需要重新初始化现有订阅。 必须为@force_reinit_subscription参数指定值。1 
- dynamic_filters
- validate_subscriber_info
若要使用 publish_to_active_directory列出 Active Directory 的发布对象,必须在 Active Directory 中创建 SQL Server 对象。
示例
DECLARE @publication AS sysname;
SET @publication = N'AdvWorksSalesOrdersMerge'; 
-- Disable DDL replication for the publication.
USE [AdventureWorks2022]
EXEC sp_changemergepublication 
  @publication = @publication, 
  @property = N'replicate_ddl', 
  @value = 0,
  @force_invalidate_snapshot = 0, 
  @force_reinit_subscription = 0;
GO
权限
只有 sysadmin 固定服务器角色的成员或db_owner固定数据库角色的成员才能执行sp_changemergepublication。