在复制拓扑中使用 SQL Server 的多个版本

复制功能支持将数据复制到 SQL Server 的不同版本。本主题提供有关以下方面的信息:

  • 支持的 SQL Server 版本

  • 为早期版本映射 SQL Server 2008 数据类型

  • 从早期版本还原复制的数据库

  • 合并发布的兼容级别

有关如何将数据复制到 SQL Server Express 和 SQL Server Compact 3.5 SP1 的信息,请参阅将数据复制到 SQL Server Express向 SQL Server Compact 复制数据。有关各版本的 SQL Server 所支持功能的信息,请参阅 SQL Server 2008 各个版本支持的功能

支持的 SQL Server 版本

SQL Server 2000 和 SQL Server 2005 均可以与 SQL Server 2008 一起参与复制拓扑。对于 SQL Server 2000,最低版本为 Service Pack 3 (SP3)。对于 SQL Server 2005,最低版本为 Service Pack 2 (SP2)。

在不同版本的 SQL Server 之间复制时,通常受限于所使用的最早版本的功能。例如,如果将分发服务器升级到 SQL Server 2008 实例,但是您有运行 SQL Server 2005 实例的发布服务器和运行 SQL Server 2000 实例的订阅服务器,则会受限于 SQL Server 2000 的常规功能和复制功能。

注意注意

由于 64 位和 32 位环境中的 SQL Server 磁盘存储格式相同,因此复制拓扑可以将运行于 32 位环境中的服务器实例与运行于 64 位环境中的服务器实例结合起来。

对于所有类型的复制,分发服务器版本不得低于发布服务器版本。(分发服务器通常与发布服务器是同一个实例。)

对于事务复制,用于事务发布的订阅服务器版本可以是两个发布服务器版本中的任何一个版本。例如,SQL Server 2000 发布服务器可以对应 SQL Server 2008 订阅服务器,而 SQL Server 2008 发布服务器可以对应 SQL Server 2000 订阅服务器。

对于合并复制,用于合并发布的订阅服务器的版本不能比发布服务器版本高。有关早期版本兼容性的详细信息,请参阅本主题稍后部分中的“合并发布的兼容级别”。有关 SQL Server 的各种版本所支持的复制功能的详细信息,请参阅 SQL Server 2008 各个版本支持的功能

与运行 SQL Server 2000 的发布服务器一起使用 SQL Server 2005 或 SQL Server 2008 分发服务器

可以使用 SQL Server 2005 和 SQL Server 2008 作为运行 SQL Server 2000 的发布服务器的远程分发服务器。若要更改此方案中的代理属性,请在分发服务器上执行以下存储过程。用这些过程可以更改 SQL Server 2005 中引入的属性:

如果您有运行 SQL Server 2000 的发布服务器和分发服务器,则可以使用 sp_changedistpublishersp_changesubscriber 来更改代理建立连接时所使用的凭据。但是,如果将分发服务器升级到 SQL Server 2008,就不能使用这些过程来更改在现有的代理作业中使用的凭据。这些过程不会影响在调用它们之后创建的代理作业。若要更改现有代理作业的凭据,请调用上面列出的四个过程之一。

为早期版本映射新数据类型

SQL Server 2008 和 SQL Server 2005 支持若干新数据类型。如下表中所示,如果使用来自 SQL Server 2005 或 SQL Server 2008 分发服务器的推送订阅,则会将这些新数据类型映射到订阅服务器上的兼容数据类型。如果将新数据类型复制到运行早期版本 SQL Server 的订阅服务器,则必须验证数据类型的映射是否正确:

SQL Server 2008 数据类型

SQL Server 2005 数据类型

SQL Server 2000 数据类型

公共语言运行库用户定义类型 (UDT):8000 个字节或更少

UDT

image

UDT:大于 8000 个字节1

varbinary(max)

image

date2, 3

nvarchar(10)

nvarchar(10)

datetime22, 3

nvarchar(27)

nvarchar(27)

datetimeoffset2, 3

nvarchar(34)

nvarchar(34)

FILESTREAM属性1, 4

