# Microsoft SQL Server 2000 Service Pack 3a

##### 2003 年 4 月 9 日

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

SQL Server 文档小组不能回答技术支持问题，但是欢迎您就本自述文档提出建议和意见。可使用下面的链接快速而直接地发送电子邮件反馈。所有反馈必须用英语书写。
若要提交有关本文的书面反馈，请单击此处：提交反馈。

# 目录

1.0 简介

1.1 Database Components SP3a 安装概述

1.2 Desktop Engine (MSDE 2000) SP3a 安装概述

1.3 删除 SP3a

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

1.5 关于 SP3a 的其他信息

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

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

2.0 下载并解压缩 SP3a

2.1 下载并解压缩 Desktop Engine (MSDE 2000) SP3a

3.0 安装 Service Pack

3.1 备份 SQL Server 数据库

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

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

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

3.5 安装 Database Components SP3a

3.6 安装 Analysis Services SP3a

3.7 安装 Desktop Engine SP3a

3.7.1 MSDE 2000 SP3a 的前提条件

3.7.2 MSDE 2000 SP3a 的安全注意事项

3.7.3 MSDE 2000 安装参数

3.7.4 将现有的 MSDE 2000 实例升级到 SP3a

3.7.5 安装新的 MSDE 2000 SP3a 实例

3.7.6 将 MSDE 1.0 升级到 MSDE 2000 SP3a

3.7.7 再分发 MSDE 2000 SP3a

3.7.8 MSDE 2000 SP3a 文件位置

3.8 重新启动服务

3.9 重新启动应用程序

3.10 在故障转移群集上安装

3.11 在复制服务器上安装

3.12 对只读数据库或文件组应用 SP3a

3.13 卸载 SP3a

3.14 重新应用 SP3a

4.0 其他安装注意事项

4.1 无值守安装

4.2 再分发 SP3a 数据访问组件

5.0 文档说明

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

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

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.1.15 UDP 端口 1434 的操作

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.4.5 SQL 代理邮件 MAPI 配置文件

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 3a (SP3a) 将为了解决 Slammer 蠕虫引起的问题而对 SQL Server 2000 SP3 所做的更改综合在了一起：

- 可以对 SQL Server 2000 企业评估版应用 SP3a，以便将修复程序应用于该版本 SQL Server 的实例。
- SP3a 解决了一些客户在 SQL Server 2000 SP3 中安装 Microsoft 数据访问组件 (MDAC) 时遇到的安装问题。
- 现在，在默认情况下，MSDE 2000 SP3a 安装实用工具会在安装 MSDE 2000 的新实例时关闭对网络连接的支持。将实例升级到 SP3a 时，保留当前的网络支持设置。
- 如果将 SQL Server 2000 SP3a 或 MSDE 2000 SP3a 的某个实例配置为不支持网络连接，则该实例也将停止使用 UDP 端口 1434。

因为在 SP3a 中引入的大多数更改都与安装程序有关，所以无需对已经升级到 SP3 的 SQL Server 2000 实例或 MSDE 2000 实例应用 SP3a。但是，如果尚未将实例升级到 SP3，则应该将这些实例直接升级到 SP3a（而非 SP3）。如果保存有 SP3 下载文件的任何副本并打算将来使用它们进行升级，则应该删除这些副本，而使用 SP3a 下载文件或 SP3a CD-ROM。用来分发和安装 MSDE 2000 的应用程序应该安装 SP3a（而非 SP3）。可以对 SQL Server 2000 SP3 或 MSDE 2000 SP3 的实例应用 SP3a，但是这样做对这些实例没有太大的作用。

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

- Database Components SP3a 提供对 SQL Server 2000 实例（不包括 SQL Server 2000 Desktop Engine 实例）的数据库组件的更新。Database Components SP3a 包括对下列部分的更新：
  - 数据库引擎。
  - 所有数据库客户端工具和实用工具，如 SQL Server 企业管理器和 osql 实用工具。
  - 数据库客户端连接组件，如用于 SQL Server 2000 的 Microsoft OLE DB 提供程序、SQL Server 2000 ODBC 驱动程序和客户端 Net-Library。
- Analysis Services SP3a 提供对 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 SP3a 提供对 SQL Server 2000 Desktop Engine（MSDE 2000）实例的数据库组件的更新，包括：
  - 数据库引擎。
  - MSDE 2000 附带的数据库命令提示符实用工具，如 osql 和 bcp 实用工具。
  - 数据库客户端连接组件，如用于 SQL Server 2000 的 Microsoft OLE DB 提供程序、SQL Server 2000 ODBC 驱动程序和客户端 Net-Library。

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

- SQL Server 2000 站点可以使用 Database Components SP3a 升级数据库组件，而不必升级 Analysis Services 组件或 SQL Server 2000 Desktop Engine 实例。
- Analysis Services 2000 站点可以使用 Analysis Services SP3a 升级 Analysis Services 组件，而不必升级 Desktop Engine 实例或数据库组件。
- MSDE 2000 站点可以使用 Desktop Engine SP3a 升级 MSDE 2000 实例，而不必升级 Analysis Services 或 SQL Server 2000 数据库引擎实例。

说明 如果在同一台计算机上同时安装了 MSDE 2000 和其他版本的 SQL Server 2000 数据库引擎的单独实例，则必须对 MSDE 2000 实例应用 Desktop Engine SP3a，对 SQL Server 2000 数据库引擎（如个人版、标准版或企业版）的实例应用 Database Components SP3a。

说明 因为葡萄牙语（巴西）、瑞典语和荷兰语版本的 SQL Server 2000 只包含 SQL Server 2000 Desktop Engine (MSDE 2000)，所以为这些语言提供的 Service Pack 中只包含 Desktop Engine SP3a。对于这些语言，不能通过 Database Components SP3a 或 Analysis Services SP3a 升级 SQL Server 2000 组件。如果葡萄牙语（巴西）、瑞典语和荷兰语用户希望对 Desktop Engine 之外的 SQL Server 版本应用 SP3a，则他们必须下载与要升级的版本的语言相匹配的 SP3a 文件。例如，为了升级英语版本的 SQL Server 2000 数据库引擎，，则必须下载英语版本的 SP3a 文件。有关如何下载 Service Pack 的信息，请参见 2.0 下载并解压缩 SP3a。

## 1.1 Database Components SP3a 安装概述

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

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

## 1.2 Desktop Engine (MSDE 2000) SP3a 安装概述

可以使用 Desktop Engine SP3a 执行以下任务：

- 将 SQL Server 2000 Desktop Engine (MSDE 2000) 的现有实例升级到 SP3a。
- 安装新的 MSDE 2000 SP3a 实例（前提是您的 MSDE 2000 许可证允许您安装 MSDE 2000 实例）。
- 将 MSDE 1.0 实例升级到 MSDE 2000（前提是您的 MSDE 2000 许可证允许您运行 MSDE 2000 实例）。
- 为开发人员提供编写应用程序安装实用工具所必需的文件，该实用工具在安装应用程序的同时安装 MSDE 2000 SP3a 的实例（前提是开发人员必须拥有随应用程序分发 MSDE 的许可证）。

有关 MSDE 2000 授权的详细信息，请参见使用 MSDE 2000。

对现有的 MSDE 2000 实例应用 SQL Server 2000 Service Pack 3a 的过程取决于实例的安装方式。Microsoft 提供的 Desktop Engine SP3a 文件只能用来对使用 MSDE 2000 安装实用工具安装的 MSDE 2000 实例应用 SP3a。大多数应用程序使用下列两种机制之一安装 MSDE 2000：

- 应用程序的安装实用工具在安装过程中调用 MSDE 2000 安装实用工具。可以使用 Desktop Engine SP3a 文件将通过这种方式安装的 MSDE 2000 实例升级到 SP3a。
- 如果应用程序的安装实用工具使用 Microsoft Windows 安装程序技术，则安装实用工具可以直接使用 MSDE 2000 合并模块。但通过这种方式安装的 MSDE 2000 实例不能使用 Desktop Engine SP3a 文件进行升级。您必须与应用程序供应商联系以获取修补文件。Desktop Engine (MSDE 2000) SP3a 提供有合并模块，支持使用合并模块的现有应用程序。为新应用程序编写安装实用工具时，应当调用 MSDE 2000 安装实用工具（而不要直接使用 MSDE 2000 合并模块）。

2.1 下载并解压缩 Desktop Engine (MSDE 2000) SP3a 中介绍了如何确定是否可以使用 Desktop Engine SP3a 将 MSDE 2000 实例升级到 SP3a。即使是从 SQL Server 2000 SP3a CD 应用 Desktop Engine SP3a，也请阅读 2.1 一节中的说明，以确定是否可以应用 Desktop Engine SP3a，或者是否必须与应用程序供应商联系以获取修补文件。

