SQL Server 2005 复制中的重大更改

更新日期: 2006 年 4 月 14 日

本主题介绍可能需要更改应用程序的复制功能更改。

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

影响所有复制类型的重大更改

下列重大更改适用于 Microsoft SQL Server 2005 中的所有复制类型。

功能 说明

复制脚本所需的更改

复制代理安全模型相对 Microsoft SQL Server 2000 已更改。有关安全模型的详细信息,请参阅复制代理安全性模式。如果您是 SQL Server 2005 中的 sysadmin 固定服务器角色的成员,当运行用 SQL Server 2000 或 SQL Server 7.0 创建的复制脚本时,脚本可以正确执行。如果您是 dbo 固定数据库角色或其他角色的成员,则脚本会失败,必须升级。有关升级脚本的信息,请参阅How to: Upgrade Replication Scripts (Replication Transact-SQL Programming)。尽管不要求升级 sysadmin 角色成员执行的脚本,但建议这样做,以便利用安全性功能增强。

复制代理的本地连接

升级到 SQL Server 2005 时,所有使用 SQL Server 身份验证的本地连接都改为使用 Windows 身份验证。本地连接是指代理与它所在的同一台计算机上运行的 SQL Server 实例之间建立的连接。例如,请求订阅的合并代理运行在订阅服务器上,因此它与订阅服务器建立的连接是本地连接。

在 SQL Server 的早期版本中,默认情况下代理是在 SQL Server 代理服务帐户的上下文中运行。升级后,在此帐户的上下文中建立本地连接。SQL Server 2005 可以细粒度控制复制代理运行并与数据库及其他资源建立 Windows 集成连接所用的每个帐户;可为每个代理指定不同的帐户。升级后,建议为每个代理指定不同的帐户。有关详细信息,请参阅升级复制数据库复制代理安全性模式

ActiveX 控件

所有 ActiveX 控件都标记为对脚本编写和初始化不安全。

SQL Server 2005 中没有快照代理 ActiveX 控件。请改用新的托管快照代理。有关详细信息,请参阅 SnapshotGenerationAgentHow to: Create the Initial Snapshot (RMO Programming)

distributor_admin 帐户的密码

不再支持发布服务器和远程分发服务器之间的可信连接,因为这些连接不要求密码(在 SQL Server 2000 Service Pack 3 之前的版本中,默认情况下使用可信连接)。如果使用远程分发服务器,在升级到 SQL Server 2005 之前,请将可信连接转换成不可信连接(此问题不影响使用本地分发服务器的发布服务器)。有关 distributor_admin 帐户的详细信息,请参阅保护分发服务器的安全

确定所使用的连接类型

更改为不可信连接

  1. 在分发服务器上执行 sp_changedistpublisher (Transact-SQL),将参数 @property 的值指定为“trusted”,将参数 @value 的值指定为“False”。
    ms143470.note(zh-cn,SQL.90).gif注意:
  2. 在发布服务器和分发服务器上都执行 sp_changedistributor_password (Transact-SQL),为参数 @password 指定强密码。

SQL Server Express 不包含 SQL Server 代理

如果要升级到 SQL Server Express,则必须重新配置复制同步,因为 SQL Server Express 不包含 SQL Server 代理。

如果要使用请求订阅,则必须使用复制管理对象 (RMO)、Windows 同步管理器,或在命令行上运行复制代理,以此来同步这些订阅。有关详细信息,请参阅将数据复制到 SQL Server Express

如果要继续使用 SQL Server 代理运行复制代理作业,则必须使用推送订阅或升级到 SQL Server 的不同版本(除 SQL Server Express 和 Microsoft SQL Server 2005 Compact Edition 以外,所有版本都包含 SQL Server 代理)。使用推送订阅时,分发代理或合并代理在分发服务器上运行,所以可用 SQL Server 代理(SQL Server Express 不能是分发服务器)。

Microsoft Access (Jet 4.0) 订阅服务器

Jet 是 Access 使用的基础数据库,在 SQL Server 2000 中,复制支持对 Jet 数据库的订阅。未来版本将不支持这些订阅。

建议改用 Microsoft SQL Server 2005 Express Edition。Access 可以将 SQL Server 数据库用作后端,SQL Server 数据库不受此问题的影响。有关详细信息,请参阅将数据复制到 SQL Server Express

事务复制的重大更改

以下重大更改适用于 SQL Server 2005 中的事务复制。

功能

说明

排队更新订阅的消息队列选项

利用排队更新订阅,将订阅服务器中的更改写入队列;然后,队列读取器代理从该队列中读取更改并将其传递到发布服务器。在 SQL Server 2000 中,订阅可以使用 SQL Server 队列或消息队列对更改进行排队。队列的类型是由 sp_addpublication (Transact-SQL)@queue_type 参数指定的,允许的值为 sqlmsmq。在 SQL Server 2005 中,只允许使用 sql 值。在升级期间,将修改使用消息队列的现有发布从而可以使用 SQL Server 队列。如果某些应用程序依赖于使用消息队列的排队更新,将需要重写这些应用程序以适应 SQL Server 队列。有关排队更新订阅的详细信息,请参阅事务复制的可更新订阅

如果在升级 SQL Server 时正在运行消息队列服务,则升级操作将会删除现有的消息队列 (MSMQ) 订阅队列。

ms143470.note(zh-cn,SQL.90).gif重要提示:

在 Windows 2000 和 Windows XP 中,还必须运行 Microsoft Distributed Transaction Coordinator (MSDTC) 服务,因为在这些操作系统上消息队列需要 MSDTC。

如果未运行消息队列服务,则在升级完成之后应手动删除队列。有关如何删除队列的详细信息,请参阅 Windows 文档。

合并复制的重大更改

以下重大更改适用于 SQL Server 2005 中的合并复制。

功能 说明

从 SQL Server Express 发布

SQL Server MSDE 可以用作合并发布的发布服务器。SQL Server Express 可替换 MSDE,但不能用作发布服务器。它可以订阅合并发布、事务发布和快照发布。具有更新订阅的合并复制和事务复制均允许将更改从订阅服务器传播回发布服务器。有关复制到 SQL Server Express 的详细信息,请参阅将数据复制到 SQL Server Express

批处理更改

在早期版本的 SQL Server 中,合并代理所做的更改是逐行执行的。在 SQL Server 2005 中,为提高性能,更改是成批执行的;因此,可以在一个语句内插入、更新或删除多行。如果发布数据库或订阅数据库中任何已发布的表都有触发器,请确保这些触发器可以处理插入、更新和删除多行的操作。有关详细信息,请参阅DML 触发器的多行注意事项

冲突表的重新创建

升级到 SQL Server 2005 时重新创建冲突表,将 DBO 作为表的所有者。如果 SQL Server 2000 中的其他用户拥有某些表,则可能需要修改应用程序。

合并复制为发布中的每个项目创建一个冲突表,使用 conflict_PublicationName_ArticleName 形式的名称。升级时重新创建所有元数据表,并在 DBO 架构中创建所有冲突表。

分配的新标识范围

对于使用自动标识范围管理的表,复制可能在升级过程中分配新标识范围。如果某些表分配给订阅服务器的标识范围大于分配给发布服务器的标识范围,则复制会给发布服务器分配与订阅服务器的相等的范围。

若要确定用于每个项目的范围,请在发布数据库中执行 sp_helpmergearticle (Transact-SQL),并检查 pub_identity_range 列和 identity_range 列。

请参阅

概念

复制的向后兼容性

其他资源

复制增强

帮助和信息

获取 SQL Server 2005 帮助