varbinary(max)

不支持

geography 和 geometry1, 3

varbinary(max)

image

hierarchyid1, 5

varbinary(max)

image

nvarchar(max)

nvarchar(max)

ntext

time2, 3

nvarchar(16)

nvarchar(16)

varchar(max)

varchar(max)

text

varbinary(max)

varbinary(max)

image

xml

xml

ntext

1 对于包含可更新订阅的事务发布,不支持映射 UDT、FILESTREAM、geography、geometry 和 hierarchyid 类型。只有当所有更新订阅服务器运行的都是 SQL Server 2008 或更高版本时,才包括这些类型。

2 复制过程不检查插入到订阅服务器的数据的格式。因此,您的应用程序必须确保所插入数据的格式适用于 date、datetime2、datetimeoffset 和 time 类型的列。这通常是使用约束来完成的。如果数据格式不正确,则在发布服务器上插入时将失败。

3 这些类型在复制到 SQL Server Compact 3.5 订阅服务器之后,将由订阅服务器进行转换。有关 SQL Server Compact 3.5 数据类型映射的信息,请参阅 SQL Server Compact 3.5 文档。

如要将列从类型 geography 或 geometry 映射到 varbinary(max) 或 image,将无法复制这些列的默认约束。此操作会产生以下结果:

4 FILESTREAM 是 varbinary(max) 列的一个属性。有关如何在复制的表中使用 FILESTREAM 列的信息,请参阅 将 FILESTREAM 与其他 SQL Server 功能配合使用中的“复制”一节。具有 FILESTREAM 属性的列不应包含在使用字符模式快照的发布中。

5 是否支持 hierarchyid 类型的列取决于复制类型以及使用的 SQL Server 版本。有关详细信息,请参阅 hierarchyid (Transact-SQL) 的“在复制的表中使用 hierarchyid 列”一节。对于合并复制,当复制兼容级别为 100RTM 且使用字符模式快照时,hierarchyid 将映射为 image。

复制 XML 数据类型

向 SQL Server Compact 3.5 SP1 复制 XML 数据类型时,合并复制会将它们映射到 Ntext。SQL Server 2008 中的 XML 数据具有 UTF-16 编码的前缀字节。使用合并复制从 SQL Server 向 SQL Server Compact 3.5 SP1 复制时会保留这些字节。查看 SQL Server Compact 3.5 SP1 数据库的 Ntext 列时,这些前缀字节不为 SQL Server Management Studio 所理解。因此,这些字节将显示为垃圾字符。

SQL Server 2008 中的 XML 架构集合已经更新。这将对从 SQL Server 2008 向 SQL Server 2005 复制绑定到 XML 架构的 XML 列产生影响。

对于 SQL Server 2008 中的日期、时间和日期时间 XML 架构值,时区不是强制性的。这意味着,如果不对 SQL Server 2008 发布服务器 XML 列指定时区,将不会对 SQL Server 2005 订阅服务器应用该更改,因为 SQL Server 2005 要求指定时区。

有关 SQL Server 2008 发布服务器的日期、时间和日期时间 XML 架构类型化值的时区信息将转换为 SQL Server 2005 中的 UTC-0 时区。这由时区指示符 Z 表示。

SQL Server 2008 XML 架构日期、时间和日期时间类型支持更大的精度。因此,在向 SQL Server 2005 复制这些值时,会进行舍入。

从 SQL Server 2005 向 SQL Server 2008 复制 XML 架构日期或时间日期值时,具有负年份的值将不适用于 SQL Server 2008,因为 SQL Server 2008 不支持此类值。

在这些情况下,复制代理中的 sp_table_validation 和 Validate 方法可能会失败。有关详细信息,请参阅类型化的 XML 与非类型化的 XML 的比较中的“将类型化的 XML 从 SQL Server 2005 升级到 SQL Server 2008”部分。

发布压缩数据

SQL Server 2008 支持表和索引的行压缩和页压缩。有关压缩数据的复制支持的信息,请参阅创建压缩表和索引中的“压缩如何影响复制”。

从早期版本还原复制的数据库

