sp_changepublication (Transact-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'
    发布的名称。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