如果计算机上有多个 MSDE 2000 实例，则必须逐个评估每个实例，以便确定是否可以应用 Desktop Engine SP3a。还必须对每个实例单独应用 SP3a。

回顾本自述文件中第 1 节和第 2 节中的资料，如果满足以下条件，请按照第 3 节中的说明操作：

- 已经确定可以对现有的 MSDE 实例应用 Desktop Engine SP3a。
- 准备安装新的 MSDE 2000 新实例。
- 准备将 Desktop Engine SP3a 文件合并到应用程序的安装实用工具中。

以下各节中的示例介绍了升级现有的 MSDE 实例到 SP3a 或者安装新的 MSDE 2000 SP3a 实例的最常见方案：

- 3.7.4 将现有的 MSDE 2000 实例升级到 SP3a
- 3.7.5 安装新的 MSDE 2000 SP3a 实例
- 3.7.6 将 MSDE 1.0 升级到 MSDE 2000 SP3a

## 1.3 删除 SP3a

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

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

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

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

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

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

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

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

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

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

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

##### SQL Server

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

同样，可通过执行 `SELECT SERVERPROPERTY('ProductLevel')` 来确定给定版本的 SQL Server 2000 数据库引擎或 MSDE 2000 的产品级别。

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

SQL Server 2000 版本和级别 | @@VERSION | ProductLevel
SQL Server 2000 原始版本 | 8.00.194 | RTM
Database Components SP1 或 Desktop Engine SP1 | 8.00.384 | SP1
Database Components SP2 或 Desktop Engine SP2 | 8.00.534 | SP2
Database Components SP3/SP3a 或 Desktop Engine SP3/SP3a | 8.00.760 | SP3

如果不能确定运行的 SQL Server 2000 数据库引擎或 MSDE 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 数据库引擎或 MSDE 2000 的版本。其后是当前操作系统信息。

也可以通过使用 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 原始版本 | 8.0.194
Analysis Services SP1 | 8.0.382
Analysis Services SP2 | 8.0.534
Analysis Services SP3 或 SP3a | 8.0.760

##### 区分 SP3 和 SP3a

若要确定安装的是 SP3 还是 SP3a，请查看 Net-Library 文件 Ssnetlib.dll 的版本号。如果该文件的版本号是 2000.80.760.0，则说明安装的是 SP3；如果该文件的版本号是 2000.80.766.0，则说明安装的是 SP3a。

假定实例是使用默认设置安装的，则可以在下列位置之一找到 Ssnetlib.dll 文件：

- 默认实例：C:\Program Files\Microsoft SQL Server\Binn\Ssnetlib.dll
- 命名实例：C:\Program Files\Microsoft SQL Server\MSSQL$<实例名>\Binn\Ssnetlib.dll

若要确定拥有的是 SP3 安装文件夹还是 SP3a 安装文件夹，请打开 SP3Readme.htm 文件并阅读第一页。第一页的顶端列出了 Service Pack 的版本：SP3a 或 SP3。

## 1.5 关于 SP3a 的其他信息

该 Service Pack 中包含的修补程序列表列在 Microsoft 知识库文章 306908 中。对于列在 306908 中的每个修补程序，都有一个指向对应的知识库文章的链接，该文章中说明了此修补程序所解决的问题。使用指向各个知识库文章的链接可以了解各个修补程序的信息。

在知识库中查找文章

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

本自述文件中未能及时提供的有关 SQL Server 2000 Service Pack 3a 的信息，将在 Microsoft 知识库文章 816502 中提供。

本自述文件中提到的知识库文章位于 Microsoft 产品支持服务知识库中。

#### Microsoft 数据访问组件

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

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

#### QFE 修补程序

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

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

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

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

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

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

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

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

针对 SP3 和 SP3a 更新的 SQL Server 2000 数据库引擎和 Analysis Services 示例可用了。可以从 Microsoft 网站下载这些更新示例。

# 2.0 下载并解压缩 SP3a

SP3a 的分发方式如下：

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

说明 SQL Server 2000 Service Pack 3a CD-ROM 和 CHS_Sql2kdesksp3.exe 均包含安装新的 Desktop Engine 实例所必需的所有文件。

说明 SP3a 下载文件与 SP3 下载文件同名。

如果有 SP3a CD，则可以直接从该 CD 安装 SP3a。

如果没有 SP3a CD，则可以下载相应的文件，然后运行它。在计算机上运行下载文件时，会在磁盘上创建一组文件夹和文件，其组织结构与 SP3a CD 上相同。在完成该文件解压缩阶段之后，即可以从磁盘上的文件夹安装 SP3a。

在从 Internet 下载和解压缩 SP3a 安装文件时，请遵循下列规则：

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

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

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

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

##### 如何确定 SQL Server 2000 数据库引擎或 MSDE 2000 的实例所使用的语言

SQL Server 2000 Service Pack 是针对各种语言提供的。若要升级 SQL Server 2000，则必须下载和应用与 SQL Server 2000 软件具有相同语言的 Service Pack。例如，如果要升级使用日语版的 MSDE 2000，则必须下载日语版本的 Desktop Engine SP3a。

如果不能确定 SQL Server 2000 数据库引擎或 MSDE 2000 的实例所使用的语言，请执行下列操作：

- 单击“开始”，然后单击“运行”。
- 在“打开”框中，键入“Regedit”，然后单击“确定”。
- 查找并选择下列注册表项之一：
  - 对于 SQL Server 2000 数据库引擎或 MSDE 2000 的默认实例，找到并选择以下注册表项：

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\CurrentVersion

  - 对于 SQL Server 2000 数据库引擎或 MSDE 2000 的命名实例，找到并选择以下注册表项：

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\InstanceName\CurrentVersion

    其中，InstanceName 是实例的名称。

- 阅读右窗格中 Language 条目的值。将该值与下表进行比较，以确定 SQL Server 2000 数据库引擎或 MSDE 2000 的实例所使用的语言：

  Language 注册表值（用十六进制表示） | Language 注册表值（用十进制表示） | 该实例的语言
  0x00000404 | 1028 | 繁体中文
  0x00000407 | 1031 | 德语
  0x00000409 | 1033 | 英语
  0x0000040a | 1034 | 西班牙语
  0x0000040c | 1036 | 法语
  0x00000410 | 1040 | 意大利语
  0x00000411 | 1041 | 日语
  0x00000412 | 1042 | 朝鲜语
  0x00000413 | 1043 | 荷兰语
  0x00000416 | 1046 | 葡萄牙语（巴西）
  0x0000041d | 1053 | 瑞典语
  0x00000805 | 2053 | 简体中文

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

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

## 2.1 下载并解压缩 Desktop Engine (MSDE 2000) SP3a

安装了 MSDE 2000 实例的用户必须知道他们的 MSDE 2000 实例的安装方式，才能确定应该如何修补它。可以按照 Microsoft 知识库文章 311762 中的说明，根据注册表项 ProductCode 中记录的信息来确定。

- 如果 ProductCode 值对应的原始包名称为 SqlRun01.msi 至 SqlRun16.msi，则可以使用 SQL Server 2000 SP3a 下载文件升级 MSDE 2000 实例。有关如何确定 MSDE 2000 实例所使用语言的信息，请参见前面的内容。
- 如果 ProductCode 值对应的原始包名称指向某个 Microsoft 应用程序，请参见下页以了解如何升级该 MSDE 2000 实例的说明：Microsoft MSDE 应用程序网页
- 如果该知识库文章中未列出 ProductCode 值，则说明该实例是由应用程序的安装实用工具安装的。不能使用 SQL Server 2000 SP3a 下载文件对这类的 MSDE 实例应用 SP3a，而是必须从编写应用程序的公司获取修补文件。如果应用程序来自 Microsoft 以外的公司，则必须与该公司联系以获取修补文件。如果应用程序来自 Microsoft，请参见下页，其中列出了来自 Microsoft 的 MSDE 应用程序（将更新本页，使其包含有关如何升级这些 MSDE 2000 实例的信息）：Microsoft MSDE 应用程序网页
- 如果 ProductCode 值对应的原始包名称为 Sample.msi 或 SampleUpg.msi，请参见知识库文章 314131。

##### 下载 MSDE 2000 SP3a

如果 MSDE 2000 实例是使用 MSDE 安装实用工具安装的（原始包名称为 SqlRun01.msi 至 SqlRun16.msi），则可以使用 SQL Server 2000 SP3a 下载文件升级 MSDE 2000 实例：

- 转至 Microsoft SQL Server 下载网站。
- 在该页右上部分中的“完整下载”框中，选择与 MSDE 2000 实例相匹配的语言，然后单击“Go”。
- 在下一页中，定位到底部的“此下载中包括的文件”部分。根据前面选择的语言，选择下列文件之一：
  - 如果选择的是英语，则可以下载 SQL2KDeskSP3.exe 文件到计算机中的某文件夹中。
  - 如果选择的是其他语言，则下载 LLL_SQL2KDeskSP3.exe 文件（其中的 LLL 因语言而异）。

