# Microsoft SQL Server 2000 Service Pack 3

##### 2002 年 12 月 9 日

© 版权所有 Microsoft Corporation，2002。保留所有权利。

SQL Server 文档编辑组不负责回答有关技术支持方面的问题，但欢迎您对此自述文档提出建议和意见。您可以直接使用以下链接快速发送电子邮件反馈。所有反馈必须为英文。
要提交有关此文档的书面反馈，请单击此处：提交反馈。

# 目录

1.0 简介

1.1 Database Components SP3 安装概述

1.2 删除 SP3

1.3 确定 SQL Server 或 Analysis Services 的当前版本

1.4 关于 SP3 的其他信息

1.5 更新的联机丛书文档可用

1.6 更新的 SQL Server 和 Analysis Services 示例可用

2.0 下载并解压缩 SP3

3.0 安装 Service Pack

3.1 备份 SQL Server 数据库

3.2 备份 Analysis Services 数据库和知识库

3.3 确保系统数据库具有足够的可用空间

3.4 运行 SP3 安装程序之前停止服务和应用程序

3.5 安装 Database Components SP3

3.6 安装 Analysis Services SP3

3.7 安装 Desktop Engine SP3

3.8 重新启动服务

3.9 重新启动应用程序

3.10 在故障转移群集上安装

3.11 在复制服务器上安装

3.12 将 SP3 应用于只读数据库或文件组

3.13 卸载 SP3

3.14 重新应用 SP3

4.0 其他安装考虑事项

4.1 无人值守安装方式

4.2 再分发 SP3 数据访问组件

5.0 文档说明

5.1 数据库引擎和 Desktop Engine 增强功能

5.1.1 在 Database Components SP3 中使用中文、日语或朝鲜语字符

5.1.2 散列组已删除

5.1.3 添加的 Affinity Mask 开关

5.1.4 筛选的索引视图

5.1.5 安装完成后重建全文目录

5.1.6 sp_change_users_login 的语法更改

5.1.7 默认情况下禁用对 OLE DB 提供程序的特殊访问

5.1.8 新的 SqlServerLike 提供程序选项

5.1.9 分布式查询的扩展错误消息

5.1.10 新函数 fn_get_sql 返回 SQL 语句

5.1.11 跨数据库所有权链接

5.1.12 跟踪标志 1204 的改进

5.1.13 sp_changedbowner 的权限更改

5.1.14 调试功能的更改

5.2 Analysis Services 增强功能

5.2.1 远程分区

5.2.2 更新的 Analysis Services 可再分发客户端安装程序

5.2.3 支持第三方数据挖掘算法提供程序

5.2.4 在客户端文件已更新的计算机上安装 Analysis Services

5.2.5 增强对虚拟多维数据集引用的 OLAP 多维数据集的限制

5.2.6 新关键字 DESCRIPTION

5.2.7 新的 PivotTable Service Restricted Client 属性

5.2.8 Safety Options 属性的更改

5.2.9 默认情况下禁止将知识库迁移到 Meta Data Services

5.2.10 必须更改远程 Data 文件夹的权限

5.3 复制增强功能

5.3.1 事务复制 UPDATE 自定义存储过程

5.3.2 唯一列上的事务复制 UPDATE 语句

5.3.3 去除对并发快照处理的限制

5.3.4 事务复制脚本自定义存储过程

5.3.5 合并复制基于保持的元数据清除

5.3.6 合并复制的备份和还原问题

5.3.7 从不同版本的 SQL Server 还原复制的数据库

5.3.8 日志读取器代理的新参数 -MaxCmdsInTran

5.3.9 非唯一聚集索引的限制

5.3.10 快照代理的新命令行参数 –MaxNetworkOptimization

5.3.11 合并复制使用新角色

5.3.12 非系统管理员用户创建的订阅的新要求

5.3.13 存储过程权限的更改

5.3.14 sp_addmergearticle 和 sp_changemergearticle 的新参数

5.3.15 配置发布和分发向导的新页面

5.3.16 对 Windows 同步管理器支持的更改

5.3.17 附加或还原复制数据库要求的更改

5.4 SQL Server 代理增强功能

5.4.1 SQL Server 代理记录帐户信息

5.4.2 主/目标服务器配置的更改

5.4.3 新的 SQL Server 代理扩展存储过程

5.4.4 SQL Server 代理权限检查

5.5 SQL Server 连接组件增强功能

5.5.1 Microsoft 数据访问组件的更新

5.5.2 支持 QLogic 虚拟接口架构

5.6 Meta Data Services 增强功能

5.6.1 元数据浏览器以 Unicode 导出元数据

5.6.2 禁用脚本支持

5.6.3 用于访问知识库信息的新 RepositoryUser 角色

5.7 数据转换服务增强功能

5.7.1 DTS 向导不再将字符串列限制为不超过 255 个字符

5.7.2 SQL Server 代理记录运行 DTS 程序包时的安全性上下文

5.7.3 SQL Server 代理的代理帐户的改进

5.7.4 默认情况下禁止保存到 Meta Data Services

5.8 XML 增强功能

5.8.1 改进的 XPath 表达式验证

5.9 虚拟备份设备 API 增强功能

5.9.1 在单个快照中捕获多个数据库

5.10 错误报告

5.11 English Query 增强功能

5.12 用于 C 语言的 DB-Library 和嵌入式 SQL

# 1.0 简介

此次发布的 Microsoft® SQL Server™ 2000 Service Pack 3 (SP3) 共由三个部分组成：

- Database Components SP3 提供对 SQL Server 2000 实例（不包括 SQL Server 2000 Desktop Engine 实例）的数据库组件的更新。Database Components SP3 包括对下列部分的更新：
  - 数据库引擎。
  - 数据库客户端工具和实用程序，如 SQL Server 企业管理器和 osql 实用工具。
  - 数据库客户端连接组件，如用于 SQL Server 2000 的 Microsoft OLE DB 提供程序、SQL Server 2000 ODBC 驱动程序和客户端 Net-Library。
- Analysis Services SP3 提供对 SQL Server 2000 安装中 SQL Server 2000 Analysis Services 组件的更新，包括：
  - Analysis Services。
  - Analysis Services 客户端组件，其中包括 Analysis Manager 和用于 Analysis Services 的 Microsoft OLE DB 提供程序。
  - 数据库客户端连接组件，如用于 SQL Server 2000 的 Microsoft OLE DB 提供程序、SQL Server 2000 ODBC 驱动程序和客户端 Net-Library。
- Desktop Engine SP3 提供对 SQL Server 2000 Desktop Engine（也称为 MSDE 2000）实例的数据库组件的更新，包括：
  - 数据库引擎。
  - 数据库客户端连接组件，如用于 SQL Server 2000 的 Microsoft OLE DB 提供程序、SQL Server 2000 ODBC 驱动程序和客户端 Net-Library。

可以独立使用 SP3 的这三个部分，具体如下：

- SQL Server 2000 站点可以使用 Database Components SP3 升级数据库组件，而不必升级 Analysis Services 组件或 SQL Server 2000 Desktop Engine 实例。
- Analysis Services 2000 站点可以使用 Analysis Services SP3 升级 Analysis Services 组件，而不必升级 Desktop Engine 实例或数据库组件。
- Desktop Engine 站点可以使用 Desktop Engine SP3 升级 Desktop Engine 实例，而不必升级 Analysis Services 或 SQL Server 2000 其他版本的实例。

  说明 如果同一台计算机上既具有 Desktop Engine 实例，又具有 SQL Server 2000 其他版本的实例，则必须将 Desktop Engine SP3 应用于 Desktop Engine 实例，并将 Database Components SP3 应用于 SQL Server 2000 的其他实例。

有关安装 Desktop Engine 的更多信息，请参见 3.7 安装 Desktop Engine SP3。

说明 对于葡萄牙语（巴西）、瑞典语和荷兰语，只提供 Desktop Engine SP3，因为为这些语言生产的 SQL Server 2000 版本只有 SQL Server 2000 Desktop Engine。对于这些语言版本，没有可由 Database Components SP3 或 Analysis Services SP3 升级的 SQL Server 2000 组件。葡萄牙语（巴西）、瑞典语和荷兰语的用户若希望将 SP3 应用于 Desktop Engine 之外的 SQL Server 版本，必须下载与自己要升级的版本的语言相对应的 SP3 文件。例如，必须下载英文版 SP3 文件才能对英文版 SQL Server 2000 进行升级。有关如何下载 Service Pack 的更多信息，请参见 2.0 下载并解压缩 SP3。

## 1.1 Database Components SP3 安装概述

Database Components SP3 安装程序自动检测要升级的 SQL Server 2000 实例所使用的 SQL Server 2000 的版本。安装程序仅升级该实例已安装的组件。例如，如果对运行 SQL Server 2000 标准版的计算机应用此 Service Pack，则不会尝试升级只有 SQL Server 2000 企业版中才有的组件。

可以将 Database Components SP3 应用于 SQL Server 的单个默认实例或命名实例。如果要将多个 SQL Server 2000 实例升级为 SP3，必须对每个实例应用 SP3。如果计算机上有一个或多个 SQL Server 2000 实例，那么当其中一个实例升级为 SP3 时，所有的工具都将升级为 SP3。每个实例并不具有单独的工具副本。

## 1.2 删除 SP3

删除 SQL Server SP3 的方式取决于要删除的 SQL Server 2000 SP3 组件。

##### 删除 SQL Server Database Components SP3 和 Desktop Engine SP3

安装 SQL Server Database Components SP3 时，由于维护方面的原因会更改系统表，并对作为复制拓扑成员的用户数据库和分发数据库进行升级。由于进行了这些更改，以致无法轻易地删除 SP3。要还原为安装 SP3 前所运行的版本，首先必须卸载 SQL Server 2000 实例；然后必须重新安装该实例。如果运行过以前的 SQL Server 2000 Service Pack 或应用过任何快速修补 (QFE) 程序，必须对该实例重新应用该 Service Pack 和 QFE 修补程序。

说明 要删除 SP3，必须具有应用 SP3 前的 master、model 和 msdb 数据库的备份。有关更多信息，请参见 3.1 备份 SQL Server 数据库和 3.2 备份 Analysis Services 数据库和知识库。

有关更多信息，请参见卸载 SQL Server 2000 组件和 Desktop Engine SP3。

##### 删除 SQL Server Analysis Services 组件 SP3

为了能够将 SQL Server Analysis Services 还原为安装 SP3 之前的状态，在安装 SP3 之前，必须对注册表项 HK_LOCAL_MACHINE\Software\Microsoft\OLAP Server 及其所有子项进行备份。卸载 SP3 时，必须删除该注册表项，并通过备份还原为 SP3 以前的版本。

说明 安装 SP3 时更新到 MDAC 2.7 SP1 后将无法卸载。

有关更多信息，请参见卸载 SQL Server 2000 Analysis Services SP3。

## 1.3 确定 SQL Server 或 Analysis Services 的当前版本

通过下列几节中介绍的方法可以确定已安装的 SQL Server 或 Analysis Services 的版本。

##### SQL Server

要确定已安装的 SQL Server 2000 的版本，请使用 osql 或 isql 实用工具在命令提示符中或在 SQL 查询分析器的“查询”窗口中键入 `SELECT @@VERSION` 或 `SERVERPROPERTY('ProductVersion')`。

同样，特定版本 SQL Server 2000 的产品级别可以通过执行 `SELECT SERVERPROPERTY('ProductLevel')` 来确定。

下表显示了 SQL Server 2000 版本和级别、`@@VERSION` 报告的版本号以及 `SERVERPROPERTY('ProductLevel')` 报告的产品级别三者之间的关系。

SQL Server 2000 版本和级别 | @@VERSION | ProductLevel
SQL Server 2000 RTM | 8.00.194 | RTM
Database Components SP1 | 8.00.384 | SP1
Database Components SP2 | 8.00.534 | SP2
Database Components SP3 | 8.00.760 | SP3

如果不能确定所运行的是哪个版本的 SQL Server 2000，可以查看 `SELECT @@VERSION` 返回的输出结果的最后一行。最后一行应该与以下某项匹配：

    Desktop Engine on Windows NT 5.0 (Build 2195: Service Pack 2)
    Enterprise Evaluation Edition on Windows NT 5.0 (Build 2195: Service Pack 2)
    Developer Edition on Windows NT 5.0 (Build 2195: Service Pack 2)
    Personal Edition on Windows NT 5.0 (Build 2195: Service Pack 2)
    Standard Edition on Windows NT 5.0 (Build 2195: Service Pack 2)
    Enterprise Edition on Windows NT 5.0 (Build 2195: Service Pack 2)

说明 每行开头表示 SQL Server 版本。其后是当前操作系统信息。

也可以通过使用 osql 或 isql 实用工具在命令提示符中或在 SQL 查询分析器的“查询”窗口中键入 `SELECT SERVERPROPERTY('Edition')` 来确定 SQL Server 2000 版本。

##### Analysis Services

若要确定所安装的 Analysis Services 版本，请执行下列操作：

1. 从“开始”菜单，指向“程序文件”、“SQL Server 2000”、“Analysis Services”，然后单击“Analysis Manager”。
2. 在“Analysis Manager”树中，右键单击“分析服务器”节点，然后单击“关于 Analysis Services”。
3. 使用下表可确定 Analysis Services 的版本。

Analysis Services 版本 | “帮助”的“关于”中的版本号
SQL Server 2000 Analysis Services RTM | 8.0.194
Analysis Services SP1 | 8.0.382
Analysis Services SP2 | 8.0.534
Analysis Services SP3 | 8.0.760

## 1.4 关于 SP3 的其他信息

Microsoft 知识库文章 306908 中将提供此 Service Pack 中包含的修补程序列表。306908 中列出的每个修补程序都具有一个对应的知识库文章链接，其中说明了此修补程序所解决的问题。使用指向各个知识库文章的链接可以了解各个修补程序的信息。这些文章发布在 Microsoft 产品技术支持服务知识库中。

在知识库中查找文章

1. 从“选择您的产品”列表中，选择“SQL Server 2000”。
2. 在“所找解答包含...”字段中，键入要查找的文章的标识号。
3. 在“搜索”中，选择“文章 ID”。
4. 单击“确定”按钮。

本自述文件中未能及时提供的有关 SQL Server 2000 Service Pack 3 的信息，将在 Microsoft 知识库文章 Q330022 中提供。该文章可以在 Microsoft 产品技术支持服务知识库中找到。

#### Microsoft 数据访问组件

本 Service Pack 包括对 Microsoft 数据访问组件 (MDAC) 的更新，其中涉及对 MSXML 的更新。

有关更多信息，请参见 5.5.1 Microsoft 数据访问组件的更新。

#### QFE 修补程序

SP3 解决了所有公开发布的 SQL Server 2000 SP2 安全公告。

如果您在 2002 年 10 月 14 日后收到 SQL Server 2000 热修复程序，则该热修复程序可能未包括在 SP3 中。请与主要的产品支持提供商联系获取用于 SQL Server 2000 SP3 的同一热修复程序。

#### SQL Server CE 服务器工具更新

已升级或计划将 SQL Server 2000 数据库和发布服务器升级到 SP3 的 Microsoft SQL Server 2000 Windows® CE 版本 (SQL Server CE) 用户还应该更新 Microsoft Internet 信息服务 (IIS) 服务器上的服务器复制组件。更新的 SQL Server CE 服务器工具安装程序可以从该 Microsoft 网站获取。

## 1.5 更新的联机丛书文档可用

针对 SP3 的更新的文档可用了。SQL Server 2000 联机丛书（更新 - SP3）包含有关 SP3 的一些微小修订和新信息。

可以从 Microsoft 网站下载 SQL Server 2000 联机丛书（更新 - SP3）。

## 1.6 更新的 SQL Server 和 Analysis Services 示例可用

针对 SP3 更新的 SQL Server 2000 和 Analysis Services 示例可用了。您可以从 Microsoft 网站下载这些更新的示例。

# 2.0 下载并解压缩 SP3

SP3 的分发方式如下：

- SQL Server 2000 Service Pack 3 光盘，其中包含下列组件的 Service Pack：
  - Database Components SP3
  - Analysis Services SP3
  - Desktop Engine SP3
- 三个自解压缩文件，可通过 Internet 从 Microsoft SQL Server 下载网站下载：
  - CHS_Sql2ksp3.exe (Database Components SP3)
  - CHS_Sql2kasp3.exe (Analysis Services SP3)
  - CHS_Sql2kdesksp3.exe (Desktop Engine SP3)

说明 SQL Server 2000 Service Pack 3 光盘和 CHS_Sql2kdesksp3.exe 都包含安装新 Desktop Engine 实例必需的合并模块以及 .msi 文件。

##### Database Components 和 Analysis Services SP3 文件

从 Internet 下载并解压缩 Database Components 或 Analysis Services SP3 的安装文件时，请遵守下列指导：

