KB934458 - 修复:在 SQL Server 2005 版本 3042 到 3053 中,在某些情况下,维护计划中的“检查数据库完整性”任务和“执行 T-SQL 语句”任务可能会丢失数据库上下文

应用对象
Microsoft SQL Server 2005 Developer Edition Microsoft SQL Server 2005 Enterprise Edition Microsoft SQL Server 2005 Enterprise X64 Edition Microsoft SQL Server 2005 Standard Edition Microsoft SQL Server 2005 Standard X64 Edition

Bug #:50001012 (SQL 修补程序)

症状

在 Microsoft SQL Server 2005 Service Pack 2 (SP2) 中,在某些情况下,维护计划中的以下任务可能会丢失数据库上下文:

  • 检查数据库完整性
  • 执行 T-SQL 语句

例如,如果将“检查数据库完整性”任务配置为检查多个数据库的完整性,则该任务将重复检查默认数据库。

对于执行 T-SQL 语句任务,如果满足以下条件,则会出现此问题:

  • 执行 T-SQL 语句任务包含多个批处理。

  • 批次由 GO 语句分隔。

  • 批处理均不使用 USE 语句指定数据库。

  • 每批处理中的语句不包含数据库名称。

在这种情况下,第二批和后续批处理中的这些语句将针对默认数据库执行。

注意 可以使用 SQL Server Profiler 确认是否出现了此问题。 跟踪维护计划执行时,请参阅 SQL Server Profiler 中的“数据库”列。

解决方法

此问题发生在 SQL Server 2005 内部版本 3042 到 3053 和 SQL Server 2005 内部版本 3150 到 3158 中。 如果运行的是介于 3042 和 3053 之间的 SQL Server 2005 SP2 内部版本,请从 Microsoft 下载中心下载并安装以下关键更新。

若要获取此更新的独立程序包,请转到 Microsoft 更新目录网站。

安装此关键更新后,SQL Server 2005 的内部版本为 3054。

有关如何下载 Microsoft 支持文件的更多信息,请单击以下文章编号,以查看 Microsoft 知识库中相应的文章:

119591 如何从联机服务获取Microsoft支持文件Microsoft扫描此文件是否有病毒。 Microsoft 使用的是文件发布时可以获得的最新病毒检测软件。 该文件存储在安全性得到增强的服务器上,以防止对文件进行未经授权的更改。

文件信息

此关键更新的英文版的文件属性 (或更高版本的文件属性) 如下表中列出。 这些文件的日期和时间以协调世界时 (UTC) 格式列出。 在查看文件信息时,文件时间将转换为本地时间。 要了解 UTC 与本地时间之间的时差,请使用“控制面板”中“日期和时间”项中的“时区”选项卡。

32 位版本的 SQL Server 2005

文件名 文件版本 文件大小 日期 时间 平台
Microsoft.sqlserver.maintenanceplantasks.dll 9.0.3054.0 296,304 2007 年 3 月 23 日 2,113 x86
Sqlaccess.dll 2005.90.3054.0 350,576 2007 年 3 月 23 日 2,113 x86
Sqlservr.exe 2005.90.3054.0 29,181,808 2007 年 3 月 23 日 2,113 x86

基于 x64 的 SQL Server 2005 版本

文件名 文件版本 文件大小 日期 时间 平台
Microsoft.sqlserver.maintenanceplantasks.dll 9.0.3054.0 296,304 2007 年 3 月 23 日 2,113 x86
Sqlaccess.dll 2005.90.3054.0 357,744 2007 年 3 月 24 日 02:40 x86
Sqlservr.exe 2005.90.3054.0 38,516,080 2007 年 3 月 24 日 02:40 x64

基于 Itanium 版本的 SQL Server 2005

文件名 文件版本 文件大小 日期 时间 平台
Microsoft.sqlserver.maintenanceplantasks.dll 9.0.3054.0 296,304 2007 年 3 月 23 日 2,113 x86
Sqlaccess.dll 2005.90.3054.0 352,112 2007 年 3 月 24 日 03:59 x86
Sqlservr.exe 2005.90.3054.0 72,583,024 2007 年 3 月 24 日 03:59 ia64

如果您运行的是 3150 和 3158 之间的 SQL Server 2005 SP2 的任何内部版本,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

934459修复: 在 SQL Server 2005 版本 3150 到 3158 中,在某些情况下,维护计划中的“检查数据库完整性”任务和“执行 T-SQL 语句”任务可能会丢失数据库上下文
 若要以自动方式获取此关键更新,请访问以下 Microsoft 更新网站:

https://update.microsoft.com安装此关键更新后,SQL Server 2005 的内部版本为 3161。

有关如何确定 SQL Server 版本的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

321185 如何识别SQL Server版本
 

状态

Microsoft 已确认在 "适用于" 部分中所列的 Microsoft 产品中存在问题。

详细信息

在 SQL Server 2005 SP2 的原始发行版及更早版本中,与维护计划任务相关的命令会累积然后同时执行。 发生错误时,将不再执行任务,并且不再执行剩余的维护任务。 在 SQL Server 2005 SP2 中,一次提交一个批处理。 在 SQL Server 2005 SP2 的原始发行版本中,批次之间的数据库连接被重置。 后来的批次保留在默认数据库的上下文中,而不是在执行 GO 语句之前存在的上下文中。 受影响的任务取决于执行 GO 语句之前存在的上下文,特别是“检查数据库完整性”任务和“执行 T-SQL 语句”任务。