##### 解压缩 MSDE 2000 SP3a 文件

在下载 SQL2KDeskSP3.exe 或 LLL_SQL2KDeskSP3.exe 之后，必须解压缩 MSDE 2000 SP3a 文件：

- 打开 Windows 资源管理器，导航到 MSDE 2000 SP3a 下载文件（SQL2KDeskSP3.exe 或 LLL_SQL2KDeskSP3.exe，其中的 LLL 因语言而异）所在的文件夹。
- 双击该下载文件以解压缩 SP3a MSDE 文件。按照系统要求，指定可以将 SP3a 文件解压缩到的文件夹。

# 3.0 安装 Service Pack

若要安装 SP3a，请遵循以下各节中的安装说明。并不是所有步骤都是必需的，具体应该执行哪些步骤取决于 Service Pack 应用于下列哪个 SQL Server 2000 组件或配置：

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

以下各节中的第一句指出了该节所适用的组件。

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

如果有应用程序正在使用 SQL Server 2000 数据库引擎或 MSDE 2000 的实例，请首先与该应用程序的供应商确认，看是否有任何特定于该应用程序的数据库引擎或 MSDE 2000 升级注意事项。

如果下列任一安全策略已被设置为“禁止安装”，则 SP3a 的安装将失败：

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

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

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

在运行 Windows XP 的计算机上安装 SQL Server 2000 SP3a 时，MDAC 2.7 不会更新为 MDAC 2.7 Service Pack 1a (SP1a)。如果系统需要 MDAC 2.7 SP1a 中包含的任何修补程序，则必须在安装 SQL Server 2000 SP3a 之前先应用 Windows XP Service Pack 1。Windows XP SP1 将应用 MDAC 2.7 SP1a 中包括的所有修补程序。

当在 Microsoft Windows Server 2003 build 3683（或更低版本）的预发行版本上安装该 Service Pack 时，将收到下列错误消息：

    您要安装的软件尚未通过 Windows 徽标测试以验证它与此 Windows 版本的兼容性。
    将不会安装此软件。请与系统管理员联系。

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

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

当在运行 Windows NT 4.0 Service Pack 6a 的计算机上安装该 Service Pack 时，必须应用 Microsoft 知识库文章 258437 中描述的热修复程序。

在法语版本的 Windows NT 4.0 上安装 SP3a 之前，请按照知识库文章 259484 中的说明进行操作。可以从Microsoft 产品支持服务知识库访问此文章。有关搜索知识库的说明，请参见 1.5 关于 SP3a 的其他信息。

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

如果准备应用 Database Components SP3a 的 SQL Server 实例所在的计算机上安装有 Analysis Services，则执行脚本 Sp3_serv_uni.sql 时，安装程序可能会失败。如果发生这种情况，请重新启动计算机，然后重新运行安装程序。

- SQL Server 2000 Service Pack 不会影响如下功能：在某个版本（原始版本或 Service Pack）的 SQL Server 2000 或 MSDE 2000 中备份用户数据库，然后在另一版本中还原它们（除非用户数据库是复制拓扑结构的一部分）。如果用户数据库不属于复制拓扑，则可以从运行任何版本的 SQL Server 2000 或 MSDE 2000 的实例中对它进行备份，然后在运行任何其他版本的 SQL Server 2000 或 MSDE 2000 的实例中进行还原。5.3.6 合并复制的备份和还原问题中详述了有关复制的其他注意事项。

SP3a 安装程序升级作为复制拓扑成员的用户数据库。在安装 SP3a 之前，请确保该复制数据库和文件组可写，且运行该安装程序的用户帐户具有访问这些数据库的权限。有关对复制拓扑中包括的数据库应用 SP3a 的详细信息，请参见 3.11 在复制服务器上安装。

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

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

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

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

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

有关使数据库可写的详细信息，请参见 3.12 对只读数据库或文件组应用 SP3a。有关重新应用 SP3a 的详细信息，请参见 3.14 重新应用 SP3a。

因为不可写数据库不会再导致安装失败，所以不必在升级到 SP3a 之前删除日志传送。但是，如果该数据库要将日志传送到作为复制发布服务器的数据库，则必须：

1. 在应用 SP3a 之前使数据库脱机。
2. 对该实例应用 SP3a。
3. 使数据库重新联机。
4. 登录到查询分析器并运行以下脚本：

       USE master
       GO
       EXEC sp_vpupgrade_replication
       GO

如果在应用 SP3a 时未将所有向发布数据库传送日志的不可写数据库脱机，将收到以下错误：

运行脚本 sp_vpupgrade_replication (1) 时出错

如果收到该错误，请按照前面的步骤操作。

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

说明 因为不可写数据库不会再导致安装失败，所以不必在升级到 SP3a 之前删除日志传送。

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

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

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

## 3.1 备份 SQL Server 数据库

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

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

尽管 SP3a 只对作为复制拓扑成员的用户数据库执行更新，但是备份用户数据库仍不失明知之举。

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

以下信息仅适用于 Analysis Services。

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

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

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

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

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

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

要确认是否已在 MSDE 2000 中选中了该选项，请使用 osql 命令提示符实用工具执行下列 SQL 语句：

- sp_helpdb master
- sp_helpdb msdb

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

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

以下信息适用于所有组件。

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

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

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

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

## 3.5 安装 Database Components SP3a

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

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

- 本地计算机上包含从 CHS_SQL2KSP2.exe 解压缩的 Service Pack 文件的目录。
- SQL Server 2000 SP3a CD-ROM 上的 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 时可能遇到了后向兼容性问题。要了解有关此对话框的更多信息，请参见本节后面的“后向兼容性一览表”对话框。
- 如果检测到有不可写的数据库或文件组，将显示一个对话框。此时，如果其中任何数据库或文件组是复制拓扑的一部分，可以执行以下任一操作：
  - 停止安装过程，使这些对象可写，然后重新启动安装程序。
  - 继续当前的 SP3a 安装过程，并在使这些对象可写后的某个时间重新应用 SP3a。

  说明 只有在对属于复制拓扑的不可写数据库或文件组应用 SP3a 时，才需执行上述步骤。有关详细信息，请参见 3.12 对只读数据库或文件组应用 SP3a。

- 显示“错误报告”对话框，其中包含有关如何启用 SP3a 中包括的新的错误报告功能的信息。有关错误报告功能的更多信息，请参见 5.10 错误报告。
- 根据需要更新 MDAC 组件。有关更多信息，请参见 5.5.1 Microsoft 数据访问组件的更新。
- 将现有的 SQL Server 2000 文件替换为 SP3a 文件。
- 运行 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 实例的配置不同，一览表中显示的后向兼容性问题也不同。

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

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

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

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

## 3.6 安装 Analysis Services SP3a

以下信息仅适用于 Analysis Services。

若要安装 Analysis Services SP3a，请从下列任一位置运行 Setup.exe：

- 从 CHS_SQL2KASP3.exe 解压缩的 Analysis Services SP3a 文件所在的目录中的 Msolap\Install 子目录。
- SP3a CD-ROM 上的 Msolap\Install 目录。

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

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

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

在安装 Analysis Services SP3a 之后，还必须将用于远程管理的所有计算机升级到 SP3 或 SP3a。否则，在试图通过 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 或 SP3a 的服务器上的 Meta Data Services 知识库的远程服务器。还必须将远程服务器登录添加到 RepositoryUser 角色中。

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

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

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

## 3.7 安装 Desktop Engine SP3a

以下信息仅适用于 Desktop Engine (MSDE 2000)。

Desktop Engine SP3a 包含安装或升级 SQL Server 2000 Desktop Engine (MSDE 2000) 实例所需的一整套文件。只要您有安装或升级 MSDE 2000 实例所需的许可证，就可以使用 Desktop Engine SP3a 中的文件执行所有 MSDE 2000 安装操作。有关 MSDE 2000 授权的更多信息，请参见 使用 MSDE 2000。

您可能无法对通过应用程序的安装实用工具安装的 MSDE 2000 实例应用 Desktop Engine SP3a。必须与应用程序供应商联系，获取可用来升级这些 MSDE 2000 实例的修补文件。有关如何确定 MSDE 2000 的实例是否属于该类别的说明，请参见 2.1 下载并解压缩 Desktop Engine (MSDE 2000) SP3a。

以下各节提供有关 MSDE 2000 SP3a 安装程序的重要背景信息：

- 3.7.1 MSDE 2000 SP3a 的前提条件
- 3.7.2 MSDE 2000 SP3a 的安全注意事项
- 3.7.3 MSDE 2000 安装参数

以下各节涵盖了升级现有的 MSDE 实例到 SP3a 或者安装新的 MSDE 2000 SP3a 实例时的最常见方案：