- 下载 2.0 一节中列出的某个文件，然后将自解压缩文件保存到运行 SQL Server 2000 实例（将对此实例安装 Service Pack）的计算机上的某个文件夹中，或者保存到网络共享文件夹中。从该文件夹运行自解压缩文件。该自解压缩程序将提示您输入放置 service pack 文件的文件夹的名称。

  说明 将 Service Pack 解压缩到网络共享中时，指定的文件夹的路径是该自解压缩程序所在文件夹的相对路径。

- 存放下载的 Sevice Pack 安装文件的本地驱动器或网络共享驱动器上必须具有大约三倍于自解压缩文件大小的可用空间。其中包括存储该自解压缩文件的空间、存储解压缩后的 Sevice Pack 文件的空间以及自解压缩程序本身所需要的临时工作空间。
- 对组件进行解压缩后，可以重命名或移动该文件夹；但要确保目录路径名中不含空格。可以将上述三个自解压缩文件放在同一个目标文件夹中，它们不会相互覆盖或干扰。
- 自解压缩文件将生成一组目录和文件，它们与 SP3 光盘上的目录和文件完全相同。如果下载 SP3，则必须先对下载的文件解压缩，生成 Service Pack 目录，然后才能运行 SQL Server 安装程序。
- 对于 Database Components SP3 和 Analysis Services SP3，光盘和解压缩文件的安装过程相同。

说明 Service Pack 中包含一些系统文件。只有按照下列步骤操作才能看到它们：在 Windows 资源管理器中的“查看”菜单上，单击“选项”，单击“查看”选项卡，然后选中“显示所有文件”复选框。

Database Components 和 Analysis Services 安装文件中都包含更新的安装文档，在 SP3 安装期间单击“帮助”可以访问此文档。此文档不会更新您计算机上已安装的 SQL Server 2000 联机丛书的版本。有关如何获取 SQL Server 联机丛书更新版的信息，请参见 1.5 更新的联机丛书文档可用。如果只希望访问更新的 SQL Server 2000 SP3 安装文档，而不更新 SQL Server 联机丛书，请运行 Setupsql.chm 文件。Setupsql.chm 位于包含解压缩 Service Pack 文件的 SP3 光盘、本地目录或网络共享目录下的 \Books 子文件夹中。

##### Desktop Engine SP3 文件

有关下载和解压缩 Desktop Engine SP3 的信息，请参见 3.7 安装 Desktop Engine SP3。

# 3.0 安装 Service Pack

要安装 SP3，请遵循以下几节的安装指导。并不是所有步骤都是必需的，这取决于 Service Pack 具体应用于下列哪个 SQL Server 2000 组件或配置：

- Database Components
- Analysis Services
- Desktop Engine
- 故障转移群集
- 复制服务器

每个安装步骤都列出了适用的组件。

说明 语言不同 Service Pack 也不同。请应用与要升级的 SQL Server 组件具有相同语言的 Service Pack。

##### 安装之前的准备工作

如果以下安全策略之一设置为“禁止安装”，SP3 的安装将失败：

- Windows XP 的本地安全策略“设备：未签名驱动程序的安装操作”
- Windows 2000 的本地安全策略“未签名的非驱动程序的安装操作”

如果使用了“禁止安装”设置，安装 SP3 前必须将其更改为“默认继续”。 如果需要，可以在安装完成之后将该策略还原为以前的设置。

说明 “禁止安装”不是这些安全策略的默认设置。

在 Microsoft Windows .NET Server 内部版本 3683 或更早版本的预发行版本上安装此 Service Pack 时，将收到下列错误消息：

    您正安装的软件没有通过 Windows 徽标测试，无法验证其与此 Windows 版本的兼容性。将不安装此软件。请与您的系统管理员联系。

可以选择忽略此消息。单击“确定”继续安装。

说明 此消息会阻止无人值守安装。

在法语版 Windows NT 4.0 上安装 SP3 之前，请遵循知识库文章 259484 中的指导进行操作。可以从 Microsoft 产品技术支持服务知识库访问此文章。有关搜索知识库的指导，请参见 1.4 关于 SP3 的其他信息。

##### 安装 Database Components 之前的准备工作

如果应用 Database Components SP3 的 SQL Server 实例与 Analysis Services 位于同一台计算机上，则执行脚本 Sp3_serv_uni.sql 时安装程序将失败。如果发生此情况，请重新启动计算机，然后重新运行安装程序。

SP3 安装程序不会升级用户数据库（除了复制拓扑中被主动涉及到的用户数据库）。复制拓扑没有涉及到的数据库对 SP3 没有任何依存关系。例如：

- 可以将 SQL Server 2000、SQL Server 2000 SP1 或 SQL Server 2000 SP2 实例中的用户数据库备份还原到 SQL Server 2000 SP3 实例。
- 可以将 SQL Server 2000 SP3 实例中的用户数据库备份还原到 SQL Server 2000、SQL Server 2000 SP1 或 SQL Server 2000 SP2 实例。
- 可以将用户数据库从 SQL Server 2000、SQL Server 2000 SP1 或 SQL Server 2000 SP2 实例分离并附加到 SQL Server 2000 SP3 实例。
- 可以将用户数据库从 SQL Server 2000 SP3 实例分离并附加到 SQL Server 2000、SQL Server 2000 SP1 或 SQL Server 2000 SP2 实例。
- 可以在 SQL Server 2000、SQL Server 2000 SP1、SQL Server 2000 SP2 和 SQL Server 2000 SP3 的实例之间进行日志传送。

SP3 安装程序将升级作为复制拓扑成员的用户数据库。安装 SP3 之前，必须确保复制数据库和文件组是可写的，并且运行安装程序的用户帐户具有访问此数据库的权限。有关将 SP3 应用于复制拓扑中的数据库的更多信息，请参见 3.11 在复制服务器上安装。

如果 SP3 安装程序检测到不可写的用户数据库或文件组，将执行以下操作：

- 将 SP3 复制更新应用到所有可写的用户数据库。
- 将只读数据库的列表写入安装程序日志（该日志位于 winnt\sqlsp.log）。
- 显示以下警告消息：

      安装程序检测到一个或多个数据库和文件组不可写。

除非安装程序日志中列出的某些数据库是复制拓扑的成员，否则可以忽略此警告。如果安装程序日志中列出的只读数据库是复制拓扑的成员，则必须使这些数据库可写并将 SP3 安装程序重新应用于 SQL Server 2000 的该实例。

说明 此消息不影响无人值守安装。有关无人值守安装的更多信息，请参见 4.1 无人值守安装方式。

有关使数据库可写的更多信息，请参见 3.12 将 SP3 应用于只读数据库或文件组。有关重新应用 SP3 的更多信息，请参见 3.14 重新应用 SP3。

说明 安装期间，安装程序不区分只读数据库和脱机或可能有问题的数据库。如果在安装过程中，某个复制数据库或文件组处于以上某个情况并包含在复制拓扑中，则必须使数据库可写后再重新应用 Service Pack。

说明 由于只读数据库不再引起安装失败，升级到 SP3 前不必删除日志传送。

##### 准备使用 Systems Management Server 进行分布式安装

不能远程安装 SQL Server 2000 Service Pack 3。但是，可以使用 Microsoft Systems Management Server 自动在多台运行 Microsoft Windows NT Server 4.0 的计算机上安装 SP3。 要这样做，必须使用包定义文件（Smssql2ksp2.pdf 文件），该文件自动在 Systems Management Server 中创建 SQL Server 包。 然后，SQL Server 包将被分发并安装在运行 Systems Management Server 的计算机上。Sms2kdef.bat 文件是批处理文件，它使用 Systems Management Server 开始进行无人值守安装。在这种类型的安装中，安装程序自动检测需要和不需要用户输入的相关系统信息。

说明 不能使用 Systems Management Server 安装 Desktop Engine SP3。

## 3.1 备份 SQL Server 数据库

以下内容适用于数据库客户端组件之外的所有组件安装。

安装 Database Components SP3 或 Desktop Engine SP3 之前，请备份 master、msdb 和 model 数据库。安装 SP3 会修改 master、msdb 和 model 数据库，从而导致这三个数据库与 SQL Server SP3 之前的版本不兼容。如果决定重新安装 SQL Server 2000 而不安装 SP3，则必须要有这些备份。

尽管 SP3 只对作为复制拓扑成员的数据库执行更新，备份您的用户数据库时仍需谨慎。

## 3.2 备份 Analysis Services 数据库和知识库

以下内容仅适用于 Analysis Services。

安装 Analysis Services SP3 之前，请通过创建一个 Microsoft Analysis Services\Data 文件夹副本来备份 Analysis Services 数据库，此文件夹默认安装在 C:\Program Files 文件夹下。如果尚未将 Analysis Services 知识库迁移到 SQL Server，请创建 Msmdrep.mdb 文件的备份副本，该文件位于 Microsoft Analysis Services\bin 文件夹中。还可以运行 Regedit.exe，然后通过“注册表”菜单中的“导出注册表文件”将 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OLAP Server 注册表项导出到一个文件以进行备份，以此来保存分析服务器注册表项。如果已将 Analysis Services 知识库迁移到 SQL Server，请在安装 SP3 前备份包含该知识库的数据库。有关更多信息，请参见卸载 SQL Server 2000 Analysis Services SP3。

## 3.3 确保系统数据库具有足够的可用空间

以下内容适用于数据库客户端组件和 Analysis Services 之外的所有组件安装。

如果没有为 master 和 msdb 数据库选择“自动增长”选项，那么数据库必须至少有 500 KB 的可用空间。若要确认 master 或 msdb 数据库是否具有这么多空间，请分别对它们运行 sp_spaceused 系统存储过程。如果任一数据库中未分配的空间少于 500 KB，则应增加相应数据库的大小。有关更多信息，请参见 SQL Server 联机丛书中的“扩充数据库”。

如果为 master 和 msdb 数据库选择了“自动增长”选项，并且驱动器上有足够的空间，可以跳过此步骤。

要确认是否已在 SQL Server 2000 中选中了“自动增长”选项，请打开“SQL Server 企业管理器”，右键单击数据库图标，然后单击“属性”。确认已选中“文件自动增长”复选框。

要确认是否已在 Desktop Engine 中选中了此选项，请执行下列 SQL 语句：

- sp_helpdb master
- sp_helpdb msdb

在这些命令的输出结果中，确认增长列的值不为 0。

## 3.4 运行 SP3 安装程序之前停止服务和应用程序

以下内容适用于所有组件。

应用 SP3 时可以不关闭服务。如果不关闭服务，安装程序完成时将提示您重新启动计算机。如果不重新启动，下列服务将无法启动：

- Microsoft 分布式事务处理协调器 (MS DTC)、Microsoft Search 以及 MSSQLServerOLAPService 服务。
- 用于正在升级的实例（例如，MSSQL$NamedInstance）的 MSSQLServer 和 SQLServerAgent 服务。
- Microsoft 组件服务、Microsoft 消息队列和 Microsoft COM 事务积分器。
- 所有应用程序，包括“控制面板”。（可选）

如果在应用 SP3 之前停止了这些服务和应用程序，则不需要重新启动计算机即可应用 SP3：

不能停止群集环境中的这些服务。有关更多信息，请参见 3.10 在故障转移群集上安装。

## 3.5 安装 Database Components SP3

以下内容适用于 Desktop Engine 和 Analysis Services 之外的所有组件安装。

从下列任一位置运行 Setup.bat 脚本：

- 本地计算机上包含从 CHS_SQL2KSP2.exe 解压缩的 Service Pack 文件的目录。
- SQL Server 2000 SP3 光盘中的 Service Pack 目录。
- 网络共享中包含从 CHS_SQL2KSP3.exe 解压缩的 Service Pack 文件的目录。

说明 为了从网络共享安装数据库组件，必须先执行下列操作之一：

- 将包含解压缩的 Service Pack 文件的网络共享映射为本地计算机上的可用驱动器号，转到映射驱动器上的包含 Setup.bat 的目录，然后运行 Setup.bat。
- 运行 \X86\Setup 中的 Setupsql.exe 文件开始安装，\X86\Setup 是网络共享中包含解压缩 Service Pack 文件的目录中的子文件夹。

安装程序会显示对话框提示您输入信息，例如，是使用 SQL Server 身份验证还是 Windows 身份验证。如果选择 SQL Server 身份验证，则必须为安装程序提供 sa 登录的密码。如果选择 Windows 身份验证，则必须在使用 Windows 登录帐户登录到 Windows 时运行此安装程序。此登录帐户必须是正在升级的 SQL Server 2000 实例的 sysadmin 固定服务器角色的一部分。

然后安装程序执行下列任务：

- 如果其检测到安装使用的是混合模式身份验证，并且 sa 登录密码为空，将显示“身份验证模式”对话框。保留 sa 登录密码为空可使用户很容易获取 SQL Server 或 Desktop Engine 的管理权限，但建议不要这样做；请强制使用 sa 密码或使用 Windows 身份验证保护您的系统。要了解有关此对话框的更多信息，请参见本节后面的“身份验证模式”对话框。
- 如果检测到 sa 登录密码为空，将显示“SA 密码警告”对话框。尽管可以明确选择忽略此建议并继续安装，可以保持 sa 登录密码为空并继续安装，但空密码会导致安全风险，并且建议不要使用空密码。无论使用何种身份验证模式都会显示此对话框。

  说明 密码更改立即生效，即使安装失败，密码仍会被改变。

- 显示“后向兼容性一览表”对话框，警告您应用 Service Pack 时可能遇到了后向兼容性问题。要了解有关此对话框的更多信息，请参见本节后面的“后向兼容性一览表”对话框。
- 如果检测到有不可写的数据库或文件组，将显示一个对话框。此时，如果其中任何数据库或文件组是复制拓扑的一部分，可以执行以下任一操作：
  - 停止安装过程，使这些对象可写，然后重新启动安装程序。
  - 继续当前的 SP3 安装过程，并在使这些对象可写后的某个时间重新应用 SP3。

  说明 仅当将 SP3 应用于作为复制拓扑的一部分的只读数据库或文件组时，上述步骤才是必需的。有关更多信息，请参见 3.12 将 SP3 应用于只读数据库或文件组。

- 显示“错误报告”对话框，其中有如何启用 SP3 中包括的新错误报告功能的信息。有关错误报告功能的更多信息，请参见 5.10 错误报告。
- 根据需要更新 MDAC 组件。有关更多信息，请参见 5.5.1 Microsoft 数据访问组件的更新。
- 使用 SP3 文件替换现有 SQL Server 2000 文件。
- 运行 Transact-SQL 脚本文件以更新系统存储过程。
- 如果安装程序确定需要重新启动，将在结束对话框中显示重新启动计算机的选项。

#### “身份验证模式”对话框

“身份验证模式”对话框并不将当前的安装设置视为默认设置。对话框默认设置为：

- 在运行 Windows 98 或 Windows Millennium Edition 的计算机上，默认设置为“混合模式身份验证”（这些操作系统唯一支持的身份验证模式）。此对话框要求您指定 sa 登录的密码。如果指定了密码，安装程序将更改 sa 登录密码。如果将密码保留为空，安装程序将在不更改密码的情况下进行连接。
- 在运行 Windows NT 4.0 或 Windows 2000 的计算机上，默认设置为“Windows 身份验证”。使用此对话框可以切换到 Windows 身份验证模式或 sa 登录密码不为空的混合模式。

  说明 在更改身份验证模式或 sa 登录密码之前，请确保这种更改不会影响现有的应用程序。例如，如果将一个 SQL Server 实例从使用混合模式身份验证更改为仅使用 Windows 身份验证，则试图使用 SQL Server 身份验证进行连接的现有应用程序将无法连接，直到将身份验证模式设置为 Windows 身份验证为止。此外，如果更改 sa 登录密码，使用原密码的应用程序或管理进程将无法连接，直到将它们配置为使用新密码为止。

  重要 出于安全考虑，绝对不要使 sa 登录密码为空。

安装程序在 Sqlsp.log 文件中记录所执行的每个操作。该日志文件存储在运行安装程序的计算机的 Windows 目录中。如果升级多个实例，则只有最近的升级操作记录在此日志中。

#### “后向兼容性一览表”对话框

“后向兼容性一览表”对话框列出了应用 Service Pack 时可能遇到的后向兼容性问题。进行升级的 SQL Server 2000 实例的配置不同，一览表中显示的后向兼容性问题也不同。

在此对话框中可解决下列后向兼容性问题：

- SP3 升级 Microsoft 搜索服务，并为使用此服务的所有应用程序自动重建全文目录。重建期间，全文功能可能无法完全起作用。继续安装前必须选中此复选框。有关更多信息，请参见 5.1.5 安装完成后重建全文目录。
- 应用 Service Pack 前，必须升级 SQL Server 2000 主/目标服务器配置。SP3 中介绍的功能增强只与运行 SQL Server 2000 SP3 的服务器兼容。继续安装之前，必须选中此复选框。有关更多信息，请参见 5.4.2 主/目标服务器配置的更改。
- 此 Service Pack 中默认关闭跨数据库所有权链接。安装后，可以为单个数据库启用跨数据库所有权链接。选中此可选复选框将允许所有数据库进行跨数据库所有权链接。有关更多信息，请参见 5.1.11 跨数据库所有权链接。

  说明 建议不要对所有数据库启用跨数据库所有权链接。

  说明 如果以前在 SP3 之前的版本（Build 8.00.760 之前的版本）中启用了跨数据库所有权链接，那么安装 SP3 时需要再次启用它。

