SQL Server 2005 复制中的行为更改

更新日期: 2006 年 4 月 14 日

此主题说明 Microsoft SQL Server 2000 中存在的复制功能中的行为更改。有关复制功能增强的信息,请参阅复制增强

ms143733.note(zh-cn,SQL.90).gif注意:
在“安装帮助”文档和 SQL Server 2005 联机丛书中可以查看本主题。对于“安装帮助”文档中显示为粗体文本的主题链接来说,所指向的主题仅在联机丛书中提供。

影响所有复制类型的行为更改

下列更改影响所有复制类型。

功能 说明

复制代理安全模式

在 SQL Server 的早期版本中,默认情况下,代理在 SQL Server 代理服务帐户的上下文中运行。Microsoft SQL Server 2005 可以精细地控制每一个帐户,在其中复制代理运行并建立对数据库和其他资源的 Microsoft Windows 集成连接;对每一个代理,可以指定一个不同的帐户。有关详细信息,请参阅复制的安全注意事项复制代理安全性模式。有关此更改如何影响升级的信息,请参阅升级复制数据库的“新复制代理安全模式”部分和 SQL Server 2005 复制中的重大更改

Windows 同步管理器

在 SQL Server 的早期版本中,默认情况下启用以同步管理器同步订阅的功能。在 SQL Server 2005 中,如果要使用同步管理器,必须显式启用此选项。有关详细信息,请参阅如何使用 Windows 同步管理器同步订阅(Windows 同步管理器)

复制冲突查看器

在 SQL Server 2000 中,复制冲突查看器被打包,以用于重新分发。在 SQL Server 2005 中,不对该查看器进行单独打包。若要在应用程序中包含复制冲突查看器,必须在部署了该应用程序的计算机中安装 Microsoft .NET Framework 2.0,还必须将若干文件复制到该计算机。有关详细信息,请参阅升级顾问帮助中的“其他复制升级问题”。有关升级顾问的详细信息,请参阅使用升级顾问来准备升级

架构选项更改

通过架构选项,可以指定复制与表关联的属性和对象(如索引和约束)的方式。在 SQL Server 2005 中,许多架构选项的行为都发生了更改。本主题的下一部分提供详细信息。

架构选项行为更改

下表总结了 SQL Server 2005 中的架构选项更改。

ms143733.note(zh-cn,SQL.90).gif注意:
如果已在 SQL Server 2000 中设置了 0x8000 架构选项,则在升级到 SQL Server 2005 期间该选项将被禁用。对于架构选项 0x100x40,在 SQL Server 2005 中复制可能要比在 SQL Server 2000 中复制创建的索引多。
选项 如果在 SQL Server 2000 中设置该选项,其行为如何 如果在 SQL Server 2005 中设置该选项,其行为如何

0x80

创建约束或索引。如果还启用了选项 0x8000,则创建的主键将作为包含索引的约束。如果没有启用选项 0x8000,则仅对主键列创建索引。

在订阅服务器中创建主键约束。此外还会复制所有与约束有关的索引,即使没有启用选项 0x100x40(这些选项控制其他情况下的索引创建)。

0x4000

创建约束或索引。如果还启用了选项 0x8000,则创建的唯一约束将作为包含索引的约束。如果没有启用选项 0x8000,则仅对该列创建索引。

在订阅服务器中创建所有的唯一约束。此外还会复制所有与约束有关的索引,即使没有启用选项 0x100x40(这些选项控制其他情况下的索引创建)。

0x8000

如果还指定了 0x800x4000,则将同时创建主键约束和唯一约束。如果没有指定其中的任何一个选项,则选项 0x8000 不起任何作用。

该选项不起任何作用。

事务复制的行为更改

下列更改会影响事务复制。

功能 说明

订阅服务器对象所有权