- 3.7.4 将现有的 MSDE 2000 实例升级到 SP3a
- 3.7.5 安装新的 MSDE 2000 SP3a 实例
- 3.7.6 将 MSDE 1.0 升级到 MSDE 2000 SP3a

如果需要其他信息，可参考 SQL Server 2000 联机丛书（更新 - SP3），这是 MSDE 2000 SP3a 安装程序文档的主要来源。对 MSDE 2000 SP3 和 SP3a 进行的一些更改未能完全反映在 SQL Server 2000 联机丛书（更新 - SP3）中；这些功能包括在本自述文件中。有关安装 SQL Server 2000 联机丛书（更新 - SP3）的更多信息，请参见 1.6 更新的联机丛书文档可用。

### 3.7.1 MSDE 2000 SP3a 的前提条件

以下信息仅适用于 Desktop Engine (MSDE 2000)。

下列要求适用于 SQL Server 2000 Desktop Engine (MSDE 2000) SP3a 安装。

在升级 MSDE 2000 时，必须对每个 MSDE 2000 实例单独应用 Desktop Engine SP3a。

说明 Microsoft 不支持如下配置：在一个服务器上有 16 个以上的数据库引擎实例。包括以下实例：SQL Server 6.5、SQL Server 7.0、SQL Server 2000、MSDE 1.0 和 MSDE 2000。

总是通过运行 Setup.exe 来启动 MSDE 2000 安装程序。不要通过直接调用某个 MSDE 2000 .msi 文件（如通过双击某个 MSDE 2000 .msi 文件）来启动安装程序。必须从命令提示符运行安装程序，并指定用来安装或升级任意 MSDE 实例的参数。有关必需参数的更多信息，请参见 3.7.2 至 3.7.6 部分。

如果使用终端服务连接时，尝试将现有的 MSDE 实例升级到 SP3a 或者安装新的 MSDE 2000 SP3a 实例，可能会出现问题。如果遇到问题，请从本地计算机重新启动安装程序。

必须知道要使用 MSDE 2000 SP3a 安装程序安装或升级的 MSDE 实例的名称。如果要安装或升级 MSDE 的命名实例，必须使用 INSTANCENAME 参数来指定实例名称。如果未指定 INSTANCENAME，安装程序将对该计算机上默认的 MSDE 实例操作。在低于 SP3 的 MSDE 2000 安装程序版本中，用户需要指定用于安装或升级 MSDE 2000 实例的 .msi 安装包文件。在 SP3 和更高版本的安装程序中，安装程序管理这些 .msi 文件，用户不需要指定用于升级或新安装的 .msi 文件。

可以从硬盘驱动器、网络共享位置或 CD-ROM 运行 MSDE 2000 SP3a 安装程序。在将 MSDE 2000 实例升级到 SP3a 时，如果安装 MSDE 2000 实例时使用的原始文件仍位于最初安装时所在的位置，则只能从网络共享位置或 CD-ROM 运行安装程序。如果最初是从 CD-ROM 进行的安装，则 MSDE 2000 SP3a 安装程序在升级过程中将要求插入原始 CD-ROM。如果原始文件不在原始位置中，或者原始 CD-ROM 不可用，则必须将 MSDE 2000 SP3a 文件复制到硬盘驱动器中，然后从硬盘驱动器中运行安装程序。

如果创建自己的 SP3a 安装 CD-ROM，则该 CD-ROM 的卷标必须是 SQL2KSP3。如果您是独立软件供应商 (ISV)，并且准备创建 CD-ROM 以便将 Desktop Engine 作为应用程序的一个组件进行分发，那么 CD-ROM 的卷标必须与 Windows 安装程序包 (*.msi) Media 表中的 VolumeLabel 属性相同。

只有安装了 Windows 安装程序 2.0.2600.0 或更高版本，才能从 CD-ROM 安装 Desktop Engine 升级程序。如果需要升级 Windows 安装程序，SP3a 中包含升级 Windows 安装程序所必需的文件。

升级 Windows 安装程序：

1. 使用 Windows 资源管理器，导航至 SQL Server 2000 SP3a CD 或将 CHS_SQL2KDeskSP3.exe 解压缩后所包含的文件夹中的 \MSDE\MSI 文件夹。
2. 运行 InstMsi20.exe。
3. 根据提示重新启动计算机。

### 3.7.2 MSDE 2000 SP3a 的安全注意事项

以下信息仅适用于 Desktop Engine (MSDE 2000)。

在 SP3a 中更改了 MSDE 2000 安装程序的行为，以使默认设置的配置更安全。

Desktop Engine SP3a 更改 DISABLENETWORKPROTOCOLS 安装参数的默认行为，该安装参数为 MSDE 2000 实例指定网络连接支持配置。如果没有在其他计算机上运行的应用程序需要与您的 MSDE 2000 实例连接，则该实例无需网络支持，而且最好关闭目前不需要使用的资源。在安装新的 MSDE 2000 实例时，SP3a 默认会关闭网络支持功能。如果安装 MSDE 2000 SP3a 实例时禁用了网络支持功能，稍后可以重新配置此实例来启用网络支持。有关禁用和还原网络访问的更多信息，请参见 Microsoft 知识库文章 814130。

默认情况下，除非使用 SAPWD 参数指定了一个强 sa 密码，否则 MSDE 2000 SP3a 安装程序不会安装新的 MSDE 2000 实例。默认情况下，除非为 sa 登录指定了一个强密码，否则 MSDE 2000 SP3a 安装程序不会升级现有的 MSDE 2000 实例。除非使用 MSDE 实例的应用程序在某些方面依赖空的 sa 密码，否则，即使是升级现有的实例，也应该为 sa 登录指定一个强密码。即使 MSDE 2000 实例在 Windows 身份验证模式下运行，sa 登录也会在实例切换到混合模式时立即被激活。空、空白、简单或者众所周知的 sa 密码可能会被用来进行未经授权的访问。如果需要在将 MSDE 2000 升级到 SP3a 之前指定强 sa 密码，请参见 Microsoft 知识库文章 322336。

为了提高安全性，如有可能，请对 MSDE 2000 安装使用 Windows 身份验证。如果符合下列条件，请考虑从混合模式切换到 Windows 身份验证模式：

- 使用 MSDE 2000 的应用程序可以使用 Windows 身份验证运行。
- 已经为所有需要连接到该实例的用户定义了 Windows 身份验证登录。有关添加登录的更多信息，请参见 SQL Server 2000 联机丛书中的添加 Windows 用户或组。
- MSDE 2000 实例不是在 Windows 98 或 Windows ME 上运行。

有关将 MSDE 2000 实例从混合模式更改为 Windows 身份验证模式的更多信息，请参见 Microsoft 知识库文章 322336。

### 3.7.3 MSDE 2000 安装参数

以下信息仅适用于 Desktop Engine (MSDE 2000)。

MSDE 2000 被设计为可以与应用程序一起分发并由应用程序的安装程序来安装。MSDE 2000 没有交互式安装程序。MSDE 2000 的安装机制被设计为由应用程序的安装实用工具来调用，此过程上所有必需的与最终用户的交互都由应用程序的安装程序进行处理。MSDE 2000 有两种安装机制：

- 命令提示符安装实用工具。此安装实用工具通常由应用程序的安装实用工具来调用，但也可以从命令提示符窗口来运行。MSDE 2000 安装实用工具没有可由用户来控制该实用工具的行为的图形化用户接口。但它可以接受一组参数，这些参数定义了该实用工具应该执行的操作。
- 一组 Windows 安装程序合并模块。编写基于 Windows 安装程序的安装实用工具的开发人员可以对应用程序的安装程序进行编码，以便通过使用 MSDE 2000 合并模块来安装 MSDE 2000 实例。开发人员可以通过指定与 MSDE 2000 安装实用工具参数相对应的安装包属性来控制已安装实例的配置。

用户可以使用 MSDE 2000 命令提示符安装实用工具来升级现有的 MSDE 实例或者安装新的 MSDE 2000 实例。用户可通过指定参数来控制 MSDE 2000 安装程序的行为。安装参数可通过下列两种方式指定：

- 在命令行中。
- 在安装实用工具将读取的 .ini 文件中。

在 SQL Server 2000 联机丛书（更新 - SP3）中的“Customizing Desktop Engine Setup.exe”（自定义 Desktop Engine Setup.exe）主题中，介绍了 MSDE 2000 SP3a 版本的安装程序所支持的大多数参数。有关如何安装 SQL Server 2000 联机丛书的更多信息，请参见 1.6 更新的联机丛书文档可用

如果指定的 MSDE 安装参数值中包含特殊字符（如空格），则必须将该值放在双引号中。如果没有特殊字符，引号可选。

下面列出了未在 SQL Server 2000 联机丛书（更新 - SP3）中介绍或者其行为与联机丛书中的描述有所不同的 MSDE 2000 SP3a 安装程序参数。