## 3.6 安装 Analysis Services SP3

以下内容仅适用于 Analysis Services。

要安装 Analysis Services SP3，请从以下任一位置运行 Setup.exe：

- 包含从 CHS_SQL2KASP3.exe 解压缩的 Analysis Services SP3 文件的目录中的 Msolap\Install 子目录。
- SP3 光盘中的 Msolap\Install 目录。

然后，安装程序将执行下列任务：

- 打开“安装”对话框，提示您输入信息。
- 显示“错误报告”对话框，其中有如何启用 SP3 中包括的新错误报告功能的信息。有关错误报告的更多信息，请参见 5.10 错误报告。
- 复制所需文件，然后完成安装。

##### 其他 Analysis Services 安装问题

安装 Analysis Services SP3 之后,还必须升级用于远程管理 SP3 的计算机。否则，试图通过 Analysis Manager 进行远程连接时将收到下列错误消息：

    无法连接到该服务器 (server_name) 上的注册表，或者您不是该服务器的 OLAP Administrators 组的成员。

Meta Data Services 已添加名为 RepositoryUser 的专用表，它用于访问和更新 msdb 数据库中的知识库信息。RepositoryUser 角色具有 msdb 知识库的创建、读取、更新、删除和执行权限。public 角色已被新角色代替，不再拥有此知识库的权限。在满足下列条件的情况下，必须将 OLAP Administrators 组添加到 RepositoryUser 角色中，以便应用 Service Pack 后该组中的成员可以访问知识库：

- 知识库采用 Meta Data Services 格式。
- 知识库使用 msdb 数据库。
- OLAP Administrators 组以前使用 public 角色访问知识库。

  说明 此更改也将影响访问已升级为 SP3 的服务器上的 Meta Data Services 知识库的远程服务器。还必须将远程服务器登录添加到 RepositoryUser 角色中。

  说明 还原升级到 SP3 前备份的 Meta Data Services 知识库之前，必须将 OLAP 管理员组添加到 RepositoryUser 角色中；否则还原操作将失败。

有关 RepositoryUser 角色的更多信息，请参见 5.6.3 用于访问知识库信息的新 RepositoryUser 角色。

如果 Analysis Services Data 文件夹不在分析服务器计算机上，则运行 SP3 安装程序后必须修改该文件夹的权限。有关更多信息，请参见 5.2.10 必须更改远程 Data 文件夹的权限。

## 3.7 安装 Desktop Engine SP3

以下内容只适用于 Desktop Engine。

SQL Server 2000 Desktop Engine （也称为 MSDE 2000）的 Service Pack 供创建使用 Desktop Engine 的可再分发应用程序的开发人员使用。第三方应用程序安装的任何 Desktop Engine 实例必须使用应用程序提供商提供的 Service Pack 进行升级。如果正在运行使用 Desktop Engine 的应用程序，请与您的软件供应商联系，以获得关于升级由这些应用程序安装的 Desktop Engine 实例的信息。有关更多信息，请参见 SQL Server 联机丛书中的“分发 SQL Server 2000 Desktop Engine”。 有关正确使用 Desktop Engine 的信息，请访问 Microsoft SQL Server 网站中有关 Desktop Engine 的页面。有关其他 Desktop Engine SP3 安装信息，请参见知识库文章 810826。

Desktop Engine 的 Service Pack 按以下方式分发：

- SQL Server 2000 Service Pack 3 光盘。
- 通过 CHS_SQL2KdeskSP3.exe。可以从 Microsoft SQL Server 下载网站下载此自解压缩文件。

这两种传递渠道都包括安装新 Desktop Engine 实例（.msi 文件）、升级所有现有 Desktop Engine 实例（.msp 文件）以及在应用程序中使用合并模块（.msm 文件）所需的所有文件。有关更多信息，请参见 SQL Server 联机丛书中的“发布 SQL Server 应用程序”或知识库文章 810826。此文章可以从 Microsoft 产品技术支持服务知识库中找到。

#### 文件位置

本节说明 Desktop Engine SP3 相关文件的位置。

说明 如果 Desktop Engine 是作为另一应用程序的组件安装的，请与软件供应商联系，了解升级 Desktop Engine 的更多信息。

所有 Desktop Engine 安装文件位于 \MSDE 目录或其某一子目录中，可从以下位置找到：

- 光盘
- 包含从 CHS_SQL2KDeskSP3.exe 解压缩的 Service Pack 的目录
- 将光盘中的 MSDE 子目录复制到硬盘驱动器或网络共享上时的目标位置。

Setup.exe 位于 \MSDE 目录中。

安装包（.msi 文件）位于 \Setup 子目录中，该子目录是包含 Setup.exe 的 \MSDE 目录的子目录。

Windows Installer 2.0 (InstMsi20.exe) 位于 \MSI 子目录中。

合并模块和相关安装文件位于 \MSM 子目录中，该子目录是包含 Setup.exe 的 \MSDE 文件夹的子目录。要查看可用 Desktop Engine 合并模块的完整列表，请参见 SQL Server 联机丛书中的“使用 SQL Server Desktop Engine 合并模块”主题。

#### 要求

以下要求适用于 Desktop Engine 安装：

- 升级 Desktop Engine 时，必须将 Desktop Engine SP3 应用到每个 Desktop Engine 实例。

  说明 系统最多支持 16 个 Desktop Engine 实例。

- 总是运行 Setup.exe 启动安装程序。不要直接调用任一 .msi 文件来启动安装程序。
- 无论 Desktop Engine 实例使用 Windows 或混合模式身份验证，如果检测到 sa 登录使用空密码，安装程序将无法继续。如果检测到空密码，安装程序将显示警告消息。如果 sa 登录使用空密码，继续操作之前，应使用 sp_password 更改密码。
- 将 Desktop Engine 升级到 SP3 或通过终端服务连接来安装新 Desktop Engine SP3 实例时，可能发生问题。如果遇到问题，请从本地计算机重新启动安装程序。
- 可以从硬盘驱动器、网络共享或光盘运行安装程序。Desktop Engine 安装程序需要当初安装 Desktop Engine 时所使用的媒体（如原光盘或网络共享）。
- 如果 Desktop Engine 最初是从光盘或已经移动的网络共享安装的，请将 SQL Server 2000 Desktop Engine Service Pack 3 光盘中的 Desktop Engine 子目录复制到硬盘驱动器或网络共享，然后运行 Setup.exe。
- 只有在满足以下条件时，才能从光盘安装 Desktop Engine：
  - 安装了 Windows Installer 2.0.2600.0 或更高版本。
  - 如果您为了安装 SP3 而创建了自己的光盘，那么光盘的卷标必须是 SQL2KSP3。如果您是独立软件供应商 (ISV)，并且准备创建光盘以便将 Desktop Engine 作为您应用程序的一个组件进行分发，那么光盘的卷标必须与 Windows 安装程序包 (*.msi) Media 表中的 VolumeLabel 属性相同。

以防您需要升级 Windows Installer，SP3 中包含有升级 Windows Installer 所需的文件。

升级 Windows Installer：

1. 运行位于包含 Setup.exe 的 \MSDE 文件夹的 \MSI 子文件夹中的 InstMsi20.exe。
2. 根据提示重新启动计算机。

#### Desktop Engine 安装参数

在 SP3 中，Desktop Engine 安装程序支持下列安装参数。

参数名 | 描述
--- | ---
ALLOWXDBCHAINING=1 | 启用跨数据库所有权链接。有关更多信息，请参见 5.1.11 跨数据库所有权链接。
BLANKSAPWD=1 | 覆盖安装程序的默认行为，该默认行为禁止使用空 sa 密码进行安装。如果设置 BLANKSAPWD=1，安装程序将允许使用空 sa 密码进行安装。 警告 强烈建议不要使用空密码。
INSTANCENAME= instance_name | 指定实例名称。如果未指定实例名称，则使用默认实例名称 MSSQLSERVER。
SAPWD=sa_password | 指定 sa 密码。此选项可用于新安装。与其他属性不同，SAPWD 属性是隐藏属性，值不写入日志文件。
SECURITYMODE=SQL | 指定该实例使用 SQL Server 身份验证。在 Windows NT 4.0、Windows 2000 或 Windows XP 中，如果未指定 SECURITYMODE=SQL，将使用 Windows 身份验证，并将 Windows 本地管理员组添加到 SQL Server sysadmin 固定服务器角色中。 重要 如果可能，请使用 Windows 身份验证。
UPGRADEUSER=sa | 指定使用 SQL Server 身份验证升级 Desktop Engine 时所使用的登录。该登录必须是固定服务器角色 sysadmin 的成员。
UPGRADEPWD= sa_password | 指定使用 SQL Server 身份验证升级 Desktop Engine 时所使用的登录的密码。
UPGRADE=1 | 将 Microsoft Desktop Engine 1.0 的实例升级为 SQL Server 2000 Desktop Engine SP3 时使用。唯一支持的值是 1。

安装程序参数可以在命令行或 .ini 文件中指定。有关更多信息，请参见 SQL Server 联机丛书中的“自定义 Desktop Engine Setup.exe”。

说明 将 SQL Server 2000 Desktop Engine 合并模块作为自定义安装中集成的一部分时，可能不能使用这些命令行参数自定义 Desktop Engine 安装。有关更多信息，请参见知识库文章 810826。

重要 不要将凭据存储在 .ini 文件中。

升级、安装或卸载 Desktop Engine 时将使用下列安装开关。

开关名 | 描述
--- | ---
/upgradesp <setup_path>\SqlRunXX.msi | SQLRUN | 对于 SP3 及其更高版本，此开关代替用于指定包位置的 /p 开关。升级到 SP3 时，如果知道用于安装 Desktop Engine 的原始 MSI 的编号，请将其与相同名称的 SP3 .msi 文件的完整路径一起指定。或者如果使用 INSTANCENAME 参数指定实例名时，也可以指定 SQLRUN。有关如何使用此新开关的示例，请参见以下几节。
/l*v [filename] | 此标准安装开关在对安装进行故障排除时很有用。它指定要创建详细日志。如果指定了 filename，则日志将存储在指定的文件中。
/x package_name | 此标准安装开关在卸载 Desktop Engine 时使用。必须指定用于安装 Desktop Engine 实例的 Windows 安装程序安装包 (.msi) 的文件名。

有关其他安装参数的信息，请参见 SQL Server 联机丛书中的“自定义 Desktop Engine Setup.exe”。

#### 升级现有 Desktop Engine 实例

SP3 引入了用于升级 Desktop Engine 的新开关。/upgradesp 开关代替了 /p 开关。使用此新开关时，有两个选项，如何使用它们取决于您所了解的有关要升级的 Desktop Engine 实例的信息。您必须知道实例名（默认值为 MSSQLSERVER）或原始安装 Desktop Engine 时使用的是哪个 .msi 文件。

如果知道实例名，请使用 /upgradesp 开关，用法如下所示：

    Setup.exe /upgradesp SQLRUN INSTANCENAME=instance_name SECURITYMODE=SQL
    UPGRADEUSER=<username> UPGRADEPWD=<password>

重要 如果安装时使用 .ini 文件，请不要将凭据存储在 .ini 文件中。

这种情况下，安装程序使用实例名确定原始安装 Desktop Engine 时使用哪个 .msi 文件。

说明 升级默认实例时，不必指定 INSTANCENAME。

可以使用 16 个 .msi 文件 (SqlRun01.msi 到 SqlRun16.msi) 中的某个文件来安装 Desktop Engine。如果知道安装 Desktop Engine 时使用的原始 .msi 文件名，可以将其与同名的 SP3 .msi 文件的完整路径一起指定，如下所示：

    Setup.exe /upgradesp c:\SQL2KSP3\MSDE\Setup\SqlRun03.msi SECURITYMODE=SQL
    UPGRADEUSER=<username> UPGRADEPWD=<password>

重要 如果安装时使用 .ini 文件，请不要将凭据存储在 .ini 文件中。

此例中，C:\SQL2KSP3\MSDE\Setup 表示 SP3 .msi 文件位置，SqlRun03.msi 是原始安装时使用的 .msi 文件名。

如果您不清楚实例名和原始的 .msi 文件名，请参见 Microsoft 知识库文章 311762。此文章描述了如何确定原始 .msi 文件的名称。此文章可以从 Microsoft 产品技术支持服务知识库中找到。

##### 升级 SQL Server 2000 Desktop Engine

升级 SQL Server 2000 Desktop Engine

1. 运行 Setup.exe 启动安装程序。（不要直接从 .msi 文件运行安装程序。）
2. 如果知道实例名，请使用 /upgradesp SQLRUN INSTANCENAME=instance_name

   -或-

   如果知道原始 .msi 文件名，请使用 /upgradesp，并与同名的 SP3 .msi 文件的完整路径一起指定 .msi 文件名。

3. 指定 SECURITYMODE=SQL。
4. 使用 UPGRADEUSER 参数指定安装程序使用的登录帐户，该帐户是 sysadmin 固定服务器角色的成员。
5. 使用 UPGRADEPWD 安装参数指定所选登录帐户的密码。

重要 如果安装时使用 .ini 文件，请不要将凭据存储在 .ini 文件中。

说明 如果使用 BLANKSAPWD=1，则不必指定 SECURITYMODE=SQL 或 UPGRADEUSER 和 UPGRADEPWD。

警告 强烈建议不要使用空密码。

说明 在运行 Windows 98 或 Windows Millennium Edition 的计算机上升级 Desktop Engine 时，启动安装程序之前必须停止要升级的 Desktop Engine 实例。

##### 从 Desktop Engine 1.0 升级

从 Desktop Engine 1.0 升级

此 Service Pack 支持直接将 Desktop Engine 1.0 实例升级到 SQL Server 2000 Desktop Engine SP3。要升级 Desktop Engine，请执行下列操作：

1. 停止要升级的 Desktop Engine 1.0 实例。
2. 运行 Setup.exe 启动安装程序。（不要直接从 .msi 文件运行安装程序。）
3. 指定 UPGRADE=1

如果使用的是 SQL Server 身份验证，还需要执行下列操作：

4. 指定 SECURITYMODE=SQL。
5. 使用 UPGRADEUSER 参数指定安装程序使用的登录帐户，该帐户是 sysadmin 固定服务器角色的成员。
6. 使用 UPGRADEPWD 安装参数指定所选登录帐户的密码。

说明 如果使用 BLANKSAPWD=1，则不必指定 SECURITYMODE=SQL 或 UPGRADEUSER 和 UPGRADEPWD。

警告 强烈建议不要使用空密码。

重要 如果安装时使用 .ini 文件，请不要将凭据存储在 .ini 文件中。

##### 安装新的 Desktop Engine 实例

SP3 允许安装新 Desktop Engine 实例。

安装新的 Desktop Engine 实例

- 运行 Setup.exe 启动安装程序。（不要直接从 .msi 文件运行安装程序。）
- 如果使用的是 SQL Server 身份验证，请指定 SECURITYMODE=SQL。
- 无论使用什么身份验证模式，都必须执行下列操作之一：
  - 使用 SAPWD 安装参数指定 sa 登录的密码。
  - 指定 BLANKSAPWD=1 参数。

  说明 如果同时指定了 SAPWD 和 BLANKSAPWD，将优先使用 SAPWD 而忽略 BLANKSAPWD。

  重要 如果安装时使用 .ini 文件，请不要将凭据存储在 .ini 文件中。

  警告 强烈建议不要使用空密码。

有关更多信息，请参见 SQL Server 联机丛书中的“安装 Desktop Engine”。有关适当使用 Desktop Engine 的信息，请访问 Microsoft SQL Server 网站中有关 Desktop Engine 的页面。

##### 再分发 Service Pack

建议希望再分发此 Service Pack 的 ISV 以下列任一方式进行再分发：

- 对于使用 Setup.exe 的安装，请将 Service Pack 安装在那个被配置为与您的软件一起分发的实例相匹配的 Desktop Engine 实例之上。
- 对于使用合并模块的安装，请基于新旧安装的差异生成您自己的修补包，然后将自定义修补程序分发给客户。

有关创建修补包的更多信息，请参见知识库文章 810826，或 Windows 安装程序软件开发工具包 (SDK) 中包括的文档，该文档可从 Microsoft 平台 SDK 网站下载。

说明 可以再分发 SP3 的完整副本。

## 3.8 重新启动服务

以下内容适用于所有组件。

完成安装后，可能会提示您重新启动系统。系统重新启动后（或者安装程序完成后未要求重新启动），请通过“控制面板”中的“服务”应用程序确认 MS DTC 和 Microsoft Search、MSSQLServer、MSSQLServerOLAPService 及 SQLServerAgent 服务或其实例特定的等价程序正在运行。请备份升级后的 master 和 msdb 数据库。

## 3.9 重新启动应用程序

以下内容适用于所有组件。

请重新启动运行 Service Pack 安装程序之前关闭的应用程序。

## 3.10 在故障转移群集上安装