从早期版本还原复制数据库的备份时,可以保留复制设置。如果要将备份还原到与进行备份的服务器和数据库同名的服务器和数据库,或者如果指定了 KEEP_REPLICATION 选项,则将保留复制设置。有关详细信息,请参阅 RESTORE (Transact-SQL)。还原数据库后,请执行 sp_vupgrade_replication 来升级架构和系统数据,以便支持当前产品级别上的复制。

尽管在从早期版本的备份中还原后可以保留复制,但是复制很少用作升级选项。作为产品升级的一部分升级复制的数据库或根据一组脚本重新创建数据库和复制配置较为常见。

合并发布的兼容级别

合并复制使用发布兼容级别来确定给定数据库中的发布可以使用哪些功能。对于 SQL Server 2008 来说,值的范围是从 80RTM(未安装 Service Pack 的 SQL Server 2000)到 100RTM。可以通过下列方法之一来指定兼容级别:

下列功能要求 90RTM 或更高的兼容级别:

下列功能不依赖于兼容级别;但是,它们需要使用 SQL Server 2005 及更高版本中随附的合并代理。运行早期版本 SQL Server 的订阅服务器在运行时就好像合并代理功能未启用一样。

SQL Server 2008 中的发布兼容级别行为

下面是需要考虑的发布兼容级别的一些重要行为:

  • 发布兼容级别与数据库兼容级别无关。

  • 如果使用 sp_addmergepublication 或通过复制管理对象 (RMO) 创建发布,则发布兼容级别会在默认情况下设置为 80RTM。如果使用新建发布向导创建发布,则根据在该向导的**“订阅服务器类型”**页上选择的选项来确定发布兼容级别。

  • 在版本低于 SQL Server 2005 的 SQL Server 中,如果启用了需要更高级别的功能,则发布兼容级别会自动增加。从 SQL Server 2005 开始,必须先将发布兼容级别手动设置为 90RTM 或更高,然后才能启用要求该兼容级别的功能。

  • 仅当快照代理尚未启动且不存在对发布的订阅时,才能降低发布兼容级别。

  • 同一数据库中的所有发布必须具有相同的兼容级别。此要求会产生下列影响:

    • 如果数据库所含发布的兼容级别较低(如 80RTM),而且要在同一数据库中添加另一个级别为 90RTM 或更高的发布,则必须在添加新发布之前手动提高第一个发布的级别。

    • 如果数据库包含两个或多个兼容级别较低的发布,而且要在同一数据库中添加另一个级别为 90RTM 或更高的发布,则必须执行以下操作:只保留一个现有发布,其余全部删除;将其余发布的级别提高到 90RTM 或更高;将已删除的发布重新创建为级别为 90RTM 或更高的发布;创建级别为 90RTM 或更高的新发布。

Web 同步所需的组件和兼容级别

SQL Server 2008 支持针对运行 SQL Server 2005、SQL Server 2008、SQL Server Compact 3.5 3.0、3.1 以及 3.5 的订阅服务器进行 Web 同步。下表列出了每种类型的订阅服务器所需的发布兼容级别和服务器组件。

发布服务器版本

订阅服务器版本

必需的发布兼容级别

IIS 服务器上必需的组件

SQL Server 2008

SQL Server 2008

100RTM

SQL Server 2008 IIS 组件

SQL Server 2008

SQL Server Compact 3.5 3.0、3.1 和 3.5

90RTM

SQL Server Compact 3.5 SP1 IIS 组件和 SQL Server 2008 IIS 组件

SQL Server 2008

SQL Server 2005

90RTM

SQL Server 2008 IIS 组件

SQL Server 2005

SQL Server 2005

90RTM

SQL Server 2005 IIS 组件

SQL Server 2005

SQL Server Compact 3.5 3.0、3.1 和 3.5

90RTM

SQL Server Compact 3.5 SP1 IIS 组件和 SQL Server 2005 IIS 组件

SQL Server 2005

SQL Server 2008

不适用1

不适用1

1  因为发布服务器版本不得低于订阅服务器版本,所以不支持该配置。