参数名 | 描述
--- | ---
ALLOWXDBCHAINING=1 | 启用跨数据库所有权链接。有关更多信息，请参见 5.1.11 跨数据库所有权链接。
SAPWD=sa_password | 指定在安装新 MSDE 2000 实例时为 sa 登录指定的密码。在升级现有的 MSDE 2000 实例时会忽略 SAPWD，因此在升级之前应确保 sa 登录有一个强密码。即使使用的是 Windows 身份验证模式，也应总是指定一个强 sa 密码。如果使用合并模块进行安装，那么运行 Setup.exe 时 SAPWD 属性不会写入安装日志文件中。
/upgradesp { SQLRUN | [<MSIPath>]SqlRunXX.msi

}

指定安装程序将把现有的 MSDE 2000 实例升级到 SP3a。SP3 和更高版本中的此开关代替了低版本的安装程序所支持的 /p 开关。对于 SP3 或更高版本，不要使用 /p 开关。在升级到 SP3a 时，不再需要指定现有的 MSDE 2000 实例最初安装时所使用的 .msi 文件。

大多数用户只需指定 SQLRUN，在这种情况下，由 MSDE 2000 SP3a 安装实用工具来确定要使用的 .msi 文件。如果指定了 SQLRUN 而未指定 INSTANCENAME，则安装程序将升级 MSDE 2000 的默认实例。如果同时指定了 SQLRUN 和 INSTANCENAME，则安装程序将升级使用 INSTANCENAME 参数指定的实例。

如果指定了 MSDE 2000 .msi 安装包文件的名称，则安装程序将升级该计算机上最初用同名的合并模块安装的实例。例如，如果指定了 SqlRun01.msi，安装程序将升级最初用 SqlRun01.msi 安装的 MSDE 2000 实例。MSIPath 是 .msi 文件所在文件夹的路径。MSIPath 默认为 Setup\。

有关指定 /upgradesp 的示例，请参见 3.7.4 将现有的 MSDE 2000 实例升级到 SP3a

UPGRADEUSER=AnAdminLogin | 指定在使用 SQL Server 身份验证升级 MSDE 1.0 或 MSDE 2000 实例时使用的登录。该登录必须是固定服务器角色 sysadmin 的成员。只有在升级 MSDE 实例时指定了 SECURITYMODE=SQL 的情况下才需要使用该参数。
UPGRADEPWD= AdminPassword | 为在使用 SQL Server 身份验证升级 Desktop Engine 时 UPGRADEUSER 中指定的登录指定密码。

Desktop Engine SP3 引进了一个新的 DISABLENETWORKPROTOCOLS 参数。在 Desktop Engine SP3a 中更改的 DISABLENETWORKPROTOCOLS 的行为在默认情况下会使系统更安全。

SP3a 中 DISABLENETWORKPROTOCOLS 的行为。

DISABLENETWORKPROTOCOLS 值 | 升级现有实例 | 安装新实例
1 | 实例被配置为禁用所有服务器 Net-Library。 | 实例被配置为禁用所有服务器 Net-Library。
0 | 保留现有的服务器 Net-Library 配置。 | 实例被配置为启用默认的服务器 Net-Library 和地址。
未指定参数，或者参数是 0 或 1 以外的值 | 保留现有的服务器 Net-Library 配置。 | 实例被配置为禁用所有服务器 Net-Library。

与 SP3a 相比，SP3 中 DISABLENETWORKPROTOCOLS 的行为在两个方面有所不同：

- 在使用 SP3 安装新实例时，如果未指定 DISABLENETWORKPROTOCOLS 或者将其设置为 0 或 1 以外的值，则在安装实例时会启用默认的 Net-Library 和地址。在 SP3a 中，会禁用 Net-Library。
- 无论何时对 MSDE 2000 SP3 实例禁用所有 Net-Library，该实例仍将使用 UDP 端口 1434。而在 SP3a 中，这种配置的实例将不使用 UDP 端口 1434。有关更多信息，请参见 5.1.15 UDP 端口 1434 的操作。

有关默认 Net-Library 配置的更多信息，请参见 SQL Server 2000 联机丛书中的“控制 Net-Library 和通讯地址”主题。

如果开发人员希望将 MSDE 2000 合并模块（.msi 文件）合并到 Windows Installer 安装程序中，则可以在 .msi 文件中将上述安装程序参数指定为属性。Desktop Engine (MSDE 2000) SP3a 提供合并模块以支持现有的、使用合并模块的应用程序。新应用程序的安装实用工具应当编写为调用 MSDE 2000 安装实用工具（而不要直接使用 MSDE 2000 合并模块）。

参数名 | 合并模块的属性
--- | ---
ALLOWXDBCHAINING | SqlAllowXDBChaining
DISABLENETWORKPROTOCOLS | SqlDisableNetworkProtocols
SAPWD | SqlSaPwd
UPGRADEUSER | SqlUpgradeUser
UPGRADEPWD | SqlUpgradePwd

有关与其他安装程序参数相对应的合并模块属性的信息，请参见 SQL Server 2000 联机丛书中的“Using the SQL Server Desktop Engine Merge Modules”（使用 SQL Server Desktop Engine 合并模块）主题。

##### 请求安装程序日志

如果在运行安装程序时遇到困难且需要用一个详细的日志来帮助进行调试，请指定 /L*v <LogFileName>。<LogFileName> 是安装程序用来记录其所有操作的日志文件的名称。如果指定名称时不能包含路径，就会在当前文件夹中创建日志文件。如果是从 SQL Server 2000 SP3a CD 执行安装程序，则必须指定一个指向磁盘上文件夹的完整路径。下面的示例将在 C: 驱动器的根文件夹中创建一个名为 MSDELog.log 的日志文件：

setup /upgradesp sqlrun DISABLENETWORKPROTOCOLS=1 /L*v C:/MSDELog.log

### 3.7.4 将现有的 MSDE 2000 实例升级到 SP3a

以下信息仅适用于 Desktop Engine (MSDE 2000)。

本节中的示例将现有的 MSDE 2000 实例升级到 SP3a，并且禁用该 MSDE 2000 实例的网络连接。如果该实例必须接受在其他计算机上运行的应用程序的连接，请不要指定 DISABLENETWORKPROTOCOLS 参数。

本节中的示例假定 sa 登录有一个强密码。有关 sa 登录密码的更多信息，请参见 3.7.2 MSDE 2000 SP3a 的安全注意事项。

升级 SQL Server 2000 Desktop Engine

1. 打开命令提示符窗口。
2. 从命令提示符，使用 cd 命令导航至包含 MSDE 2000 SP3a 安装实用工具的文件夹：

   cd c:\MSDESP3aFolder\MSDE

   其中，c:\MSDESP3aFolder 是一个路径，它指向 MSDE 2000 SP3a 文件解压缩到的文件夹或者 SQL Server 2000 SP3a CD 上的 Desktop Engine SP3a 文件夹。

3. 执行下列命令之一：
   - 对于使用 Windows 身份验证模式的默认实例，执行：

         setup /upgradesp sqlrun DISABLENETWORKPROTOCOLS=1

   - 对于使用 Windows 身份验证模式的命名实例，执行：

         setup /upgradesp sqlrun INSTANCENAME=InstanceName DISABLENETWORKPROTOCOLS=1

   - 对于使用混合模式的默认实例（其中，AnAdminLogin 是 sysadmin 固定服务器角色的成员），执行：

         setup /upgradesp sqlrun SECURITYMODE=SQL UPGRADEUSER=AnAdminLogin UPGRADEPWD=AdminPassword DISABLENETWORKPROTOCOLS=1

   - 对于使用混合模式的命名实例（其中，AnAdminLogin 是 sysadmin 固定服务器角色的成员），执行：

         setup /upgradesp sqlrun INSTANCENAME= InstanceName SECURITYMODE=SQL UPGRADEUSER=AnAdminLogin UPGRADEPWD=AdminPassword DISABLENETWORKPROTOCOLS=1

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

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

### 3.7.5 安装新的 MSDE 2000 SP3a 实例

以下信息仅适用于 Desktop Engine (MSDE 2000)。

本节中的示例将安装新的 MSDE 2000 SP3a 实例，并禁用其网络连接。如果该实例必须接受在其他计算机上运行的应用程序的连接，则还要指定 DISABLENETWORKPROTOCOLS=0。

这些示例使用所有配置项（如排序规则和文件位置）的默认设置安装实例。这些配置可以由安装参数（如 COLLATION、DATADIR 和 TARGETDIR）来控制。有关安装时可以指定的配置参数的更多信息，请参见 SQL Server 2000 联机丛书（更新 - SP3）中的“Customizing Desktop Engine Setup.exe”（自定义 Desktop Engine Setup.exe）。有关安装 SQL Server 2000 联机丛书（更新 - SP3）的更多信息，请参见 1.6 更新的联机丛书文档可用

安装新的 Desktop Engine 实例