以下内容仅适用于作为故障转移群集一部分的 SQL Server 2000 组件。

在故障转移群集上安装 Service Pack

1. 如果添加的任何资源与 SQL Server 资源有依存关系，在安装 SP3 之前，必须删除这些依存关系，或将其脱机。如果不这样做，安装 SP3 会导致这些依存的资源发生故障转移。
2. 从包含将升级的虚拟服务器的组所在的节点运行此 Service Pack。这将在所有故障转移群集节点上安装 Service Pack 文件。
3. 在“安装”对话框中，键入要升级的虚拟服务器的名称。
4. 在安装过程中，使群集中的所有节点都处于联机状态。这可确保将群集中的每个节点升级。
5. 如果在上述步骤 1 中删除了依存关系或使资源处于脱机状态，请添加这些依存关系或使资源处于联机状态。

说明 安装程序可能需要重新启动故障转移群集节点。这将以更新的文件替换安装时使用的文件。

如果正在将 SQL Server 的默认（非群集）实例升级到虚拟服务器，必须首先将默认实例升级到虚拟实例，然后应用 SP3。有关升级的更多信息，请参见 SQL Server 联机丛书中的“如何将默认实例升级到 SQL Server 2000（安装）的默认群集实例”。

有关在故障转移群集上安装 SP3 的其他信息，请参见知识库文章 811168。

如果需要在故障转移群集中重建节点，请执行下列步骤

1. 在故障转移群集中重建节点。有关重建节点的更多信息，请参见 SQL Server 联机丛书中的“如何从第一种情况的故障转移群集失败中恢复”。
2. 运行原始 SQL Server 2000 安装程序，将节点添加回故障转移群集。
3. 运行 SP3 安装程序。

在群集上安装 Analysis Services SP3 时，必须单独升级各个实例。

在 Analysis Services 群集上安装 SP3

1. 在故障转移节点上安装 SP3。
2. 故障转移到新升级的节点。
3. 重复步骤 1 和 2，直到更新完群集上的所有实例。

## 3.11 在复制服务器上安装

以下内容仅适用于作为复制拓扑一部分的 SQL Server 2000 组件：

- 升级发布服务器前，必须先升级分发服务器
- 对于基于只读订阅服务器的事务复制的复制拓扑，可以在升级发布服务器和分发服务器之前或之后升级订阅服务器。
- 对于基于更新的订阅服务器的合并复制或事务复制的复制拓扑，必须在升级发布服务器和分发服务器之后升级订阅服务器。

说明 许多情况下，尤其在合并复制中，分发服务器和发布服务器是同一台服务器，将同时升级。

##### 在作为分发服务器和订阅服务器的服务器上安装 SP3

对于基于更新订阅服务器的合并复制或事务复制的复制拓扑，其中包括一台或多台服务器既作为订阅服务器又作为发布服务器（或分发服务器），可能需要使系统停顿（即停止所有更新），然后同时升级所有服务器。

###### 示例 1：需要同时升级的拓扑

下表包括的服务器即发布又订阅允许在订阅服务器上进行更新的发布。正如前面所说明的，对于允许在订阅服务器上进行更新的拓扑，必须遵循升级顺序：分发服务器、发布服务器、订阅服务器。此顺序要求使用更新的订阅服务器即要首先升级用于合并发布的服务器 A，又要首先升级用于事务发布的服务器 B。在此情况下，必须使系统停顿，然后同时升级这些服务器。

服务器 A | 服务器 B
--- | ---
用于合并复制的发布服务器/分发服务器 | 用于合并复制的订阅服务器
用于通过更新进行事务复制的订阅服务器 | 用于通过更新进行事务复制的发布服务器/分发服务器

###### 示例 2：允许顺序升级的拓扑

在此示例中，可以首先升级服务器 A，因为只读事务复制允许在升级发布服务器/分发服务器之前先升级订阅服务器。

服务器 A | 服务器 B
--- | ---
用于合并复制的发布服务器/分发服务器 | 用于合并复制的订阅服务器
用于只读事务复制的订阅服务器 | 用于只读事务复制的发布服务器/分发服务器

##### 其他复制安装问题

重要 在升级到 SP3 之前，请确保运行 SQL Server 服务的 Windows 帐户是 sysadmin 固定服务器角色的成员。之所以必须这样做，是因为要通过 SQL Server 服务帐户的上下文升级复制分发数据库。升级到 SP3 之后，应从 sysadmin 角色中删除该 Windows 帐户。

如果使用的是合并复制，并且分发服务器位于另一台计算机或另一个数据库实例（远程分发服务器）上，则应用 SP3 之后必须生成新的快照。

附加或还原复制数据库的要求在 SP3 中发生了变化。有关更多信息，请参见 5.3.17 附加或还原复制数据库要求的更改。

SP3 安装程序会升级作为复制拓扑成员的用户数据库。如果作为复制拓扑成员的数据库是不可写的，那么，要将 SP3 应用于这些数据库，必须先使其可写，然后重新应用 SP3 安装程序。有关使数据库可写的更多信息，请参见 3.12 将 SP3 应用于只读数据库或文件组。有关重新应用 SP3 的信息，请参见 3.14 重新应用 SP3。

描述复制的现有备份方案允许一旦失败发生时将数据库还原到 SP3 升级之后的一个已知点。应用 SP3 之后，建议对复制拓扑涉及的所有用户数据库进行日志备份或完整的数据库备份。这样，如果复制数据库失败，不必在还原数据库之后重新应用 SP3。

## 3.12 将 SP3 应用于只读数据库或文件组

以下内容仅适用于作为复制拓扑一部分的 SQL Server 2000 组件。

如果存在只读数据库或文件组，则安装程序将显示以下消息：

    Setup has detected one or more databases and filegroups which are not writable.

通常，可以忽略此警告并继续运行安装程序。但是，如果安装程序日志中列出的任何只读数据库是复制拓扑的成员，则必须使这些数据库可写，然后将 SP3 安装程序重新应用于该 SQL Server 2000 实例。

说明 此消息不影响无人值守安装。有关无人值守安装的更多信息，请参见 4.1 无人值守安装。

说明 安装过程中，安装程序不区分只读数据库和脱机或可能有问题的数据库。如果安装期间数据库或文件组处于上述某种状况，则必须重新应用 Service Pack。有关使数据库联机的更多信息，请参见 SQL Server 联机丛书中的“附加和分离数据库”。有关诊断可能有问题的数据库的更多信息，请参见 SQL Server 联机丛书中的“服务器和数据库疑难解答”。

将 SP3 应用于只读数据库

1. 使用 ALTER DATABASE 使只读数据库可写，如下所示：

       ALTER DATABASE database SET READ_WRITE

2. 对所有的只读数据库，重复步骤 1。
3. 应用（或重新应用）Service Pack。
4. 如果需要，使用 ALTER DATABASE 重新使数据库只读，如下所示：

       ALTER DATABASE database SET READ_ONLY

将 SP3 应用于只读文件组

1. 使用 ALTER DATABASE 使只读文件组可写，如下所示：

       ALTER DATABASE Database
       MODIFY FILEGROUP filegroup_name READWRITE

2. 对所有只读的文件组，重复步骤 1。
3. 应用（或重新应用）Service Pack。
4. 使用 ALTER DATABASE 重新使此文件组只读，如下所示：

       ALTER DATABASE Database
       MODIFY FILEGROUP filegroup_name READONLY

有关 ALTER DATABASE 的更多信息，请参见 SQL Server 联机丛书中的“ALTER DATABASE”参考主题。有关重新应用 SP3 的更多信息，请参见 3.14 重新应用 SP3。

## 3.13 卸载 SP3

删除 SQL Server SP3 的方式取决于要删除的 SQL Server 2000 SP3 组件类型。

说明 无法卸载 MDAC 更新。有关更多信息，请参见 5.5.1 Microsoft 数据访问组件的更新。

#### 卸载 SQL Server 2000 组件和 Desktop Engine SP3

要还原为 SP3 版本以前的 SQL Server 2000 组件，必须在安装 SP3 之前备份 master、msdb 和 model 数据库。有关更多信息，请参见 3.1 备份 SQL Server 数据库。

说明 如果复制涉及到了任何数据库，必须禁用发布。要禁用发布，请执行下列操作：

1. 在 SQL Server 企业管理器中，展开 SQL Server 组，展开服务器，右键单击“复制”文件夹，然后单击“配置发布、订阅服务器和分发”。
2. 单击“发布数据库”选项卡。
3. 清除复制所涉及到的各个数据库对应的复选框。这将允许分离数据库。

还原为 SP3 版本以前的 SQL Server

1. 分离所有用户数据库。有关更多信息，请参见 SQL Server 联机丛书中的“如何附加和分离数据库（企业管理器）”。
2. 卸载 SQL Server。在“控制面板”中，双击“添加/删除程序”，然后选择要卸载的 SQL Server 实例。
3. 从最初安装 SQL Server 的光盘或位置安装 SQL Server 2000。
4. 应用早于 SP3 安装的 Service Pack 和 QFE 修补程序。
5. 从应用 SP3 之前创建的最后一次备份还原数据库 master、msdb 和 model。这将自动附加创建备份时附加的所有用户数据库（假设未更改数据文件位置）。
6. 附加最后一次备份 master 数据库之后创建的所有用户数据库。
7. 必要时对复制进行配置。

   警告 还原为 SP3 版本以前的 SQL Server 时，将失去自应用 SP3 之后对 master、msdb 和 model 所做的所有更改。

#### 卸载 SQL Server 2000 Analysis Services SP3

为了能够将 Analysis Services 还原为 SP3 之前的状态，必须在安装 SP3 之前备份注册表项 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OLAP Server。有关更多信息，请参见 3.2 备份 Analysis Services 数据库和知识库。

说明 如果未备份此注册表项，则必须按 Microsoft 知识库文章 330244 中描述的方法进行操作。

还原为 SP3 版本以前的 SQL Server

1. 卸载 SQL Server 2000 Analysis Services。在“控制面板”中，双击“添加/删除程序”，单击 SQL Server 2000 Analysis Services，然后单击“删除”。
2. 从最初安装 SQL Server 使用的光盘或位置重新安装 SQL Server 2000 Analysis Services。
3. 应用早于 SP3 安装的 Service Pack 和 QFE 修补程序。
4. 删除注册表项 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OLAP Server。
5. 从 SP3 之前的备份重新安装注册表项 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OLAP Server。

## 3.14 重新应用 SP3

以下内容适用于所有组件。

在下列情况下，必须重新应用 SP3：

- 在应用 SP3 以后添加了新 SQL Server 2000 组件。
- 使作为复制拓扑一部分并且在初始应用 SP3 的过程中为只读的数据库或文件组可写。

要重新应用 SP3，请执行 3.0 安装 Service Pack 中的步骤

# 4.0 其他安装考虑事项

本节描述只适用于特殊情况下的其他 Service Pack 安装考虑事项。

## 4.1 无人值守安装方式

可以用无人值守方式将 Database Components SP3 应用于 SQL Server 实例。Database Components SP3 光盘包含可以执行无人值守 SP3 安装和其他形式的安装的 .iss 文件。下列文件位于光盘的根目录中：

- Sql2kdef.iss 是无人值守安装文件，用于将 Database Components SP3 应用于运行在 Windows 2000 或 Windows NT 4.0 上的默认 SQL Server 2000 实例。需要使用相应的批处理文件 Sql2kdef.bat。
- 安装文件 sql2knm.iss，用于将 Database Components SP3 应用于运行在 Windows 2000 或 Windows NT 4.0 上的 SQL Server 2000 命名实例。必须更改此 .iss 文件中的实例名称，以标识要升级的实例。
- 安装文件 sql2ktls.iss，用于将 Database Components SP3 应用于仅工具的安装。此文件可直接用于安装，而无需进行任何修改。
- 安装文件 sql2k9x.iss，用于在运行 Windows Me 或 Windows 98 的计算机上应用 Database Components SP3。必须更改此 .iss 文件中的实例名称，以标识要升级的实例。
- 安装文件 sql2kcli.iss，用于将 Database Components SP3 应用于运行 Windows 95 的计算机上的客户端组件安装。
- 安装文件 msolap.iss，用于存储运行 Analysis Services SP3 的无人值守安装的参数列表。

有关执行 SQL Server 2000 无人值守安装的更多信息，请参见 SQL Server 联机丛书中的主题“执行无人值守安装”。

##### 无人值守安装的考虑事项

关于无人值守安装的考虑事项有：

- 尽可能使用 Windows 身份验证运行无人值守安装。
- 如果必须使用 SQL Server 身份验证进行无人值守安装（例如在运行 Windows 98 或 Windows Millennium Edition 的计算机上运行 SP3 的无人值守安装），则不应在 .iss 文件中包括 sa 登录的密码，因为这些文件未加密。应该在命令行中使用 sapwd 参数提供 sa 登录的密码，如下所示：

      start /wait setupsql.exe -s -sms -f1 C:\sql2knm.iss -sapwd password

- 如果升级到 SP3 的 SQL Server 实例的 sa 登录帐户密码为空，则必须在运行无人值守安装前提供密码。应运行 sp_password 更改此密码。
- 运行 SP3 的无人值守安装时，必须手动设置下列对应于“后向兼容性一览表”对话框的安装开关，否则无人值守安装将失败。

无人值守安装开关 | 描述
--- | ---
UpgradeMSSearch | 此开关用于设置全文目录的重建。如果启用了全文搜索，必须将此开关设置为 1。有关更多信息，请参见 5.1.5 安装完成后重建全文目录。
MSXTSXUpgraded | 此开关用于解决有关升级主/目标服务器配置的问题。如果将 SP3 应用于主服务器或目标服务器，必须将此开关设置为 1。有关更多信息，请参见 5.4.2 主/目标服务器配置的更改。
EnableCrossDBChaining | （可选）此开关用于启用跨数据库所有权链接。要启用跨数据库所有权链接，请将此开关设置为 1。有关更多信息，请参见 5.1.11 跨数据库所有权链接。

- 在无人值守安装过程中，如果安装程序检测到任何不可写的数据库或文件组，则会将该信息写入安装程序日志，并继续进行无人值守安装。如果安装程序日志中列出的只读数据库是复制拓扑的成员，则必须使这些数据库可写并将 SP3 安装程序重新应用于该 SQL Server 2000 实例。有关使数据库可写的更多信息，请参见 3.12 将 SP3 应用于只读数据库或文件组。有关重新应用 SP3 的更多信息，请参见 3.14 重新应用 SP3。

## 4.2 再分发 SP3 数据访问组件

Database Components SP3 包括自解压文件 Sqlredis.exe。运行 Sqlredis.exe 时，它将执行以下操作：

1. 执行 Microsoft Data Access Components (MDAC) 2.7 Service Pack 1 中的 Mdac_typ.exe 文件。这将安装 SP3 所包括的 MDAC 2.7 SP1 核心组件（如果未检测到相同或较新版本）、SQL Server 版本和 Desktop Engine 客户端连接组件。有关更多信息，请参见 5.5.1 Microsoft 数据访问组件的更新。
2. 安装 Microsoft Jet ODBC 驱动程序和连接组件。

可以再分发 Sqlredis.exe 文件，但必须遵守 SP3 附带的 Redist.txt 文件中所注明的条款和条件。

# 5.0 文档说明

除可用的新功能之外，本节还包含运行 SP3 时可能发生的问题。这些问题可能发生在从 SQL Server 2000、SQL Server 2000 SP1 或 SQL Server 2000 SP2 运行 Service Pack 进行升级的情况下。本节未描述 SP3 中提供的所有修补程序。要查看这些修补程序的完整列表，请参见 Microsoft 知识库文章 306908。

本节中的 Analysis Services 和 Meta Data Services 部分不适用于仅 Desktop Engine 安装。

本自述文件中未能及时提供的 SQL Server 2000 Service Pack 3 相关信息，将在 Microsoft 知识库文章 330022 中提供。该文章可以在 Microsoft 产品技术支持服务知识库中找到。

## 5.1 数据库引擎和 Desktop Engine 增强功能

下列增强功能适用于安装 Database Components SP3 的 SQL Server 2000 实例。也适用于安装 Desktop Engine SP3 的 Desktop Engine 实例。

### 5.1.1 在 Database Components SP3 中使用中文、日语或朝鲜语字符

在 SP1 中引入

如果在运行 Windows NT 4.0 的服务器或 Windows 98 上安装了 Database Components SP3 之后再升级到 Windows 2000，Windows 2000 升级过程将替换某些系统文件。在对中文、日语或朝鲜语字符排序时，需要使用这些系统文件。如果在 SQL Server 数据库中使用中文、日语或朝鲜语字符，在升级到 Windows 2000 后，需重新运行 SP3 附带的 Sqlredis.exe。有关运行 Sqlredis.exe 的更多信息，请参见 4.2 再发布 SP3 数据访问组件。

说明 如果客户机或服务器上没有含中文、日语或朝鲜语字符的数据库，则无需重新应用 Sqlredis.exe。

### 5.1.2 散列组已删除

在 SP1 中引入

