SQL Server 复制中的行为更改
本主题介绍 SQL Server 复制中的行为更改。行为更改会影响 SQL Server 2008 中的功能与早期版本的 SQL Server 相比的工作或交互方式。
SQL Server 2005 中所做的行为更改
本部分介绍 SQL Server 2005 在复制功能方面所做的一些行为更改。
影响所有复制类型的行为更改
下列更改影响所有复制类型。
功能 |
说明 |
|---|---|
复制代理安全模式 |
在早期版本的 SQL Server 中,默认情况下,代理在 SQL Server 代理服务帐户的上下文中运行。SQL Server 现在可以更细粒度地控制用于运行复制代理和建立与数据库及其他资源的 Microsoft Windows 集成连接的每个帐户;可为每个代理指定一个不同的帐户。有关详细信息,请参阅安全性和保护(复制)和复制代理安全性模式。有关此更改如何影响升级的信息,请参阅升级复制数据库时的注意事项的“新复制代理安全模式”部分和 SQL Server 复制中的重大更改。 |
Windows 同步管理器 |
在 SQL Server 2005 之前的 SQL Server 版本中,默认情况下已启用与同步管理器同步订阅的能力。在 SQL Server 2005 中,如果要使用同步管理器,必须显式启用此选项。有关详细信息,请参阅如何使用 Windows 同步管理器同步订阅(Windows 同步管理器)。 |
复制冲突查看器 |
在 SQL Server 2000 中,复制冲突查看器被打包,以用于再分发。在 SQL Server 2005 中,不对该查看器进行单独打包。若要在应用程序中包含复制冲突查看器,必须在部署了该应用程序的计算机中安装 Microsoft .NET Framework 2.0,还必须将若干文件复制到该计算机。有关详细信息,请参阅升级顾问帮助中的“其他复制升级问题”。有关升级顾问的详细信息,请参阅使用升级顾问来准备升级。 |
架构选项更改 |
通过架构选项,可以指定复制与表关联的属性和对象(如索引和约束)的方式。在 SQL Server 2005 中,许多架构选项的行为都发生了更改。本主题的下一部分提供详细信息。 |
架构选项行为更改
下表总结了 SQL Server 2005 中的架构选项更改。
注意 |
|---|
如果已在 SQL Server 2000 中设置了 0x8000 架构选项,则在升级到 SQL Server 2005 期间该选项将被禁用。对于架构选项 0x10 或 0x40,在 SQL Server 2005 中复制可能要比在 SQL Server 2000 中复制创建的索引多。 |
选项 |
如果在 SQL Server 2000 中设置该选项,其行为如何 |
如果在 SQL Server 2005 中设置该选项,其行为如何 |
|---|---|---|
0x80 |
创建约束或索引。如果还启用了选项 0x8000,则创建的主键将作为包含索引的约束。如果没有启用选项 0x8000,则仅对主键列创建索引。 |
在订阅服务器中创建主键约束。此外还会复制所有与约束有关的索引,即使没有启用选项 0x10 和 0x40(这些选项控制其他情况下的索引创建)。 |
0x4000 |
创建约束或索引。如果还启用了选项 0x8000,则创建的唯一约束将作为包含索引的约束。如果没有启用选项 0x8000,则仅对该列创建索引。 |
在订阅服务器中创建所有的唯一约束。此外还会复制所有与约束有关的索引,即使没有启用选项 0x10 和 0x40(这些选项控制其他情况下的索引创建)。 |
0x8000 |
如果还指定了 0x80 或 0x4000,则将同时创建主键约束和唯一约束。如果没有指定其中的任何一个选项,则选项 0x8000 不起任何作用。 |
该选项不起任何作用。 |
事务复制的行为更改
下列更改会影响事务复制。
功能 |
说明 |
|---|---|
订阅服务器对象所有权 |
使用 SQL Server 2005 新建发布向导创建发布时,订阅服务器上创建的对象的所有者默认为发布服务器上相应对象的所有者的值。在早期版本中,在订阅服务器上创建对象的过程中不指定所有者;它默认为与用以连接到订阅服务器的分发代理帐户相关联的所有者。该行为对存储过程 sp_addarticle (Transact-SQL) 保持不变。 |
可更新订阅安全模式 |
sp_link_publication 的 @security_mode 参数控制即时更新订阅的触发器如何在发布服务器上执行调用。在 SQL Server 2005 中,此参数的选项有:
在 SQL Server 的早期版本中,选项 0 用于指定从订阅服务器到发布服务器(而不是链接服务器)的动态远程过程调用 (RPC)。 |
合并复制的行为更改
下列更改影响合并复制。
功能 |
说明 |
|---|---|
发布兼容级别 |
在 SQL Server 的早期版本中,如果启用了需要更高兼容级别的功能,则兼容级别会自动增加。在 SQL Server 2005 中,必须先将兼容级别手动设置为 90RTM,然后才能启用要求该兼容级别的功能。有关详细信息,请参阅在复制拓扑中使用 SQL Server 的多个版本中的“合并发布的兼容性级别”部分。 |
补偿操作 |
在 SQL Server 的早期版本中,在同步期间遇到错误(如违反约束)时采取补偿操作。此行为在某些情况下很合适,但在某些情况下可能会带来问题;例如,一个未正确配置的订阅服务器发生错误时,可导致撤消对发布服务器和所有其他订阅服务器的更改。 在 SQL Server 2005 中,sp_addmergearticle 的 @compensate_for_errors 参数控制是否采取补偿操作。当设置为 False(默认值)时,禁用补偿操作;但是,仍将错误记录到日志中,且后续合并将继续尝试应用更改。虽然受影响的行中的数据可能表面上不收敛,但只要解决了错误,更改就可以应用,数据亦将收敛。当设置为 True 时,同步期间无法在节点上应用的更改会导致补偿操作,而这些补偿操作会撤消所有其他节点上的更改。 注意
如果项目的源表已在另一个发布中发布,则两个项目的 @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 中引入的。元数据定期从下列系统表中删除掉:
|
@keep_partition_changes 参数 |
在 SQL Server 的早期版本中,@keep_partition_changes 参数默认情况下设置为 False,因为它导致在发布服务器上存储更多数据。现在,如果发布兼容级别为 90RTM 或更高,且 @use_partition_groups 参数设置为 False,则将它设置为 True。有关这些选项的详细信息,请参阅参数化行筛选器。 |
注意