1. 打开命令提示符窗口。
2. 在命令提示符下，使用 cd 命令导航至包含 MSDE 2000 SP3a 安装实用工具的文件夹：

   cd c:\MSDESP3aFolder\MSDE

   其中，c:\MSDESP3aFolder 是一个路径，它指向 MSDE 2000 SP3a 文件解压缩到的文件夹或者 SQL Server 2000 SP3a CD 上的 Desktop Engine SP3a 文件夹。

3. 执行下列命令之一：
   - 若要安装被配置为使用 Windows 身份验证模式的默认实例，请执行：

         setup SAPWD="AStrongSAPwd"

     其中，AStrongSAPwd 是为 sa 登录指定的强密码。

   - 若要安装被配置为使用 Windows 身份验证模式的命名实例，请执行：

         setup INSTANCENAME="InstanceName" SAPWD="AStrongSAPwd"

     其中，AStrongSAPwd 是为 sa 登录指定的强密码，InstanceName 是为该实例指定的名称。

   - 若要安装被配置为使用混合模式的默认实例，请执行：

         setup SAPWD="AStrongSAPwd" SECURITYMODE=SQL

     其中，AStrongSAPwd 是为 sa 登录指定的强密码。

   - 若要安装被配置为使用混合模式的命名实例，请执行：

         setup INSTANCENAME="InstanceName" SECURITYMODE=SQL SAPWD="AStrongSAPwd"

     其中 AStrongSAPwd 是为 sa 登录指定的强密码，InstanceName 是为该实例指定的名称。

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

重要 即使实例被配置为使用 Windows 身份验证模式，也请始终为 sa 登录指定一个强密码。

### 3.7.6 将 MSDE 1.0 升级到 MSDE 2000 SP3a

以下信息仅适用于 Desktop Engine (MSDE 2000)。

本节中的实例将现有的 MSDE 1.0 实例升级到 MSDE 2000 SP3a，并且禁用该实例的网络连接。如果该实例必须接受在其他计算机上运行的应用程序的连接，请不要指定 DISABLENETWORKPROTOCOLS 参数。

MSDE 1.0 与 MSDE 2000 的默认实例的运行方式相同，且总是升级为 MSDE 2000 默认实例。

从 Desktop Engine 1.0 升级

1. 打开命令提示符窗口。
2. 在命令提示符下，使用 cd 命令导航至包含 MSDE 2000 SP3a 安装实用工具的文件夹：

   cd c:\MSDESP3aFolder\MSDE

   其中 c:\MSDESP3aFolder 是一个路径，它指向将 MSDE 2000 SP3a 文件解压缩到的文件夹或者 SQL Server 2000 SP3a CD 上的 Desktop Engine SP3a 文件夹。

3. 执行下列命令之一：
   - 若使用 Windows 身份验证模式，请执行：

         setup UPGRADE=1 DISABLENETWORKPROTOCOLS=1

   - 若使用混合模式（其中，AnAdminLogin 是 sysadmin 固定服务器角色的成员），请执行：

         setup UPGRADE=1 SECURITYMODE=SQL UPGRADEUSER=AnAdminLogin UPGRADEPWD=AdminPassword DISABLENETWORKPROTOCOLS=1

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

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

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

### 3.7.7 再分发 MSDE 2000 SP3a

以下信息仅适用于 Desktop Engine (MSDE 2000)。

如果应用程序供应商拥有分发 MSDE 2000 的许可证，那么 Desktop Engine SP3a 中应该包含随应用程序再分发 MSDE 2000 所必需的所有文件。可以按照 SQL Server 2000 联机丛书（更新 - SP3）中的描述分发 Desktop Engine SP3a 文件，但需按如下所示针对 SP3 进行一些特定的更改：

- 3.7.2 MSDE 2000 SP3a 的安全注意事项
- 3.7.3 MSDE 2000 安装参数

有关安装 SQL Server 2000 联机丛书（更新 - SP3）的更多信息，请参见 1.6 更新的联机丛书文档可用。

##### 分发 Desktop Engine SP3a 修补程序

如果某个应用程序有基于 Windows 安装程序的安装实用工具，则它可以通过使用 MSDE 2000 合并模块来安装 MSDE 2000 实例。Desktop Engine (MSDE 2000) SP3a 提供合并模块以支持使用合并模块的现有应用程序。新应用程序的安装实用工具应当编写为调用 MSDE 2000 安装实用工具（而不是使用 MSDE 2000 合并模块）

如果供应商选择使用 MSDE 2000 合并模块安装 MSDE 2000 实例，则他们还必须为其客户提供以后所有的 MSDE 2000 修补程序。对于使用合并模块安装的 MSDE 2000 实例，Windows 安装程序使用与应用程序相关的产品代码 GUID 进行标记。只有同时包含应用程序产品代码 GUID 的修补程序文件才能修补这些 MSDE 2000 实例。只有那些由应用程序供应商创建的修补程序文件才会包含正确的产品代码。由 Microsoft 提供的 Desktop Engine (MSDE 2000) Service Pack 不能应用于这些实例。应用程序供应商必须使用 Desktop Engine SP3a 文件构建修补程序文件，并将这些修补程序文件分发给所有需要 SP3a 中的修补程序的 MSDE 客户。

有关创建修补程序包的更多信息，请参见 Windows 安装程序软件开发工具包 (SDK) 中包含的文档。可以从 Microsoft Platform SDK 网站下载该 SDK。

如果应用程序的安装实用工具通过调用 MSDE 2000 安装实用工具来安装 MSDE 2000 实例，则 MSDE 2000 实例使用 MSDE 2000 产品代码 GUID 进行标记。客户可以使用标准的 Microsoft MSDE 2000 Service Pack 文件来修补这些实例。应用程序供应商可以选择下列某个方法来分发 MSDE 2000 SP3a：

- 指导客户从 SQL Server 2000 SP3a 下载页或 SQL Server 2000 SP3a CD 安装 Desktop Engine SP3a
- 下载 CHS_SQL2KDeskSP3.exe 下载文件，并将该文件以及描述如何应用该 Service Pack 的说明一起分发给客户。
- 使用 Desktop Engine SP3a 文件，创建 Service Pack 应用程序实用工具，以便在由应用程序安装的 MSDE 2000 实例上安装 SP3a。

如果应用程序供应商选择指导客户直接应用 SP3a，则应该根据客户的需求自定义一组说明。

有关 Microsoft 应用程序小组为其客户准备的 MSDE 2000 Service Pack 说明类型的示例，请参见该 Microsoft MSDE 应用程序网页。

### 3.7.8 MSDE 2000 SP3a 文件

以下信息仅适用于 Desktop Engine (MSDE 2000)。

所有的 Desktop Engine SP3a 安装文件和文件夹都位于以下位置的 \MSDE 文件夹中：

- SQL Server 2000 SP3a CD-ROM
- 包含从 CHS_SQL2KDeskSP3.exe 解压缩的 Service Pack 文件的目录

\MSDE 文件夹中包含 SP3readme.htm 文件、readme.txt 文件、license.txt 文件和安装实用工具的可执行文件。它还包含下列子文件夹：

- \Msi：包含安装 Windows 安装程序或者升级 Windows 安装程序（如果版本低于 2.0.2600.0）所必需的可执行文件。
- \MSM：包含合并模块安装程序所必需的合并模块。
- \Setup：包含 MSDE 2000 安装程序用来安装新的 MSDE 2000 SP3a 实例所必需的 .msi 安装包文件、用来将现有的 MSDE 2000 实例升级到 SP3a 的 msp 修补程序包文件、包含安装程序安装的文件的 sqlrun.cab 压缩包文件。

有关使用 Desktop Engine 合并模块的说明，请参见 SQL Server 联机丛书中的“Using SQL Server Desktop Engine Merge Modules”（使用 SQL Server Desktop Engine 合并模块）主题。

如果应用程序的安装程序调用 MSDE 2000 安装程序，请创建一个具有如下结构和文件集的文件夹（其中 MSDEInstallFolder 是一个示例文件夹名）：

MSDEInstallFolder

将下列文件从 Desktop Engine SP3a \MSDE 文件夹复制到其中：Setup.exe、Setup.ini、Setup.rll 和 sqlresld.dll。

MSDEInstallFolder\Msi

将 Desktop Engine SP3a \MSDE\Msi 文件夹中的所有文件复制到其中。

MSDEInstallFolder\Setup

将 Desktop Engine SP3a \MSDE\Setup 文件夹中的所有文件复制到其中。

然后执行 Setup.exe 以安装或升级为 MSDE 2000 SP3a 实例。

如果计算机上尚未安装 Windows 安装程序或者其版本低于用 MSDE 2000 SP3a 安装程序测试的版本，安装程序将使用 MSDEInstallFolder\Msi 文件夹中的文件来升级 Windows 安装程序。

## 3.8 重新启动服务

以下信息适用于所有组件。