散列组 (hash teams) 已删除。由于 SQL Server 2000 中的改进，使用散列组已不能获得它们在 SQL Server 7.0 中所提供的性能好处。而且，删除散列组使得 SQL Server 2000 更加稳定。

因此，查询优化器不再用散列组生成查询计划。

在极个别的情况下，删除散列组可能会使查询的处理速度减慢。请分析这类查询并确定创建更适合的索引是否能使查询性能恢复到以前的水平。

### 5.1.3 添加的 Affinity Mask 开关

在 SP1 中引入

此 Service Pack 添加了两个 Affinity Mask 开关。

##### Affinity Mask I/O 开关

使用此 Service Pack，可以指定使用哪些 CPU 来运行用于磁盘 I/O 操作的线程。这一开关必须与 Affinity Mask 选项结合起来使用。有关更多信息，请参见 Microsoft 产品技术支持服务知识库中的文章 298402。有关搜索知识库的指导，请参见 1.3 关于 SP3 的其他信息。

##### Affinity Mask 连接开关

使用此 Service Pack，可以将支持虚拟接口体系结构 (VIA) 的系统配置为将 SQL Server 连接从某些网卡绑定到一个处理器或一组处理器。这一开关必须与 Affinity Mask 选项结合起来使用。有关更多信息，请参见 Microsoft 产品技术支持服务知识库中的文章 299641。

### 5.1.4 筛选的索引视图

在 SP2 中引入

如果遇到 Microsoft 知识库文章 306467 中描述的 SQL Server 2000 错误 355069，此 Service Pack 只能防止由于数据修改而在未来出现异常结果。所以，除了应用此修补程序外，所有基于带有筛选条件的视图的索引都必须重新创建。有关更多信息，请参见 Microsoft 产品技术支持服务知识库。

### 5.1.5 安装完成后重建全文目录

在 SP3 中引入

作为 SP3 安装的一部分，将重建所有全文目录。该重建是自动的，并且会大量耗用资源。在完成该重建过程之前，根据全文目录进行查询可能返回部分结果或无结果。安装 SP3 之后，系统事件日志将包含可指出目录已损坏、属于较早版本并需要重建等方面的记录。

有关信息，请参见知识库文章 327217，其中还讨论了重建过程中保持全文搜索可用以及避免自动重建的可能的解决办法。

### 5.1.6 sp_change_users_login 的语法更改

在 SP1 中引入

使用 @Action=Auto_Fix 参数运行 sp_change_users_login 时，现在必须指定密码。sp_change_users_login 将把此密码赋给它为用户创建的任何新的登录。下例显示了新的 @Password 参数：

    sp_change_users_login [ @Action = ] 'action'
        [ , [ @UserNamePattern = ] 'user' ]
        [ , [ @LoginName = ] 'login' ]
        [ , [ @Password = ] 'password' ]

@Password 参数只能与 @Action=Auto_Fix 一起使用。下例显示了在使用 Auto_Fix 时 sp_change_users_login 命令的新语法。SQL Server 联机丛书中的其他示例没有变化。

    USE pubs
    go
    EXEC sp_change_users_login 'Auto_Fix', 'Mary', NULL, 'B3r12-36'
    go

### 5.1.7 默认情况下禁用对 OLE DB 提供程序的特殊访问

在 SP1 中引入

如果明确设置了 DisallowAdhocAccess 注册表选项，则默认情况下，不允许对 OLE DB 提供程序进行特殊访问。这表示特殊查询语法（如 OPENDATASOURCE 和 OPENROWSET）无法针对远程服务器工作。要允许特殊访问，必须明确将 DisallowAdhocAccess 选项设置为 0。

### 5.1.8 新的 SqlServerLike 提供程序选项

在 SP1 中引入

为了更有效地处理包含 LIKE 谓词的远程查询，在 SP3 中添加了 SqlServerLike 选项。如果将该选项设置为 1，则 SQL Server 可以对提供程序执行包含 LIKE 谓词的强制查询。以前，如果提供程序不是 SQL Server OLE DB 提供程序，则总是基于本地 SQL Server 实例来计算包含 LIKE 谓词的分布式查询。

### 5.1.9 分布式查询的扩展错误消息

在 SP3 中引入

对于分布式查询，SQL Server 除了返回服务器错误消息以外，还返回提供程序错误消息。当相互链接的服务器之间的查询导致错误时，SQL Server 将检查该提供程序是否支持 IErrorRecords OLE DB 接口。如果支持此接口，则 SQL Server 将调用 GetErrorInfo 函数从该提供程序中获取附加的错误消息，并将这些信息作为错误消息的一部分返回给用户。如果不支持 IErrorRecords 接口，则 SQL Server 的行为将不会改变：SQL Server 将返回一般性错误。

例如，如果对使用 MSDASQL 的服务器（该服务器不支持 sql_variant）运行下列查询:

    SELECT * FROM remote2k.dqtable.dbo.sqlvariantnotnull  --Remote2k 是一台还回服务器。

在应用 SP3 之前，SQL Server 返回下列错误消息：

    服务器: 消息 7356，级别 16，状态 1，行 1
    OLE DB 提供程序“msdasql”为某列提供了不一致的元数据。
    元数据信息在执行时被更改了。

在应用 SP3 之后，SQL Server 将返回下列错误消息：

    服务器: 消息 7356，级别 16，状态 1，行 1
    OLE DB 提供程序“msdasql”为某列提供了不一致的元数据。
    元数据信息在执行时被更改了。
    OLE DB 错误跟踪 [非界面错误: 报告对象“"dqtable"."dbo"."sqlvariantnotnull"”的列“sql_variant”(编译时序号 3)的 DBCOLUMNFLAGS_ISFIXEDLENGTH 在编译时为 16，运行时为 0]。

### 5.1.10 新函数 fn_get_sql 返回 SQL 语句

在 SP3 中引入

SP3 包含新函数 fn_get_sql，该函数为指定的 SQL 句柄返回 SQL 语句的文本。另外，为了支持此函数，在 sysprocesses 系统表中添加了三个新列，如下表所示。

列名 | 数据类型 | 描述
--- | --- | ---
sql_handle | binary(20) | 表示当前正在执行的批或对象。
stmt_start | int | 指定对当前 SQL 语句 sql_handle 的起始偏移量。
stmt_end | int | 指定对当前 SQL 语句 sql_handle 的终止偏移量。 值 -1 表示当前语句运行到 fn_get_sql 函数为指定的 sql_handle 返回的结果的结尾。

##### 语法

fn_get_sql ([ @SqlHandle = ] SqlHandle )

##### 参数

[ @SqlHandle = ] SqlHandle

句柄值。SqlHandle 的数据类型是 binary(20)。

##### 返回表

列名 | 数据类型 | 描述
--- | --- | ---
dbid | smallint | 数据库 ID。对于特殊的 SQL 语句，该值为 NULL。
objectid | Int | 数据库对象的 ID。对于特殊的 SQL 语句，该值为 NULL。
number | smallint | 组的编号（如果过程已分组）。对于不是过程的项，该值为 0；对于特殊的 SQL 语句，该值为 NULL。
encrypted | Bit | 指示对象是否已加密。如果对象未加密，该值为 0；如果对象已加密，该值为 1。
text | Text | SQL 语句的文本。对于已加密对象，该值为 NULL。

##### 备注

可以从 sysprocesses 系统表的 sql_handle 列中获取一个有效的 SQL 句柄。

如果传递的句柄已不再存在于高速缓存中，fn_get_sql 将返回空结果集。如果传递的句柄无效，批处理将停止，并返回下列错误消息：

`服务器: 消息 569，级别 16，状态 1，过程 fn_get_sql，行 12 传递给 fn_get_sql 的句柄无效。`

SQL Server 2000 无法高速缓存某些 Transact-SQL 语句，如大容量复制语句和包含的字符串文字大于 8 KB 的语句。无法使用 fn_get_sql 函数检索这些语句的句柄。

结果集的 text 列已针对可能包含密码的文本进行了筛选。

fn_get_sql 函数返回的信息类似于 DBCC INPUTBUFFER 命令。当无法使用 DBCC INPUTBUFFER 时，请使用 fn_get_sql 函数，例如：

- 当事件具有 255 个以上的字符时。
- 当必须返回存储过程的当前最高嵌套级时。例如，有两个存储过程，分别名为 sp_1 和 sp_2。如果 sp_1 调用 sp_2 并且在 sp_2 运行时从 sysprocesses 系统表获得句柄，则 fn_get_sql 函数将返回 sp_2 的有关信息。此外，fn_get_sql 函数还会返回处于当前最高嵌套级的存储过程的完整文本。

##### 权限

只有 sysadmin 固定服务器角色的成员可以运行 fn_get_sql 函数。

##### 示例

数据库管理员可以使用 fn_get_sql 函数帮助诊断有问题的进程。当管理员确定有问题的服务器进程 ID (SPID) 之后，就可以检索该 SPID 的 SQL 句柄，使用该句柄调用 fn_get_sql 函数，并使用开始和终止偏移量来确定有问题的 SPID 的 SQL 文本。例如：

    DECLARE @Handle binary(20)
    SELECT @Handle = sql_handle FROM sysprocesses WHERE spid = 52
    SELECT * FROM ::fn_get_sql(@Handle)

### 5.1.11 跨数据库所有权链接

在 SP3 中引入

此 Service Pack 提供了一个新选项，可以用来打开和关闭跨数据库所有权链接。在安装过程中，“后向兼容性一览表”对话框显示一个用于配置跨数据库所有权链接的选项。默认情况下，安装程序对所有用户数据库关闭跨数据库的所有权链接。您可以对所有数据库启用跨数据库的所有权链接。有关更多信息，请参见“后向兼容性一览表”对话框。

说明 建议不要对所有数据库启用跨数据库所有权链接。

安装后，可以使用下列方法对实例中的所有数据库打开或关闭跨数据库的所有权链接：

- 使用 sp_configure 系统存储过程的新参数 Cross DB Ownership Chaining。
- 在企业管理器中，使用“SQL Server 属性”对话框中的“安全性”选项卡上的“允许跨数据库所有权链接”选项。
- 使用 SQLServer.Configuration.ConfigValues 数据库管理对象 (DMO) 集合。当 SQLServer 对象引用 SQL Server 2000 SP3 或更高版本的实例时，该集合将包含一个名为 Cross DB Ownership Chaining 的 ConfigValue 对象。

如果对该实例关闭了跨数据库所有权链接，则可以对单个数据库进行配置。使用下列方法可以对数据库打开和关闭跨数据库的所有权链接：

- 使用 sp_dboption 系统存储过程的新选项 db chaining。
- 在企业管理器中，使用“数据库属性”对话框中的“选项”选项卡上的“允许跨数据库所有权链接”选项。
- 使用 DMO 对象 DBOption2 的 DBChaining 属性。

说明 如果以前在 SP3 之前的版本（Build 8.00.760 之前的版本）中启用了跨数据库所有权链接，安装 SP3 之后必须再次启用它。

有关更多信息，请在运行安装程序时单击“后向兼容性一览表”页上的“帮助”按钮、下载 SQL Server 2000 联机丛书的更新版，或者查看知识库文章 810474。

### 5.1.12 跟踪标志 1204 的改进

在 SP3 中引入

跟踪标志 1204 返回参与死锁的锁的类型以及当前受影响的命令。在 SP3 和更高版本中，当启用此跟踪标志时，会将死锁信息自动写入到错误日志中。

### 5.1.13 sp_changedbowner 的权限更改

在 SP3 中引入

只有 sysadmin 固定服务器角色的成员可以运行 sp_changedbowner 系统存储过程。

### 5.1.14 调试功能的更改

在 SP3 中引入

默认情况下，禁用在 Microsoft Visual Studio® 6.0 及其更早版本或 SP3 之前的 SQL Server 查询分析器中调试存储过程的功能，同时还禁用应用程序调试（在调试客户端应用程序过程中停止于 SQL Server Transact-SQL 断点处）。要启用调试功能，请运行 sp_sdidebug，并传递参数 legacy_on。要禁用调试功能，请将 legacy_off 参数传递给此过程。

说明 建议不要在生产用服务器上运行 sp_sdidebug 存储过程。

有关更多信息，请参见 Microsoft 知识库文章 328151。您可在 Microsoft 产品支持服务知识库中找到该文章。

## 5.2 Analysis Services 增强功能

本节讨论 SP3 中包含的 SQL Sever 2000 Analysis Services 的增强功能。

### 5.2.1 远程分区

在 SP1 中引入

在安装了 SP1 或更高版本的本地服务器上创建远程分区时，远程服务器必须使用对本地服务器上的父多维数据集具有完全访问权限的域用户帐户。作为本地服务器上 OLAP 管理员组成员的所有用户帐户，都具有完全访问权限。

此外，如果本地服务器上安装了 SP1 或更高版本，则远程服务器上也必须安装 SP1 或更高版本，这样本地服务器才可以创建或管理远程分区。

### 5.2.2 更新的 Analysis Services 可再分发客户端安装程序

在 SP1 中引入

Analysis Services SP1 及更高版本包括下列客户端可再分发安装程序的更新版本：

- PTSLite.exe
- PTSFull.exe

这些文件位于 SP3 安装目录的 \Msolap\Install\PTS 路径中。

说明 PTSFull.exe 包含 MDAC，而 PTSLite.exe 不包含。

在应用程序中使用这些更新的客户端安装程序，可避免或解决使用 Analysis Services 和 Microsoft Office XP 时可能出现的客户端安装问题。

说明 在 Office XP 中使用 Analysis Services 时，强烈建议升级客户端。

### 5.2.3 支持第三方数据挖掘算法提供程序

在 SP1 中引入

Analysis Services SP1 及更高版本包含对第三方数据挖掘算法提供程序的支持。有关开发数据挖掘算法提供程序的更多信息，请参见 Third Party Data Mining Providers（第三方数据挖掘提供程序）白皮书和 OLE DB for Data Mining Resource Kit（数据挖掘 OLE DB 资源大全），其中包含一个数据挖掘算法提供程序示例。

### 5.2.4 在客户端文件已更新的计算机上安装 Analysis Services

在 SP1 中引入

如果在客户端文件（如 SQL Server 2000 SP1 或 Office XP）已更新的计算机上安装 SQL Server 2000 Analysis Services，则必须应用 Analysis Services SP1 或更高版本，以确保客户端运行正常并且可以浏览多维数据集。

### 5.2.5 增加对虚拟多维数据集引用的 OLAP 多维数据集的限制

在 SP3 中引入

虚拟多维数据集现在最多可以引用 255 个多维数据集。但是，对于在 SP3 以前发布的任何版本的 Microsoft PivotTable® Service 来说，任何引用 64 个以上的多维数据集的虚拟多维数据集都是不可见的。

### 5.2.6 新关键字 DESCRIPTION

在 SP3 中引入

本地多维数据集现在支持度量和维度的内在成员属性 DESCRIPTION。DESCRIPTION 关键字被添加到 CREATE CUBE 多维表达式 (MDX) 语句中，用于支持 DESCRIPTION 内在成员属性的使用。下列 BNF 子句描述了对 CREATE CUBE 语句所做的更改：

    <dimensions def> :: = DIMENSION <dimension name> [<time def>]
    [DIMENSION_STRUCTURE <sub_type>] [<hidden def>] [DESCRIPTION <description expression>]
    <options def> <comma> <hierarchy def list>
    <measures def> :: = MEASURE <measure name> <measure function def>
    [<measure format def>] [<measure type def>] [<hidden def>] [DESCRIPTION <description expression>]
    [<comma> <measures def>]

### 5.2.7 新的 PivotTable Service Restricted Client 属性

在 SP3 中引入

SP3 实现了一个新的 PivotTable Service 连接字符串属性：Restricted Client。此属性可用于限制 PivotTable Service 使用本地多维数据集功能。如果一条语句涉及到创建或使用本地多维数据集，如 CREATE CUBE、CREATE GLOBAL CUBE 和 CREATE SESSION CUBE 语句，那么，使用该语句的任何尝试都会引起错误。此外，对于任何涉及到深层递归的语句（如一系列嵌套的 DRILLDOWN 语句），如果该语句有可能导致 PivotTable Service 所维护的语句堆栈发生溢出，则该语句会引起错误。

此属性用于存储一个字符串值。如果将该值设置为任何以字符“Y”、“y”、“T”或“t”开始的字符串值，或者将其设置为任何可以转换为非 0 数字值的字符串值，则 PivotTable Service 将受到如上所述的限制。如果将该值设置为包括空字符串 ("") 在内的任何其他字符串值，或者将其设置为任何可以转换为等于 0 的数字值的字符串值，则 PivotTable Service 将不受限制。此属性的默认值为“0”。

说明 此属性不限制对本地数据挖掘模型的使用。

### 5.2.8 Safety Options 属性的更改

在 SP3 中引入

将 Safety Options 属性设置为 DBPROP_MSMD_SAFETY_OPTIONS_ALLOW_SAFE 也可以禁止在本地多维数据集中使用 PASSTHROUGH 关键字。

### 5.2.9 默认情况下禁止将知识库迁移到 Meta Data Services

在 SP3 中引入

