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

    订阅服务器可以从备份而非初始快照中初始化对此发布的订阅。 不能为非 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 之前,最好执行 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 不能为 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 必须为 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。 有关 immediate_sync 的其他信息,请参阅下面的“备注”部分。

     

    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 存储事务。 只有在没有活动订阅时才能更改该属性。

    > [!NOTE]
    > <P>不再支持使用 Microsoft 消息队列。为 value 指定 <STRONG>msmq</STRONG> 值将导致错误。</P>
    

    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 对象。

    立即同步的影响

    如果打开立即同步,则在生成初始快照后,即使没有订阅,也会立即跟踪日志中的所有更改。 在客户使用备份添加新的对等节点时,将使用记录的更改。还原备份后,将使用进行备份后发生的任何其他更改同步对等方。由于会在分发数据库中跟踪命令,因此同步逻辑可以查看上次备份的 LSN,并就此了解到该命令将可用(如果在最大保持期内进行了备份)。 (最小保持期的默认值为 0 小时,最大保持期的默认值为 24 小时。)

    关闭立即同步时,将至少在最小保持期内保留更改,并对已复制的所有事务立即清除更改。 如果已关闭立即同步并为其配置了默认保持期,很可能会清理在进行备份后所需要的更改,并且不会正确初始化新的对等节点。 剩下的唯一选项是使拓扑静止。 将立即同步设置为打开可提供更大的灵活性,并且是用于 P2P 复制的推荐设置。

    示例

    DECLARE @publication AS sysname
    SET @publication = N'AdvWorksProductTran' 
    
    -- Turn off DDL replication for the transactional publication.
    USE [AdventureWorks2012]
    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)

    概念

    查看和修改发布属性

    更改发布和项目属性