完成安装后，可能会提示您重新启动系统。在系统重新启动（或者完成安装但未请求重新启动）之后，使用“控制面板”中的“服务”应用程序，确保在应用 Service Pack 之前停止的所有服务现在正在运行。包括以下服务：MS DTC、Microsoft 搜索、MSSQLServer、MSSQLServerOLAPService、SQLServerAgent 或者其实例所特定的等效服务。

此时，一定还要对升级后的 master 和 msdb 数据库进行备份。

## 3.9 重新启动应用程序

以下信息适用于所有组件。

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

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

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

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

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

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

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

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

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

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

说明 如果从运行虚拟服务器的节点运行安装程序，则必须对所有节点重新应用 SP3a，还必须重新运行数据库升级脚本。

在群集上安装 Analysis Services SP3a 时，必须分别升级每个实例。

在 Analysis Services 群集上安装 SP3a

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

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

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

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

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

##### 在作为发布服务器和订阅服务器的服务器上安装 SP3a

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

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

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

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

###### 示例 2：允许依次升级的拓扑

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

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

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

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

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

SP3a 更改了附加或还原复制数据库的要求。有关更多信息，请参见 5.3.17 附加或还原复制数据库要求的更改。

SP3a 安装程序升级作为复制拓扑成员的用户数据库。如果作为复制拓扑成员的任何数据库不可写，则为了对这些数据库应用 SP3a，必须使它们可写，然后重新应用 SP3a 安装程序。有关使数据库可写的详细信息，请参见 3.12 对只读数据库或文件组应用 SP3a。有关重新应用 SP3a 的信息，请参见 3.14 重新应用 SP3a。

如果在升级到 SP3a 之后出现故障，则可以使用现有的复制备份方案将数据库还原到已知点。建议在应用 SP3a 之后，为复制拓扑中包含的所有用户数据库创建日志或完整的数据库备份。这样，如果复制数据库失败，就不必在还原数据库之后重新应用 SP3a。

## 3.12 对只读数据库或文件组应用 SP3a

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

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

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

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

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

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

对只读数据库应用 SP3a

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

       ALTER DATABASE database SET READ_WRITE

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

       ALTER DATABASE database SET READ_ONLY

对只读文件组应用 SP3a

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”参考主题。有关重新应用 SP3a 的更多信息，请参见 3.14 重新应用 SP3a。

## 3.13 卸载 SP3a

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

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

#### 卸载 SQL Server 2000 Database Components 和 Desktop Engine SP3a

若要将 SQL Server 2000 组件还原到 SP3a 之前的版本，则必须拥有在安装 SP3a 之前创建的 master、 msdb 和model 数据库的备份。有关更多信息，请参见 3.1 备份 SQL Server 数据库。

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

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

将 SQL Server 还原到 SP3a 之前的版本

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

   警告 在将 SQL Server 还原到 SP3a 之前的版本后，将丢失自应用 SP3a 以来对 master、msdb 和 model 数据库进行的所有更改。

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

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

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

将 SQL Server 还原到 SP3a 之前的版本

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

## 3.14 重新应用 SP3a

以下信息适用于所有组件。

在以下情况中，必须重新应用 SP3a：

- 应用 SP3a 之后添加了新的 SQL Server 2000 组件。
- 使最初应用 SP3a 时属于复制拓扑的只读数据库或文件组可写后。

若要重新应用 SP3a，请按照 3.0 安装 Service Pack 中的步骤操作。

# 4.0 其他安装注意事项

本节描述仅在某些特殊情况下适用的其他一些 Service Pack 安装注意事项。

## 4.1 无值守安装

可以通过无值守模式对 SQL Server 实例应用 Database Components SP3a。Database Components SP3a CD-ROM 中包含可用于执行无值守 SP3a 安装和其他类型安装的 .iss 文件。下列文件位于 CD-ROM 的根目录中：

- 无值守安装文件 Sql2kdef.iss，用于对 Windows 2000 或 Windows NT 4.0 上运行的 SQL Server 2000 默认实例应用 Database Components SP3a。需要使用相应的批处理文件 Sql2kdef.bat。
- 安装文件 Sql2knm.iss，用于对 Windows 2000 或 Windows NT 4.0 上运行的 SQL Server 2000 命名实例应用 Database Components SP3a。必须更改此 .iss 文件中的实例名称，以标识要升级的实例。
- 安装文件 Sql2ktls.iss，用于对仅限工具的安装应用 Database Components SP3a。此文件可直接用于安装，无需进行任何修改。
- 安装文件 Sql2k9x.iss，用于对 Windows Millennium Edition 或 Windows 98 计算机应用 Database Components SP3a。必须更改此 .iss 文件中的实例名称，以标识要升级的实例。
- 安装文件 Sql2kcli.iss，用于对 Windows 95 计算机上的客户组件安装应用 Database Components SP3a。
- 安装文件 Msolap.iss，用于存储运行 Analysis Services SP3a 无值守安装所需的参数列表。

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

##### 无值守安装的注意事项

执行无值守安装时，需注意以下事项：

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

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

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

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

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

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

Database Components SP3a 包括自解压缩文件 Sqlredis.exe。在运行 Sqlredis.exe 时，它：

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

可以按照 SP3a 附带的 Redist.txt 文件中的条款和条件再分发 Sqlredis.exe 文件。

# 5.0 文档说明

本节除了介绍 SP3a 中的新功能外，还将描述在运行 SP3a 时可能会遇到的各种问题。这些问题可能发生在运行 Service Pack 从 SQL Server 2000、SQL Server 2000 SP1 或 SQL Server 2000 SP2 进行升级的情况下。并不准备在本节中描述 SP3a 中提供的所有修补程序。有关这些修补程序的完整列表，请参见 Microsoft 知识库文章 306908。

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

对于未能及时包含在本自述文件中、与 SQL Server 2000 Service Pack 3a 相关的信息，将发布在 Microsoft 知识库文章 816502 中。

这些 Microsoft 知识库文章位于 Microsoft 产品支持服务知识库中。

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

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

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

在 SP1 中引入

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

说明 如果客户机或服务器上没有含中文、日语或朝鲜语字符的数据库，则无需重新应用 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.5 关于 SP3a 的其他信息。

##### 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 安装完成后重建全文目录

在 SP1 中引入

除从 SP3 升级以外，安装 SP3a 时所有全文目录都会重建。该重建过程是自动执行的，并且会大量耗用资源。完成该重建过程之前，查询全文目录可能会仅返回部分结果或不返回任何结果。安装 SP3a 之后，系统事件日志中包含一些消息，指出目录已破坏、版本太旧或必须重建。

有关信息，请参见知识库文章 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 选项。在 SQL Server 2000 SP3 或更高版本中，现在有两个选项可用来将 LIKE 运算发送到链接服务器。如果用于链接服务器的 OLE DB 提供程序支持 LIKE 运算符和通配符的 SQL Server 语法，则可以指定 SqlServerLIKE 选项，以便让 SQL Server 使用 SQL Server 语法发送 LIKE 运算。如果用于链接服务器的 OLE DB 提供程序报告它支持 Entry Level ANSI/ISO SQL-92 语法或者返回 SQLPROP_ANSILIKE 属性，则 SQL Server 将使用 SQL-92 语法将 LIKE 运算发送到链接服务器。有关 SQLPROP_ANSILIKE 的更多信息，请参见 SQL Server 2000 联机丛书中的“SQLPROPSET_OPTHINTS 属性集程序设计”主题。

必须添加一个注册表项值，才能为 OLE DB 提供程序启用 SqlServerLIKE 选项。

警告 如果注册表编辑不当，可能会导致严重问题并需要重新安装操作系统。Microsoft 不能保证因注册表编辑不当而导致的问题会得到解决。编辑注册表之前，请备份所有重要数据。

1. 打开 Regedit32。
2. 查找正确的注册表项：
   - 对于命名实例，查找以下注册表项：

     HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\<实例名>\Providers\<提供程序名>

   - 对于默认实例，查找以下注册表项：

     HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer\Providers\<提供程序名>

3. 在 <提供程序名> 项中，添加一个 DWORD 值 SqlServerLIKE，并将它的值设置为 1。

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

在 SP1 中引入

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

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

    SELECT * 来自 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 语句

在 SP1 中引入

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 跨数据库所有权链接

在 SP1 中引入

此 Service Pack 提供了一个新选项，可以用来打开和关闭跨数据库所有权链接。

在安装 Database Components SP3a 时，安装程序的“后向兼容性一览表”对话框中显示一个用来配置跨数据库所有权链接的选项。默认情况下，安装程序对所有用户数据库关闭跨数据库所有权链接。您可以对所有数据库启用跨数据库所有权链接。有关更多信息，请参见“后向兼容性一览表”对话框。