在 SP3 中，已经禁用在迁移知识库向导中使用 Meta Data Services 知识库格式的选项，并且建议不要使用此格式。但是，如果由于业务原因需要使用此格式，则可以通过 EnableMigrationToMetaDataServicesFormat 注册表项启用该选项。

默认情况下，此注册表项不存在；必须在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OLAP Server\Server Connection Info 中手动创建和设置它才能启用向 Meta Data Services 格式迁移知识库的功能。此注册表项用于存储一个区分大小写的字符串值。如果将该值设置为 1 或 True，则启用向 Meta Data Services 格式迁移知识库的功能。如果将该值设置为其他任何字符串值，或者此注册表项不存在，则禁用向 Meta Data Services 格式迁移知识库的功能。

说明 如果更改了此注册表项的值，则更改将立即生效。

### 5.2.10 必须更改远程 Data 文件夹的权限

在 SP3 中引入

如果 Analysis Services Data 文件夹不在分析服务器计算机上，则运行 SP3 安装程序后必须修改该文件夹的权限。将该文件夹的完全控制权限授予给分析服务器计算机上 OLAP 管理员组的所有成员。以后，在 OLAP 管理员组中添加或删除成员时，请务必更改远程 Data 文件夹的权限，以使其反映 OLAP 管理员组当前的成员。这样备份和还原将可以正常工作。

此外，运行 SP3 安装程序后，必须允许运行分析服务器的帐户对远程 Data 文件夹具有完全控制权限。

如果对在群集配置中运行的 Analysis Services 实例应用 SP3，必须允许域级别 OLAP 管理员组对远程 Data 文件夹具有完全控制权限。有关创建和使用域级别 OLAP 管理员组的更多信息，请参见 Microsoft 产品技术支持服务知识库中的技术支持文章 308023。

## 5.3 复制增强功能

本节讨论 SP3 中包含的 SQL Sever 2000 复制增强功能。

### 5.3.1 事务复制 UPDATE 自定义存储过程

在 SP1 中引入

在事务复制设置期间，将在订阅数据库中创建插入、删除和更新操作的自定义存储过程。不管 UPDATE 语句会影响多少列，更新自定义存储过程都将更新订阅表中的所有列。任何未更改的列都将重置为更新前已存在的相同值。通常，此操作不会引起问题。但是，如果这些列中的任意一列被编制索引，则重置操作会占用大量资源。

如果您使用事务复制，并且订阅表中有若干个索引，而且只有几个列值因为更新而发生改变，则在订阅服务器应用更改时，维护索引的开销可能会成为限制性能的因素。例如，用于报告用途的订阅数据库可能具有比发布数据库更多的索引。在运行时动态生成 UPDATE 语句可以改善性能。此更新将仅包括已更改的列，从而创建最优的 UPDATE 字符串。

此 Service Pack 包含一个新的能够生成自定义存储过程的存储过程 sp_scriptdynamicupdproc，在运行时，您可以在订阅服务器中使用该自定义存储过程动态生成 UPDATE 语句。但是，在运行时生成动态 UPDATE 语句需要额外的处理。

#### sp_scriptdynamicupdproc

存储过程 sp_scriptdynamicupdproc 可以生成能够创建动态更新存储过程的 CREATE PROCEDURE 语句。自定义存储过程中的 UPDATE 语句是根据 MCALL 语法（该语法指示要更改的列）动态生成的。如果订阅表上索引的数目不断增长，并且被更改列的数目很少，请使用此存储过程。此存储过程在发布数据库的发布服务器上运行。

##### 语法

sp_scriptdynamicupdproc [ @artid =] artid

##### 参数

[@artid =] artid

项目 ID。artid 的数据类型为 int，无默认值。

##### 结果集

返回由单个 nvarchar(4000) 列组成的结果集。该结果集构成用于创建自定义存储过程的完整 CREATE PROCEDURE 语句。

##### 备注

sp_scriptdynamicupdproc 用在事务复制中。默认的 MCALL 脚本逻辑包括 UPADATE 语句中的所有列，并使用一个位图来确定已更改的列。如果某列未更改，则将其设置回它本身，这通常不会引起问题。如果该列被编制索引，则需要进行额外的处理。与此不同的是，此存储过程使用动态方法：它仅包括已更改的列，从而提供了一个最优的 UPDATE 字符串。但在运行时生成动态的 UPDATE 语句后则需进行额外的处理。建议您测试动态存储过程方法和静态默认方法，然后选择一个最佳解决方案以满足您的特殊需要。

##### 权限

public 角色的成员可执行 sp_scriptdynamicupdproc。

##### 示例

本例在 pubs 数据库的 authors 表中创建一个项目（artid 设为 1），并指定 UPDATE 语句是执行的自定义存储过程：

    'MCALL sp_mupd_authors'

通过在发布服务器上运行下列存储过程，生成将由订阅服务器上的分发代理程序执行的自定义存储过程：

    EXEC sp_scriptdynamicupdproc @artid = '1'
    此语句返回：

    create procedure [sp_mupd_authors]
      @c1 varchar(11),@c2 varchar(40),@c3 varchar(20),@c4 char(12),@c5 varchar(40),@c6 varchar(20),
      @c7 char(2),@c8 char(5),@c9 bit,@pkc1 varchar(11),@bitmap binary(2)
    as

    declare @stmt nvarchar(4000), @spacer nvarchar(1)
    select @spacer =N''
    select @stmt = N'update [authors] set '

    if substring(@bitmap,1,1) & 2 = 2
    begin
      select @stmt = @stmt + @spacer + N'[au_lname]' + N'=@2'
      select @spacer = N','
    end
    if substring(@bitmap,1,1) & 4 = 4
    begin
      select @stmt = @stmt + @spacer + N'[au_fname]' + N'=@3'
      select @spacer = N','
    end
    if substring(@bitmap,1,1) & 8 = 8
    begin
      select @stmt = @stmt + @spacer + N'[phone]' + N'=@4'
      select @spacer = N','
    end
    if substring(@bitmap,1,1) & 16 = 16
    begin
      select @stmt = @stmt + @spacer + N'[address]' + N'=@5'
      select @spacer = N','
    end
    if substring(@bitmap,1,1) & 32 = 32
    begin
      select @stmt = @stmt + @spacer + N'[city]' + N'=@6'
      select @spacer = N','
    end
    if substring(@bitmap,1,1) & 64 = 64
    begin
      select @stmt = @stmt + @spacer + N'[state]' + N'=@7'
      select @spacer = N','
    end
    if substring(@bitmap,1,1) & 128 = 128
    begin
      select @stmt = @stmt + @spacer + N'[zip]' + N'=@8'
      select @spacer = N','
    end
    if substring(@bitmap,2,1) & 1 = 1
    begin
      select @stmt = @stmt + @spacer + N'[contract]' + N'=@9'
      select @spacer = N','
    end
    select @stmt = @stmt + N' where [au_id] = @1'
    exec sp_executesql @stmt, N' @1 varchar(11),@2 varchar(40),@3 varchar(20),@4 char(12),@5 varchar(40),
                                 @6 varchar(20),@7 char(2),@8 char(5),@9 bit',@pkc1,@c2,@c3,@c4,@c5,@c6,@c7,@c8,@c9

    if @@rowcount = 0
       if @@microsoftversion>0x07320000
          exec sp_MSreplraiserror 20598

运行此存储过程之后，可以使用生成的脚本在订阅服务器上手动创建存储过程。

### 5.3.2 唯一列上的事务复制 UPDATE 语句

在 SP1 中引入

在事务复制中，通常将 UPDATE 语句作为更新进行复制。但是，如果更新改变了唯一索引、聚集索引或用作唯一约束的表达式中的任何列，则在订阅服务器中执行更新时首先执行一个 DELETE 语句，然后执行一个 INSERT 语句。这是因为这种更新可能影响到多行，而且如果更新是逐行进行的，则可能会破坏唯一性。

如果更新操作只影响一行，则不会破坏唯一性。因此，在此 Service Pack 中添加了跟踪标志 8207，以允许将对任何唯一列进行的并且只影响一行的更新作为 UPDATE 语句进行复制。这一优化是特别针对满足下列条件的应用程序而添加的：这些应用程序在订阅服务器上安装用户定义的 UPDATE 触发器，并且要求这些触发器在更新操作仅影响唯一列中的一行时才被触发。

要使用跟踪标志 8207，请从命令提示符处打开该标志 (sqlservr.exe -T8207)，或在日志读取器代理程序启动之前，使用 DBCC TRACEON(8207, -1) 在运行时将其打开。

重要 通常，跟踪标志 8207 用于只读事务复制。如果在订阅服务器上可能发生主键 UPDATE，则不要对可更新的订阅使用此跟踪标志。

### 5.3.3 去除对并发快照处理的限制

在 SP1 中引入

在 SQL Server 2000 中，如果发布表中包含一个既非主键又非聚集键的唯一索引，建议不要使用并发快照处理。如果在生成并发快照时修改了聚集键的数据，则为订阅服务器应用并发快照时，可能会出现重复键错误，从而导致复制失败。此 Service Pack，去除了对使用并发快照处理的限制。

### 5.3.4 事务复制脚本自定义存储过程

在 SP1 中引入

设置 nosync 订阅（即不接收初始快照的订阅）时，必须手动创建 INSERT、UPDATE 和 DELETE 语句的自定义存储过程。通常，在传送初始快照时，会在订阅服务器上创建这些语句。新添加的存储过程 sp_scriptpublicationcustomprocs 可以为发布级的自定义存储过程生成脚本。这一新功能可以使设置 nosync 订阅变得更加容易。

#### sp_scriptpublicationcustomprocs

在启用了自动生成自定义过程架构的选项的发布中，存储过程 sp_scriptpublicationcustomprocs 为所有表项目编写自定义 INSERT、UPDATE 和 DELETE 过程的脚本。在设置手动应用快照的订阅时，sp_scriptpublicationcustomprocs 特别有用。

##### 语法

sp_scriptpublicationcustomprocs [@publication]= publication_name

##### 参数

[@publication]`=` publication_name

发布名称。publication_name 的数据类型为 sysname，无默认值。

##### 返回代码值

0（成功）或 1（失败）

##### 结果集

返回由单个 nvarchar(4000) 列组成的结果集。该结果集构成创建自定义存储过程所需的完整 CREATE PROCEDURE 语句。

##### 备注

如果没有自动生成自定义过程 (0x2) 架构选项，则不会为项目编写自定义过程脚本。

##### 权限

执行权限被授予 public。在此存储过程中将执行过程安全性检查，以便将具有访问权限的用户限制为当前数据库中的 sysadmin 固定服务器角色和 db_owner 固定数据库角色的成员。

##### 示例

本例在名为 Northwind 的发布中生成一个自定义存储过程的脚本。

    exec Northwind.dbo.sp_scriptpublicationcustomprocs
    @publication = N'Northwind'

### 5.3.5 合并复制基于保持的元数据清除

在 SP1 中引入

如果在合并复制系统表中有大量元数据，清除元数据将会改善性能。在 SQL Server 2000 SP1 之前，元数据只能通过运行 sp_mergecleanupmetadata 来清除。但是，SQL Server 2000 SP1 及更高版本包含基于保持期的元数据清除功能，这意味着可以从下列系统表中自动删除元数据：

- MSmerge_contents
- MSmerge_tombstone
- MSmerge_genhistory
- 任何以前的映像表（如果存在）

说明 如果在发布中启用了 @keep_partition_changes 同步优化选项，则以前的映像表是存在的。

出现下列情况时，将发生基于保持的元数据清除：

- 如果合并代理程序参数 –MetadataRetentionCleanup 设为 1（这是默认情况），合并代理程序将清除合并所涉及的订阅服务器和发布服务器。
- 如果参数 -MetadataRetentionCleanup 设为 0，不进行自动清除。在这种情况下，请通过执行 sp_mergemetadataretentioncleanup 手动启动基于保持的元数据清除。必须在每一个应被清除的发布服务器和订阅服务器上执行此存储过程。建议（但不是必须）在相似的时刻清除发布服务器和订阅服务器（请参见本节后面的防止虚假冲突）。

  说明 对于随 SQL Server 2000 SP1 及更高版本提供的所有合并代理配置文件，-MetadataRetentionCleanup 参数都设置为 1。如果将服务器升级到 SP1 或更高版本，然后添加合并复制，则合并代理配置文件将自动更新以包括此参数。如果将已启用合并复制的服务器升级到 SP1 或 SP3，则合并代理配置文件不会自动更新；请通过运行 sp_add_agent_parameter 来更新配置文件（请参见本节后面的 sp_add_agent_parameter 的其他参数）。

  重要 发布的默认保持期为 14 天。如果某个项目同时属于多个发布，则可能有几个不同的保持期。此时，将使用最长的保持期来确定清除可能发生的最早时刻。如果在数据库上有多个发布，并且其中有一个发布使用无限的发布保持期 (@retention=0)，则不会自动清除该数据库的合并元数据。因此，使用无限发布保持时要格外小心。

#### sp_add_agent_parameter 的其他参数

系统存储过程 sp_add_agent_parameter 现在有一个 MetadataRetentionCleanup 参数，通过此参数可在合并代理程序配置文件中添加或删除元数据保持清除操作。值为 1 表明配置文件应包括清除；值为 0 表明不应包括清除。例如，要将元数据保持清除添加到配置文件中，请执行下列代码：

    EXEC sp_add_agent_parameter @profile_id=<my_profile_id>, @parameter_name='MetadataRetentionCleanup', @parameter_value=1

#### 不同版本的 SQL Server 中的拓扑中元数据清除

若要在与合并复制有关的数据库中自动进行基于保持的清除，此数据库及合并代理程序必须都位于运行 SQL Server 2000 SP1 或更高版本的服务器上。例如：

- SQL Server 7.0 请求订阅服务器不会在 SQL Server 2000 SP1 发布服务器上运行清除。
- SQL Server 2000 SP1 强制合并代理程序不会在 SQL Server 2000（无 SP1）订阅服务器数据库上运行清除。
- SQL Server 2000 SP1 强制合并代理会在 Server 2000 SP1 发布服务器数据库上运行清除，即使该发布服务器上有正在运行 SQL Server 2000 或更早版本的订阅服务器。

在某些服务器上进行自动清除而在其他服务器上不进行自动清除时，最多会引起虚假冲突，而这种冲突极少发生。对于包括 SQL Server 2000 SP1 之前的 SQL Server 版本的拓扑，可以通过在所有未被自动清除的服务器上运行 sp_mergemetadatacleanup 来改善其性能。

#### 防止虚假冲突

基于保持的元数据清除可以防止在其他节点上发生未汇集的和无提示的更改覆盖。然而，下列情况下会发生虚假冲突：

- 在一个节点上清除元数据，而在其他节点上不清除。
- 已清除节点上的后续更新发生在元数据被删除的那一行。

例如，如果元数据在发布服务器上被清除而在订阅服务器上未被清除，并且在发布服务器进行了一次更新，则即使数据似乎已同步，仍会发生冲突。

若要防止此冲突，需确保元数据几乎同时在相关节点上被清除。如果将 -MetadataRetentionCleanup 设为 1，则在合并开始之前将自动清除发布服务器和订阅服务器，从而确保节点被同时清除。如果发生冲突，请使用合并复制冲突查看器检查冲突并在必要时更改结果。

如果某个项目属于多个发布或位于某个重新发布方案中，则给定行在发布服务器和订阅服务器上的保持期可能不同。若要减少元数据在一侧清除而在另一侧未清除的可能性，建议对不同的发布使用相似的保持期。

说明 如果在系统表中有大量必须清除的元数据，合并处理的运行时间可能会比较长。请定期清除元数据以避免出现此情况。

### 5.3.6 合并复制的备份和还原问题

在 SP1 中引入

从某个备份还原的发布数据库首先应与一个具有全局订阅（即具有分配的优先级值的订阅）的订阅数据库同步，以确保正确的汇集行为。同步可以确保能够重新正确地应用发布数据库中由于还原操作而丢失的更改。

不要将发布数据库与含有匿名订阅的订阅数据库同步。因为匿名订阅没有将更改应用于发布数据库所需的足够的元数据，所以这种同步可能会导致数据未汇集。

在规划合并复制的备份和还原操作时，还需考虑下列几个问题：

- 从没有超过保持期的备份中还原订阅数据库。

只有当备份时间不超过订阅服务器所订阅的所有发布的最短保持期时，才从备份中还原订阅数据库。例如，如果订阅服务器订阅了三个保持期分别为 10 天、20 天和 30 天的发布，则用于还原数据库的备份的保持时间不应超过 10 天。

- 生成备份之前进行同步。

强烈建议在执行备份之前将订阅服务器与发布服务器同步。否则，从该备份还原订阅服务器时，系统可能不会正确汇集。虽然备份文件本身可能很新，但自从与发布服务器进行上一次同步以来的时间可能与保持期一样长。例如，假设有一个保持期为 10 天的发布，上一次同步发生在 8 天以前，那么现在即应执行备份。如果在 4 天后应用备份，则上一次同步将已在 12 天以前发生，这就超过了保持期。如果恰好在备份前同步订阅服务器，则订阅数据库将处于保持期内。