使用 SQL Server 2005 新建发布向导创建发布时,默认情况下,在订阅服务器上创建的对象的所有者即为发布服务器上相应对象的所有者的值。在早期版本中,在订阅服务器上创建对象的过程中不指定所有者;它的默认值是与用以连接到订阅服务器的分发代理帐户相关联的所有者。对于存储过程 sp_addarticle (Transact-SQL) 来说,该行为保持不变。

可更新订阅安全模式

sp_link_publication@security_mode 参数控制即时更新订阅的触发器如何在发布服务器上执行调用。在 SQL Server 2005 中,此参数的选项有:

  • 0:使用 SQL Server 身份验证,以存储过程中指定的登录名作为登录名和密码。
  • 1:使用在订阅服务器上进行更改的用户的安全上下文(SQL Server 身份验证或 Windows 集成身份验证)。
  • 2:使用现有的、用户定义的链接服务器登录名。

在 SQL Server 的早期版本中,选项 0 用于指定从订阅服务器到发布服务器(而不是到链接服务器)的动态远程过程调用 (RPC)。

合并复制的行为更改

下列更改影响合并复制。

功能

说明

发布兼容级别

在 SQL Server 的早期版本中,如果启用了需要更高兼容级别的功能,则兼容级别会自动增加。在 SQL Server 2005 中,必须先将兼容级别手动设置为 90RTM,然后才能启用要求该兼容级别的功能。有关详细信息,请参阅在复制拓扑中使用 SQL Server 的多个版本中的“合并发布的兼容级别”部分。

补偿操作

在 SQL Server 的早期版本中,在同步期间遇到错误(如违反约束)时采取补偿操作。此行为在某些情况下很合适,但在某些情况下可能会带来问题;例如,一个配置不正确的订阅服务器上发生的错误,能够导致在发布服务器和所有其他订阅服务器上撤消更改。

在 SQL Server 2005 中,sp_addmergearticle@compensate_for_errors 参数控制是否采取补偿操作。当设置为 False(默认值)时,禁用补偿操作;但是,仍将错误记录到日志中,且后续合并将继续尝试应用更改。虽然受影响的行中的数据可能表面上不收敛,但只要解决了错误,更改就可以应用,数据亦将收敛。当设置为 True 时,同步期间无法在节点上应用的更改会导致补偿操作,而这些补偿操作会撤消所有其他节点上的更改。

ms143733.note(zh-cn,SQL.90).gif注意:

如果项目的源表已在另一个发布中发布,则两个项目的 @compensate_for_errors 值必须相同。对于运行 SQL Server 2000 8.00.858 版本和更早版本(包括 Service Pack 3)的订阅服务器上的请求订阅,即使将 @compensate_for_errors 设置为 False,仍会发生补偿操作。

冲突表

在 SQL Server 的早期版本中,合并复制为发布中的每一个表项目创建单个冲突表,其名称形式为 conflict_<项目名称>。在 SQL Server 2005 中,该信息包含在两个表中:MSmerge_conflicts_info 和一个名称形式为 MSmerge_conflict_<发布名称>_<项目名称> 的表。

基于保持期的元数据清除

SQL Server 2005 使用基于保持期的元数据清除,这是在 SQL Server 2000 Service Pack 1 中引入的。元数据定期从下列系统表中删除掉:

  • MSmerge_contents
  • MSmerge_tombstone
  • MSmerge_genhistory
  • 任何前映像表(如果存在)。如果发布上启用了 @keep_partition_changes 同步优化选项(有关此选项的详细信息,请参阅下一节),则存在前象表。

@keep_partition_changes 参数

在 SQL Server 的早期版本中,@keep_partition_changes 参数默认情况下设置为 False,因为它导致在发布服务器上存储更多数据。现在,如果发布兼容级别为 90RTM 或更高,且 @use_partition_groups 参数设置为 False,则将它设置为 True。有关这些选项的详细信息,请参阅参数化行筛选器

请参阅

概念

复制的向后兼容性

其他资源

复制增强

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

版本 历史记录

2006 年 4 月 14 日

新增内容:
  • 添加了有关架构选项行为更改的信息。