在安装 Desktop Engine SP3a 时，可以使用 ALLOWXDBCHAINING 安装参数为所有数据库启用跨数据库所有权链接。有关更多信息，请参见 3.7.3 MSDE 2000 安装参数。

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

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

- 使用 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.[BUILD_NUMBER] 之前的版本）上启用了跨数据库所有权链接，则必须在安装 SP3a 之后重新启用它。

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

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

在 SP1 中引入

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

### 5.1.13 sp_changedbowner 的权限更改

在 SP1 中引入

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

### 5.1.14 调试功能的更改

在 SP1 中引入

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

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

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

### 5.1.15 UDP 端口 1434 的操作

在 SP3a 中引入

从 SQL Server 2000 SP3a 开始，如果 SQL Server 2000 数据库引擎和 MSDE 2000 实例未被配置为支持网络通信，将停止使用用户数据报协议 (UDP) 端口 1434。配置为支持网络通信的实例将使用 UDP 端口 1434。

对于升级到 SP3a 的实例，如果所有服务器 Net-Library（共享内存 Net-Library 除外）都被禁用，它将停止使用 UDP 端口 1434。只要启用任何一个服务器 Net-Library，该实例又将开始使用端口 1434。有关禁用或启用服务器 Net-Library 的更多信息，请参见 SQL Server 2000 联机丛书中的“SQL Server 网络实用工具”主题。

只有将计算机上所有 SQL Server 2000 和 MSDE 2000 实例都升级到了 SP3a 并配置为不支持网络通信，该计算机才会停止使用 UDP 端口 1434。

UDP 端口 1434 的打开和关闭与共享内存 Net-Library 的状态无关。共享内存 Net-Library 只供本地连接使用，它不使用网络。共享内存 Net-Library 始终处于活动状态；它不能被启用或禁用。

还可以在安装或升级 MSDE 2000 实例时指定是否禁用服务器 Net-Library：使用 MSDE 2000 安装实用工具的 DISABLENETWORKPROTOCOLS 参数或 MSDE 2000 合并模块的SqlDisableNetworkProtocols 属性。有关这些选项的更多信息，请参见 3.7.3 MSDE 2000 安装参数。

安装或升级 SQL Server 2000 数据库引擎实例时，不能禁用所有服务器 Net-Library。

## 5.2 Analysis Services 增强功能

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

### 5.2.1 远程分区

在 SP1 中引入

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

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

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

在 SP1 中引入

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

- PTSLite.exe
- PTSFull.exe

这些文件位于 Service Pack 安装目录的 \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 多维数据集的限制

在 SP1 中引入

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

### 5.2.6 新关键字 DESCRIPTION

在 SP1 中引入

本地多维数据集现在支持度量和维度的内在成员属性 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 属性

在 SP1 中引入

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 属性的更改

在 SP1 中引入

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

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

在 SP1 中引入

在 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 文件夹的权限

在 SP1 中引入

如果 Analysis Services Data 文件夹不在运行分析服务器的计算机上，那么运行 SP3a 安装程序之后必须修改该文件夹的权限。在远程计算机机上，设置该文件夹的权限以允许运行分析服务器的计算机上 OLAP Administrators 组的所有成员进行完全控制访问。以后，在 OLAP Administrators 组中添加或删除成员时，请务必更改远程 Data 文件夹的权限，以便反映 OLAP Administrators 组当前的成员。这样备份和还原将可以正常工作。

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

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

## 5.3 复制增强功能

本节讨论 SP3a 中包含的 SQL Server 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'
    The statement returns:

    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 或更高版本，合并代理程序配置文件不会自动更新；可通过运行 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 SP3a 中，且希望保留复制设置，则必须运行 sp_vupgrade_replication。运行 sp_vupgrade_replication 可以确保复制元数据会被升级。如果不运行 sp_vupgrade_replication，复制元数据可能会处于一种无法预知的状态。
- 如果要从使用 SQL Server 7.0（发行版本、SP1、SP2、SP3 和 SP4）创建的备份中将数据库还原到 SQL Server 2000 中，且希望保留复制设置，则必须在安装 Service Pack 之前重建备份。可以直接从在 SQL Server 7.0 中创建的复制数据库备份中将数据库还原到 SQL Server 2000 SP3a 中，但是将不会保留复制设置。

### 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 合并复制使用新角色

在 SP1 中引入

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 非系统管理员用户创建的订阅的新要求

在 SP1 中引入

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

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

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

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

在 SP1 中引入

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

### 5.3.14 sp_addmergearticle 和 sp_changemergearticle 的新参数

在 SP1 中引入

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

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

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

在 SP1 中引入

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

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

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

在 SP1 中引入

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

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

在 SP1 中引入

在某些情况下，在附加或还原发布数据库的过程中，复制可能无法正常工作。包括以下情况：

- 已应用 SP3 或更高版本。
- 附加数据库的用户不是 sysadmin 固定服务器角色的成员。
- 尚未启用跨数据库链接。

如果符合上述所有情况，则应在附加或还原的数据库上执行 sp_changedbowner 存储过程。将所有权指定给内置的 sa 管理员登录。这将确保复制功能能够正常运行。

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

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

## 5.4 SQL Server 代理增强功能

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

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

在 SP2 中引入

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

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

在 SP1 中引入

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

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

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

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

升级主/目标服务器配置

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

       --Option A: Windows authentication
       EXEC sp_grantlogin 'DOMAIN\user'
       GO
       USE msdb
       GO
       EXEC sp_adduser 'DOMAIN\user', 'DOMAIN\user', 'TargetServersRole'
       GO

       --Option B: SQL Server authentication – see explanation below for
       --details.
       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 服务器逐个升级到 SP3a。（应用 Service Pack 之前，请参见步骤 3 以获取有关升级时间安排的更多信息。）
3. 为了尽可能缩短停机时间，请在完成 SP3a 更新之后，尽快在每个 TSX 服务器上运行扩展存储过程 xp_sqlagent_msx_account。

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

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

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

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

在 SP1 中引入

SP3a 包含一个新的扩展存储过程，该存储过程允许您配置一个帐户，以供 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'',  -- Reserved for future use
       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'',  -- Reserved for future use
       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 代理权限检查

在 SP1 中引入

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

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

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

### 5.4.5 SQL 代理邮件 MAPI 配置文件

在 SP1 中引入

在 32 位版本的 SQL Server 2000 中，SQL 代理邮件可以配置为使用扩展 MAPI 电子邮件配置文件来发送电子邮件警报。可以使用扩展 MAPI 电子邮件应用程序（如 Microsoft Outlook）来创建扩展 MAPI 配置文件。在 64 位版本的 SQL Server 2000 中，SQL 代理邮件只能使用简单 MAPI 配置文件来发送电子邮件警报。不要在 32 位版本的 SQL Server 2000 中使用简单 MAPI 配置文件。

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

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

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

在 SP3a 中引入

SP3a 中包括对 Microsoft 数据访问组件 (MDAC) 的更新。在安装 SP3a 时，同时会安装 MDAC 2.7 Service Pack 1a。与由 SQL Server 2000 安装的 MDAC 版本 (MDAC 2.6) 相比，MDAC 2.7 SP1a 没有什么功能上的变化，但其中包含一些功能修复和安全性增强功能。MDAC 2.7 SP1a 包括到 MSXML 3 SP3 的升级。

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

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

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

在 SP1 中引入

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 增强功能

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

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

在 SP1 中引入

现在，元数据浏览器以 Unicode 格式导出基于 XML 的元数据。在 SQL Server 2000 SP1 之前，此浏览器导出的是不支持非英语字符的 ANSI 码。用户可能看不到这一功能性的改变。自 SP3a 版起，导出的数据总是用 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 禁用脚本支持

在 SP1 中引入

禁用了信息模型中的脚本支持。安装 SP3a 之后，当应用程序访问为其定义了脚本的属性或方法时，将收到以下错误：

    EREP_SCRIPTS_NOTENABLED

启用脚本支持

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

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

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

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

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

在 SP1 中引入

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

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

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

本节讨论 SP3a 中包含的 SQL Server 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 中引入

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

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

在 SP1 中引入

默认情况下，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 增强功能

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

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

在 SP1 中引入

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

应用 SP3 或更高版本时，会在升级 MDAC 的过程中安装更新版本的 MSXML (3.0 SP3)。有关更多信息，请参见 5.5.1 Microsoft 数据访问组件的更新。

对于新版本的 MSXML，谓词不能紧跟在当前上下文节点缩写词特殊字符的后面。在升级到 SP3 或更高版本之后，SQLXML 查询（对所批注的映射架构执行的 XPath 查询）和被编写来转换 SQLXML 查询结果的 XSLT 样式表中存在语法错误的 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 命令为在单个快照中固定和捕获多个数据库提供了服务器端支持。

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

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

## 5.10 错误报告

在 SP1 中引入

默认情况下，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，建议您应用它。安全性增强功能位于 SP3a CD-ROM 的 \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 联机丛书。