- 如果更改了发布保持期值，请重新初始化订阅服务器。

如果需要更改发布的保持期值，可手动重新初始化订阅服务器，以避免数据不汇集。当到达发布保持期时，基于保持期的元数据清除功能将从合并系统表中删除过时的元数据。

发布的保持期值用于确定保持期内尚未同步的发布何时到期。如果在清除之后增加了发布的保持期，而某个订阅试图与发布服务器（已删除元数据）合并，则该订阅将不会到期，这是因为保持期值已经增加了。而且，发布服务器没有足够的元数据来下载对订阅服务器所做的更改，从而导致数据不汇集。

- 请对所有发布服务器及其可选同步伙伴使用相同的发布保持期值。使用其他值可能导致数据不汇集。

### 5.3.7 从不同版本的 SQL Server 还原复制的数据库

在 SP1 中引入

如果将备份还原到相同的服务器和数据库（即运行与创建备份的服务器相同的版本），可以保留复制设置。如果将复制的数据库还原到与备份数据库时不同的 SQL Server 版本，则需考虑下列问题：

- 如果要将数据库从使用 SQL Server 2000 创建的备份还原到 SQL Server 2000 SP3，并希望保留复制设置，则必须运行 sp_vupgrade_replication。运行 sp_vupgrade_replication 可确保升级复制元数据。如果不运行 sp_vupgrade_replication，则复制元数据可能会处于一种无法预知的状态。
- 如果要将数据库从使用 SQL Server7.0（发行版本、SP1、SP2 或 SP3）创建的备份还原到 SQL Server 2000，并希望保留复制设置，则必须在安装 Service Pack 前重新创建备份。可以将数据库直接从在 SQL Server 7.0 中创建的复制数据库的备份还原到 SQL Server 2000 SP3，但是无法保留复制设置。

### 5.3.8 日志读取器代理的新参数 -MaxCmdsInTran

在 SP1 中引入

从 SP1 开始，为日志读取器代理添加了一个新的命令提示参数 -MaxCmdsInTran。对于影响大量命令的事务（通常是大规模更新或删除），分发代理必须等待日志读取器代理将整个事务写入分发数据库之后，才能开始将该事务传播到订阅服务器。这一延迟会阻塞分发代理，并降低这两个代理之间的并行能力。

通过使用 –MaxCmdsInTran，日志读取器代理可以将大的事务分割成较小的事务块，每个事务块所包含的命令数量不超过 -MaxCmdsInTran 输入。因此，在日志读取器代理处理事务的后续块时，分发代理可以开始处理该事务前面的块。

日志读取器代理与分发代理之间并行能力的改善提高了总复制吞吐量。但是，请注意，这些事务块在订阅服务器上是作为单个事务提交的，这破坏了作为 ACID 属性（原子性、一致性、隔离性和持久性）之一的原子性属性。在大多数情况下，这一结果不是问题，但建议进行测试以确保不会引起问题。

##### 定义 –MaxCmdsInTran 参数

请为 -MaxCmdsInTran 参数值指定正整数值（大于或等于 1）。指定值 0 等效于不使用该参数。因为只有当事务非常大时此参数才能改善性能，所以此参数的值通常不应小于 5000。例如：

    logread.exe -MaxCmdsInTran 10000.

若要使用此参数，发布服务器必须运行 SQL Server 2000 SP1 或更高版本，且必须将日志读取器代理程序和分发数据库升级至 SP3。否则，将忽略 MaxCmdsInTran。

### 5.3.9 非唯一聚集索引的限制

在 SP2 中引入（仅适用于事务复制）。

在为事务复制发布某个表后，将无法在该表上创建非唯一聚集索引。在创建该索引之前，首先必须除去任何包含该表的发布。

### 5.3.10 快照代理的新命令行参数 -MaxNetworkOptimization

在 SP2 中引入

在正常处理过程中，当某些行不属于订阅服务器的分区时，合并复制会向订阅服务器发送 DELETE 命令。这种 DELETE 命令也称为不相干删除。不相干删除不会影响数据的完整性或汇集，但可能导致不必要的网络通信。

要减少不相干删除导致的网络通信，可以在合并复制发布中使用新的快照代理程序参数
-MaxNetworkOptimization。将该参数设为 1 可尽量减少不相干删除，从而最大程度地优化网络性能。

说明 仅当合并复制的同步优化选项设为 true（sp_addmergepublication 的 @keep_partition_changes 参数）时，将此参数设为 1 才有用。

默认值为 0，因为如果存在多级联接筛选器和复杂的子集筛选器，则将该参数设为 1 会导致存储更多的元数据，并导致发布服务器的性能降低。应当认真评估复制拓扑结构，并且只有当不相干删除导致的网络通信量高得无法接受时，才将 -MaxNetworkOptimization 设为 1。

可以通过执行系统过程 sp_add_agent_parameter 将此参数添加到快照代理程序配置文件中，如下所示：

    EXEC sp_add_agent_parameter 1, 'MaxNetworkOptimization', 1

### 5.3.11 合并复制使用新角色

在 SP3 中引入

SP3 将自动创建供合并复制使用的新角色。该新角色的名称形式为 MSmerge-<publication ID>。该角色是在发布服务器上为每个合并复制发布而创建的，并且作为发布访问列表 (PAL) 来控制对发布服务器上的合并发布的访问。如果除去该角色，可以运行 SP3 包含的新存储过程 sp_createmergepalrole 来重新创建该角色。此存储过程将在发布数据库的发布服务器上执行从而重新创建该角色。

##### 语法

sp_createmergepalrole [ @publication = ] 'publication'

##### 参数

[@publication = ] 'publication'

发布名称。publication 的数据类型为 sysname，没有默认值。此参数用于选择在重新创建由合并复制所使用的角色时使用的发布。

##### 返回代码值

0（成功）或 1（失败）

##### 备注

运行 sp_createmergepalrole 时会在 sysusers 表中为新角色添加一个新行。此新角色的名称基于 sysmergepublications 表中对应于给定 publication 的 pubid 列的值。角色名称的前缀为“MSMerge_”，同时将 pubid 值追加到角色名称中（不带连字符）。

##### 权限

只有 sysadmin 固定服务器角色的成员或 db_owner 固定数据库角色的成员才能运行 sp_createmergepalrole。

### 5.3.12 非系统管理员用户创建的订阅的新要求

在 SP3 中引入

如果创建某个订阅的用户不是 sysadmin 固定服务器角色的成员，则必须执行下列任一操作：

- 使用登录名和密码配置 SQL Server 代理的代理帐户，以便与复制代理程序关联的 SQL Server 代理作业步骤能够拥有足够的运行特权。有关更多信息，请参见 SQL Server 联机丛书中的“xp_sqlagent_proxy_account”主题。
- 在运行该代理之前，请将作业步骤的所有者更改为作为 sysadmin 固定服务器角色成员的用户。

说明 远程代理激活功能总是要求作业步骤在 sysadmin 固定服务器角色的用户帐户的上下文中运行。

### 5.3.13 存储过程权限的更改

在 SP3 中引入

许多用于实现、管理和监视复制拓扑的存储过程的权限已经更改。这些更改中的大多数都涉及到使运行存储过程所需的权限变得更为严格。有关新权限的更多信息，请查阅 SQL Server 联机丛书更新版中有关复制存储过程的 Transact-SQL 参考文档。有关更新版的 SQL Server 联机丛书的更多信息，请参见 1.5 更新的联机丛书文档可用。

### 5.3.14 sp_addmergearticle 和 sp_changemergearticle 的新参数

在 SP3 中引入

sp_addmergearticle 和 sp_changemergearticle 中已经同时添加了一个新参数 @published_in_tran_pub。此参数用于指明是否将合并发布中的一个项目同时发布到事务发布中。@published_in_tran_pub 的数据类型为 nvarchar(5)，默认值为 FALSE。TRUE 用于指明将某个项目同时发布于事务发布中。

说明 在 sp_changemergearticle 中更改此参数时，必须使快照无效并且必须重新初始化订阅服务器。

### 5.3.15 配置发布和分发向导的新页面

在 SP3 中引入

配置发布和分发向导现在包含一个新页：“分发服务器密码”。如果选择一个或多个发布服务器将此服务器用作远程分发服务器，并且这些发布服务器中有一个或多个需要密码，则必须键入密码。发布服务器和远程分发服务器之间的连接是链接服务器和远程服务器组成的混合网络。此连接使用登录名 distributor_admin。默认情况下，会在远程分发服务器中将服务器配置为非信任的发布服务器，因而需要密码。

说明 如果已下载并已安装 SQL Server 2000 联机丛书（更新 - SP3），则在单击该新页的“帮助”按钮时可得到上述信息。

### 5.3.16 对 Windows 同步管理器支持的更改

在 SP3 中引入

SQL Server 允许您启用现有的订阅（使用 SQL Server 企业管理器 SQL-DMO 和复制存储过程创建），以便与 Windows 同步管理器一起使用。还可以使用 Windows 同步管理器创建新订阅。在您应用该 Service Pack 以后，当 Windows 同步管理器同步订阅时，将提示您输入连接到参与同步的服务器所需的一个或多个密码。

### 5.3.17 附加或还原复制数据库要求的更改

在 SP3 中引入

应用 SP3 后，若要附加或还原已发布准备复制的数据库，用户必须是 sysadmin 固定服务器角色的成员，并且必须已启用跨数据库链接。如果不满足这些条件，可以在数据库上执行 sp_changedbowner 存储过程，将数据库所有权指派给 sa 内置管理员登录。这可确保复制正常工作。

说明 只有 sysadmin 固定服务器角色的成员能够执行 sp_changedbowner。

有关跨数据库所有权链接的更多信息，请参见 5.1.11 跨数据库所有权链接。

## 5.4 SQL Server 代理增强功能

本节讨论 SP3 中包含的对 SQL Server 代理的增强功能。

### 5.4.1 SQL Server 代理记录帐户信息

在 SP2 中引入

“SQL Server 代理作业历史记录”现在会记录运行每个作业步骤的 Windows 帐户。此信息可以帮助管理员诊断与调度作业（包括为复制和数据转换服务任务定义的调度作业）有关的安全性问题。

### 5.4.2 主/目标服务器配置的更改

在 SP3 中引入

多服务器管理是自动执行跨越多个 SQL Server 实例的管理任务的过程。如果管理两个以上的服务器并且要执行集中式维护任务，请使用多服务器管理。

在 SP3 中，SQL Server 代理服务帐户不要求一定是 Windows 管理员帐户，除非您需要使用 SQL Server 代理的代理帐户。有关 SQL Server 代理的代理帐户的更多信息，请参见 5.7.3 SQL Server 代理的代理帐户的改进。SQL Server 代理服务帐户必须是 sysadmin 固定服务器角色的成员。

必须具有至少一个主服务器和至少一个目标服务器才能使用多服务器管理。主服务器将作业分发到目标服务器并接收来自目标服务器的事件。主服务器集中存储目标服务器上运行的作业的作业定义副本。目标服务器定期连接到其主服务器以更新它要执行的作业列表。如果存在新作业，目标服务器将下载该作业然后断开与主服务器的连接。目标服务器在完成作业后，会重新连接到主服务器并报告作业状态。

在应用 SP3 之前，必须完成几个步骤以升级 SQL Server 2000 主/目标服务器配置。SP3 引入的更改与 SQL Server 7.0 目标服务器以及未运行 SP3 的任何服务器都不兼容。它是对原始 SQL Server 2000 功能的更改。

升级主/目标服务器配置

1. 在主服务器上新建一个主服务器 (MSX) 帐户。这样做是为了让目标服务器 (TSX) 做好升级准备。要完成此操作，请运行下列命令。

       --选项 A：Windows 身份验证
       EXEC sp_grantlogin 'DOMAIN\user'
       GO
       USE msdb
       GO
       EXEC sp_adduser 'DOMAIN\user', 'DOMAIN\user', 'TargetServersRole'
       GO

       --选项 B：SQL Server 身份验证
       --查看下面的解释了解详细信息。
       EXEC sp_addlogin <MSXAccount>, <MSXAccountPassword>, 'msdb'
       GO
       USE msdb
       GO
       EXEC sp_adduser <MSXAccount>, <MSXAccount>, 'TargetServersRole'
       GO

   其中，<MSXAccount> 表示所选的 SQL 登录名，<MSXAccountPassword> 表示关联密码。

   说明 这些值必须包含在单引号内。

选择 MSX 帐户时可考虑下列选项：

- Windows 身份验证。这是最安全的选项，因为不需要存储密码，而且不具有本地 Windows 管理员权限也可以配置 SQL Server 和 SQL Server 代理。
- SQL Server 身份验证。这要求 SQL Server 代理服务帐户具有本地 Windows 管理员权限，原因在于 SQL Server 将用户名和密码作为 LSA（本地安全权限）机密进行存储，并只允许本地 Windows 管理员访问。可以为所有 TSX 服务器创建一个帐户，也可以为每个目标服务器分别创建一个帐户。

不要指定 SQL Server 代理探测帐户 (<machine_name>_msx_probe_login)。在升级到 SP3 的过程中，SQL Server 会删除旧的探测帐户，因为 TSX 服务器不再使用它们。

2. 将 TSX 服务器逐个升级到 SP3。（应用此 Service Pack 之前，请参见步骤 3 以获得有关升级时间安排的更多信息。）
3. 为了尽可能缩短停机时间，请在完成 SP3 更新后不久即在每个 TSX 服务器上运行扩展存储过程 xp_sqlagent_msx_account。

   说明 运行 xp_sqlagent_msx_account 之后，必须在每个服务器上停止并重新启动 SQL 代理。

   有关 xp_sqlagent_msx_account 的更多信息，请参见 5.4.3 新的 SQL Server 代理扩展存储过程。

4. 对主服务器应用 SP3。SP3 安装程序将删除旧的 _msx_probe 帐户，因为 TSX 服务器将不再使用它们。不会删除拥有 SQL 代理作业的帐户，您必须将这些作业的所有者更改为其他用户并手动删除这些帐户。如果您希望继续使用拥有 SQL 代理作业的旧 _msx_probe 帐户，则可能必须更改 _msx_probe 帐户的密码。

### 5.4.3 新的 SQL Server 代理扩展存储过程

在 SP3 中引入

SP3 包含一个新的扩展存储过程，它允许配置一个供 SQL Server 代理 TSX 服务器用来从 MSX 主服务器下载指令的帐户。该帐户也称为 MSX 帐户，即主服务器帐户。

##### xp_sqlagent_msx_account

xp_sqlagent_msx_account 扩展存储过程在 TSX 服务器上的 LSA 机密设置中设置或检索 SQL Server 代理 MSX 帐户的用户名和密码。只有 sysadmin 固定服务器角色的成员才能运行此扩展存储过程。

SQL Server 代理必须处于运行状态才能执行此扩展存储过程。此外，如果指定的帐户为 SQL Server 登录，则 SQL Server 代理必须具有本地 Windows 管理员权限。其原因在于 SQL Server 代理将用户名和密码作为 LSA 机密进行存储，并且只允许本地 Windows 管理员访问。

##### 语法

xp_sqlagent_msx_account

{N'GET' |

N'SET' | N'DEL', N'MSX_domain_name', N'MSX_username', N'MSX_password'

}

##### 参数

N'GET'

检索当前的 SQL Server 代理 MSX 帐户。N'GET' 是 nvarchar 类型，没有默认值。出于安全原因，不报告密码。

N'SET'

设置用作 SQL Server 代理 MSX 帐户的帐户。请使用 MSX_username 和 MSX_password 参数来指定用作 SQL Server 代理 MSX 帐户的帐户。N'SET' 是 nvarchar 类型，没有默认值。

N'DEL'

删除 SQL Server 代理 MSX 帐户。

MSX_domain_name

保留供以后使用。

MSX_username

要用作 SQL Server 代理 MSX 帐户的 Windows 帐户的名称。如果以空字符串指定此参数和 MSX_password 的值选择 Windows 安全性。在这种情况下，将使用 SQL Server 代理服务帐户凭据登录到 MSX 服务器。MSX_username 是 nvarchar 类型，没有默认值。

MSX_password

在 MSX_username 中指定的 SQL Server 帐户的密码。如果以空字符串指定此参数和 MSX_username 的值，将选择 Windows 安全性。在这种情况下，将使用 SQL Server 代理服务帐户凭据登录到 MSX 服务器。MSX_password 是 nvarchar 类型，没有默认值。

说明 必须按顺序指定 xp_sqlagent_msx_account 的参数。不能使用命名参数。

##### 返回代码值

成功时返回值 0，失败时返回值 1。

当 xp_sqlagent_msx_account 失败并返回值 1 时，SQL Server 将生成有关该错误的错误信息。

##### 结果集

如果已经设置 SQL Server 代理 MSX 帐户，则指定 N'GET' 时 xp_sqlagent_msx_account 将返回含有下列信息的结果集。

列 | 数据类型 | 描述
--- | --- | ---
domain | sysname | 暂缺。保留供以后使用。
username | sysname | 用作 SQL Server 代理 MSX 帐户的帐户。

如果尚未设置 SQL Server 代理 MSX 帐户，或指定了 N'SET'，则不返回结果集。

##### 权限

默认情况下，将 xp_sqlagent_msx_account 的执行权限授予 securityadmin 固定服务器角色的成员。

##### 示例

1. 检索当前分配的 SQL Server 代理 MSX 帐户

下例检索当前分配的用作 SQL Server 代理 MSX 帐户的帐户：

    EXEC master.dbo.xp_sqlagent_msx_account N'GET'

2. 将 SQL Server 代理 MSX 帐户设置为使用 Windows 身份验证

下例将 SQL Server 代理 MSX 帐户设置为使用 Windows 身份验证：

    EXEC master.dbo.xp_sqlagent_msx_account N'SET',
       N'',  -- 保留以备将来使用
       N'',  -- MSX_username
       N''  -- MSX_password

###### C. 将 SQL Server 代理 MSX 帐户设置为使用 SQL Server 身份验证

下例将 SQL Server 代理 MSX 帐户设置为 Ralph 并指定密码：

    EXEC master.dbo.xp_sqlagent_msx_account N'SET',
       N'',  -- 保留以备将来使用
       N'Ralph',  -- MSX_username
       N'RalphPwd'  -- MSX_password

###### D. 删除 SQL Server 代理 MSX 帐户

下例删除 SQL Server 代理 MSX 帐户。这意味着 SQL Server 代理默认为使用 Windows 集成安全身份验证。

    EXEC master.dbo.xp_sqlagent_msx_account N'DEL'

### 5.4.4 SQL Server 代理权限检查

在 SP3 中引入

SQL Server 现在将检查并确保代理作业的所有者具有追加或重写每个作业所产生的输出日志文件的权限。该检查采用下列三种方法：

- 如果作业所有者是 sysadmin 固定服务器角色的成员，则可以将作业输出日志文件写入服务器。
- 如果作业所有者是 Windows 用户，则 SQL Server 将测试该用户是否对服务器上所选作业输出日志文件位置具有写权限。
- 如果作业所有者是 SQL Server 用户，则 SQL Server 将测试 SQL Server 代理的代理帐户是否对服务器上所选作业输出日志文件位置具有写权限。如果尚未设置代理帐户，则不会写入日志。

在所有情况下，均使用 SQL Server 代理凭据写入作业，但 SQL Server 现在将测试并确保用户是否对服务器上所选作业输出日志文件位置具有写权限。错误被记录在作业历史记录中，但如果无法写入日志文件，作业步骤也不会失败。

## 5.5 SQL Server 连接组件增强功能

本节讨论 SP3 包含的 SQL Sever 2000 连接组件增强功能。

### 5.5.1 Microsoft 数据访问组件的更新

在 SP3 中引入

SP3 包含对 MDAC（Microsoft 数据访问组件）的更新。在安装 SP3 时，将同时安装 MDAC 2.7 Service Pack 1。与 SQL Server 2000 安装的 MDAC 版本 (MDAC 2.6) 相比，MDAC 2.7 SP1 的功能并未更改，但它包含了功能修复和安全性增强功能。MDAC 2.71 包含 MSXML 3 SP3 升级。

说明 如果安装程序检测到已安装了同一版本或更高版本的 MDAC，则不会安装此版本的 MDAC。

有关此版本的 MDAC 的更多信息，请参见 microsoft.com 上的 Microsoft 通用数据访问网站。此版本的 MDAC 中包含的功能修复将记录在知识库文章 326848 中。您可以在 Microsoft 产品支持服务知识库中访问此文章。

### 5.5.2 支持 QLogic 虚拟接口构架

在 SP3 中引入

SQL Server 现在支持 QLogic 虚拟接口构架 (VIA) 系统区域网络 (SAN) 实现。要启用对 QLogic VIA 连接的 SQL Server 支持，客户端计算机和服务器计算机都必须在相应的 Windows system32\drivers\etc 文件夹内名为 Vihosts 的文件中提供 IP 地址解析。

Vihosts 文件的格式应如下所示：

<服务网计算机的 VI IP 地址> <SERVER_COMPUTERNAME>

<客户端计算机的 VI IP 地址> <CLIENT_COMPUTERNAME>

例如：

139.4.130.1 SQLCOMPUTER

139.4.130.2 SQLCLIENT

请使用 QLogic VIA 网卡各自的 IP 地址和实际的计算机名。否则，将无法与命名实例或其他 IP 协议（如 TCP 或命名管道）建立连接。Giganet VIA 连接不一定需要 Vihosts 文件。

说明 您必须在客户端计算机上使用客户端网络实用工具标识正确的 VIA 供应商。请在“供应商”下拉框中选择适当的值。还应在服务器计算机上通过服务器网络实用工具完成相应的操作。

## 5.6 Meta Data Services 增强功能

本节讨论 SP3 中包含的 SQL Sever 2000 Meta Data Services 增强功能。

### 5.6.1 元数据浏览器以 Unicode 导出元数据

在 SP1 中引入

现在，元数据浏览器以 Unicode 导出基于 XML 的元数据。在 SQL Server 2000 SP1 之前，此浏览器导出的是不支持非英语字符的 ANSI 码。这一功能性的改变对用户是不可见的。从此 SP3 发行版开始，将始终以 Unicode 表示导出的数据。仍可以通过将注册表项 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Repository\Engine\XMLExport 的值设为 0 改为以 ANSI 码导出。下表列出了可以对此注册表项设置的值：

- NOOBJID=1
- NOHEADER=2
- INDENTATION=4
- UNICODE=8
- LOGUNMAPPEDTAGS=16
- EXPORTBASE=32

有关每个标志的更多信息，请参见 SQL Server 联机丛书中的“IExport::Export 方法”。

### 5.6.2 禁用脚本支持

在 SP3 中引入

信息模型中的脚本支持已被禁用。安装 SP3 后，如果应用程序要访问定义了脚本的属性或方法，将收到下列错误：

    EREP_SCRIPTS_NOTENABLED

启用脚本支持

如果需要继续执行脚本，可以使用下列过程来创建用于启用脚本支持的注册表设置。

1. 打开注册表编辑器并定位至 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft。
2. 创建一个名为 Repository 的注册表项（如果它尚不存在），然后创建一个名为 Engine 的子注册表项，以便使路径等于 Repository\Engine。
3. 在 Engine 注册表项中，添加一个名为 AllowScripting 的新 DWORD 值，并将该值设为 1。

如果以后希望禁用脚本，请将此新注册表项的值设为 0。

重要 应始终保证信息模型和知识库数据库的安全，禁止未经授权的访问。

### 5.6.3 用于访问知识库信息的新 RepositoryUser 角色

在 SP3 中引入

SQL Server 在其 msdb 数据库中包含了一组表、存储过程和视图，用于存储由 Meta Data Services 知识库引擎使用的信息。在 SP3 中，添加了一个新的名为 RepositoryUser 的专用角色，并且必须使用它才能访问和更新知识库信息。此角色已被授予对上述对象进行创建、读取、更新、删除和执行的权限。public 不再具有访问这些对象的权限。

此项更改不仅影响由知识库引擎在以后创建的任何其他对象，还将影响现有的知识库对象。必须将通过 public 角色访问知识库的用户和应用程序添加到 RepositoryUser 角色中。

## 5.7 数据转换服务增强功能

本节讨论 SP3 中包含的 SQL Sever 2000 数据转换服务的增强功能。

### 5.7.1 DTS 向导不再将字符串列限制为不超过 255 个字符

在 SP2 中引入

现在，将数据导出到文本文件时，对于任何包含字符串类型数据的列，DTS 导入/导出向导将程序包配置为最多可以写入这些列中的 8000 个字符。

### 5.7.2 SQL Server 代理记录运行 DTS 程序包时的安全性上下文

在 SP2 中引入

SQL Server 代理会记录运行作业的每个步骤时的安全性上下文。从 SP3 开始，安全性上下文显示在“作业历史记录”对话框中。如果从作业中的某个步骤运行 DTS 包，SQL Server 代理将记录运行该程序包的用户帐户。该信息可以帮助管理员诊断当 DTS 包按日程安排在服务器上运行时出现的权限和身份验证问题。

### 5.7.3 SQL Server 代理的代理帐户的改进

在 SP2 中引入

在 SP3 之前，存储在服务器上的 DTS 程序包不能使用 SQL Server 代理程序的代理帐户凭据运行，除非该代理帐户有权访问运行服务器（对于从 xp_cmdshell 运行的作业）或代理（对于代理作业）的帐户的用户 Temp 文件夹。因此，用户经常需要调整 SQL Server 或 SQL 代理程序启动帐户的 TEMP 环境变量，以使其指向启动帐户和代理帐户都可访问的目录，如 C:\Temp。在 SP3 中，对 DTS 进行了一些改进，如果用户 Temp 文件夹不可用，将使用系统 Temp 文件夹，从而大大减少了进行这种调整的需要。

### 5.7.4 默认情况下禁止保存到 Meta Data Services

在 SP3 中引入

默认情况下，SP3 禁用在 Meta Data Services 中保存 DTS 包的选项。这意味着 Meta Data Services 选项不会显示在“保存 DTS 包”对话框中的“位置”下拉列表中。此外，此选项在 DTS 导入/导出向导的“保存、调度和复制包”页上被禁用。

允许将包保存到 Meta Data Services 中

- 在 SQL Server 企业管理器中，右键单击“数据转换服务”节点，单击“属性”，然后单击“允许保存到 Meta Data Services”。

  说明 必须以具有管理员权限的帐户登录，才能修改此属性。

当在 Meta Data Service 中存储包的选项被禁用时，可以从 Meta Data Services 中装载现有包，并对其进行编辑，然后使用“保存”选项将其保存到 Meta Data Services 中。但是，无法从“另存为”选项使用 Meta Data Services。例如，不能使用其他名称将包重新保存到 Meta Data Services 中。

## 5.8 XML 增强功能

以下主题讨论 SP3 中包含的 XML 和 SQLXML 的增强功能。

### 5.8.1 改进的 XPath 表达式验证

在 SP3 中引入

在 SP3 之前，与 SQL Server 2000 一起安装的 MSXML 版本 (MSXML 2.6) 允许 XPath 表达式中的谓词跟在用于标识当前上下文节点（在 XPath 语法中，当前上下文节点由句点`.`表示）的特殊字符缩写词后面。这种做法违反了 XPath 语法规范，该规范要求此字符后跟一个位置路径表达式。

应用 SP3 时，会将更新版的 MSXML (3.0 SP3) 作为 MDAC 升级的一部分予以安装。有关更多信息，请参见 5.5.1 Microsoft 数据访问组件的更新。

对于新版本的 MSXML，谓词不能直接跟在当前上下文节点缩写词特殊字符的后面。在升级到 SP3 以后，存在语法错误的 SQLXML 查询（是指对应于所批注的映射架构的 XPath 查询，和在 XSLT 样式表中编写来转换 SQLXML 查询结果的 XPath 查询）中的 XPath 表达式将失败。

要防止出现这些故障，请标识并修复所有使用错误语法的表达式。例如，在下面的 `xsl:if` 元素中，被指定为测试特性值的 XPath 表达式的语法是无效的，原因在于谓词 `[@ResourceTypeID='2']` 直接跟在用于标识当前上下文节点的特殊字符缩写词的后面。

在安装 SP3 之后，下面这个在以前不会生成错误的语句将失败。

    <xsl:if test=".[@ResourceTypeID='2']">

要防止失败，必须按如下所示修改该 XPath 表达式：

    <xsl:if test="@ResourceTypeID='2'">

## 5.9 虚拟备份设备 API 增强功能

以下内容适用于 SQL Server 2000 虚拟备份设备 API。

### 5.9.1 在单个快照中捕获多个数据库

在 SP2 中引入

虚拟备份设备 API 允许独立软件供应商将 SQL Server 2000 集成到其产品中。此 API 被设计为能够提供最高可靠性和最优性能。它完全支持 SQL Server 2000 的备份及还原功能（包括完整的热备份和快照备份功能）。

在 SP1 及更早版本中，无法一次固定或备份一个以上的数据库。现在，SP3 通过 VDC_PrepareToFreeze 命令为在单个快照中固定和捕获多个数据库提供了服务器端支持。

SP3 中的虚拟备份设备规范包含关于 VDC_PrepareTo Freeze 命令的更新信息。可以在 SP3 安装目录下的 \Devtools\Include 中找到虚拟设备接口头文件 (Vdi.h) 的更新版本。

可以从 Microsoft 下载中心中的 Microsoft SQL Server 下载网站下载更新的规范。

## 5.10 错误报告

在 SP3 中引入

默认情况下，Microsoft SQL Server 错误报告是被禁用的。可以在安装过程中通过 SQL Server 安装程序或 Analysis Services 安装程序启用错误报告功能，也可以在安装后通过 SQL Server 企业管理器中的服务器属性对话框或 Analysis Manager 中的服务器属性对话框启用错误报告功能。在运行 SQL Server 安装程序时启用错误报告功能，可以使错误报告功能供 SQL Server 数据库引擎和 SQL Server 代理使用。在运行 Analysis Services 安装程序时启用错误报告功能，可以使错误报告功能供 Analysis Services 使用。如果要同时为 SQL Server 和 Analysis Services 启用错误报告功能，则必须在运行 SQL Server 安装程序时为 SQL Server 启用错误报告功能，并且在运行 Analysis Services 安装程序时为 Analysis Services 启用错误报告功能。

如果启用了此功能，当 SQL Server 数据库引擎、SQL Server 代理或 SQL Server Analysis Services 中发生致命错误时，SQL Server 会自动向 Microsoft 发送一个报告。Microsoft 利用错误报告来改进 SQL Server 的功能，并且对所有信息保密。

有关错误的信息将通过安全 (https) 连接发送并保存到 Microsoft，并且 Microsoft 会限制对这些信息的访问。另外，您也可以将这些信息发送到您自己的“公司错误报告”服务器。有关设置“公司错误报告”服务器的更多信息，请访问 Microsoft 网站。

错误报告包含下列信息：

- 出现问题时 SQL Server 的状态。
- 操作系统版本和计算机硬件信息。
- 用户产品的数字 ID（可用来标识许可证）。
- 计算机的网络 IP 地址。
- 来自出错进程的内存或文件的信息。

Microsoft 无意收集您的文件、姓名、地址、电子邮件地址或任何其他私人信息。但是，错误报告可能包含来自出错进程的内存或文件的客户特定信息。虽然使用这些信息有可能可以确定您的身份，但 Microsoft 不会将这些信息用于此目的。

有关 Microsoft 错误报告数据收集策略的信息，请访问 Microsoft 网站。

如果启用了错误报告功能并出现致命错误，Windows 事件日志中可能会包含来自 Microsoft 的一条响应，该响应指向与特定错误有关的 Microsoft 知识库文章。响应可能类似于以下示例：

    Source = MSSQLServerOlapServicesDW
    EventID = 1010
    data = http://support.microsoft.com/support/misc/kblookup.asp?id=Q123456&iBucketTable=1&iBucket=39980&Cab=21474432.cab&LCID=1033&OS=5.1.2600.2.00010100.0.0

要禁止 SQL Server 数据库引擎和 SQL Server 代理使用错误报告功能，请转至企业管理器中的“SQL Server 属性”对话框，清除“常规”选项卡中的“启用错误报告功能”复选框。要禁止 Analysis Services 使用错误报告功能，请转至 Analysis Services 中的“服务器属性”对话框，并清除“启用错误报告功能”复选框。如果同时为 SQL Server（数据库引擎和 SQL Server 代理）和 Analysis Services 启用了错误报告功能，要使两者都不能使用错误报告功能，则必须分别在上述两处关闭错误报告功能。

## 5.11 English Query 增强功能

在 SP1 中引入

Microsoft 针对 English Query 应用程序发布了安全性增强功能。安装 Service Pack 时不会安装此增强功能。但是，您如果正在使用 English Query，建议您应用它。安全性增强功能位于 SP3 光盘的 \EQHotfix 文件夹中。有关 English Query 增强功能的详细信息，请访问网站 Microsoft 产品技术支持服务知识库中的文章 Q297105。

## 5.12 用于 C 语言的 DB-Library 和嵌入式 SQL

在 SP1 中引入

虽然 SQL Server 2000 仍然支持用于 C 语言应用程序接口（API）的 DB-Library 和嵌入式 SQL，但是以后的 SQL Server 版本将不再包含编写使用这些 API 的应用程序所需的文件。SQL Server 的下一个版本仍然支持来自现有的使用用于 C 语言的 DB-Library 和嵌入式 SQL 编写的应用程序的连接，但以后的版本将不再提供这种支持。编写新的应用程序时，请避免使用这些组件。修改现有的应用程序时，强烈建议您消除对这些技术的依赖性。您可以使用 ADO、OLE DB 或 ODBC 访问 SQL Server 中的数据，而不必使用用于 C 语言的 DB-Library 和嵌入式 SQL。有关这些技术的更多信息，请参见 SQL Server 联机丛书。