缺少设备导致数据库被标记为置疑

文章翻译 文章翻译
文章编号: 180500 - 查看本文应用于的产品
展开全部 | 关闭全部

症状

如果设备文件,为数据库中的任何一个都不可用的它将尝试启动时,SQL Server 标记数据库置疑。您可能会看到消息 SQL Server 错误日志中的以下设置之一:
错误消息 1
96/11/18 10:48:32.60 内核 udopen: 操作系统错误 32 (的
进程无法访问该文件,因为它正被另一个
过程)。在创建/打开物理的设备的过程中
C:\DATA\SQL\MSDB.DAT (或 C:\DATA\SQL\MSDB.MDF)

96/11/18 10:48:32.60 内核 udactivate (主): 未能打开
设备的 vdn 127 C:\MSSQL\DATA\MSDB.DAT (或 C:\DATA\SQL\MSDB.MDF)
错误消息 2
96/11/18 10:48:32.60 内核 udopen: 操作系统错误 (的 2
系统找不到指定的文件)。在创建/打开
物理设备 C:\MSSQL\DATA\MSDB.DAT (或 C:\DATA\SQL\MSDB.MDF)

96/11/18 10:48:32.60 内核 udactivate (主): 未能打开设备 C:\MSSQL\DATA\MSDB.DAT (或 C:\DATA\SQL\MSDB.MDF) vdn 127
这些将带有更高版本中的日志:
96/11/18 10:48:36.70 内核 udread: 操作系统错误 (的 6
句柄是无效)。设备 'C:\MSSQL\DATA\MSDB.DAT (或 C:\DATA\SQL\MSDB.MDF) 上 (virtpage
0x7f000018)。

96/11/18 10:48:36.77 spid11 错误: 840,严重性: 17,状态: 2

96/11/18 10:48:36.77 spid11 设备 (具有物理名称 MSDBData
C:\MSSQL\DATA\MSDB.DAT (或 C:\DATA\SQL\MSDB.MDF) 和虚拟设备号 127) 不是
可用。请与系统管理员联系以获得帮助。

96/11/18 10:48:36.77 spid11 缓冲区 1092480 从数据库 msdb
有页码在页眉中的 0 和 24 中的页号,
缓冲区头

96/11/18 10:48:37.43 spid11 无法继续执行的恢复
由于以前的错误的 dbid <5>。 在继续进行下一步
数据库。
例如对于执行以下步骤将说明该问题:
  1. 停止 SQL Server。
  2. 下面的命令从命令提示符处,Mssql\Data 目录:

    ren msdb.dat msdb.sav
  3. 启动 SQL Server。
您将看到 SQL Server 错误日志中上面的错误 (从第二组的)。如果您然后发出以下查询在 master 数据库中
   select name, dbid, mode, status from sysdatabases where dbid =
   db_id('msdb')
				

您会收到以下结果:
   name     dbid   mode   status
   ------------------------------
   msdb      5      0      328
				

328 的状态的计算结果为:
   truncate log on chkpt
   database not recovered yet
   database is suspect
				

有关更多的信息,请参阅 SQL Server 联机丛书中的"Sysdatabases (仅在主数据库中)"主题。

原因

在启动,SQL Server 试图获取设备文件上的排他锁。如果设备正由另一进程 (例如对于备份软件),或如果缺少该文件将会遇到以上所述的方案。在这种情况下没有通常任何问题所需的设备和数据库。要正确,恢复数据库的设备必须可供,并必须重置数据库状态。

替代方法

要变通解决此问题,请执行以下步骤。请注意最后一步是关键的。
  1. 请确保设备文件实际可用。
  2. 使用附加的存储的过程 sp_resetstatus 重置置疑数据库的状态。如果您有没有这么做,请通过执行该 Mssql\Install 目录中找到的 Instsupl.sql 脚本创建此过程。有关 sp_resetstatus 的详细信息,请参阅 SQL Server 联机丛书中的"重置潜在客户状态"主题。
  3. 置疑数据库为 master 数据库中执行 sp_resetstatus:
          use master
          go
          exec sp_resetstatus msdb   -- replace msdb with your database name
     
    						
    您将看到以下输出:
          Prior to Update sysdatabases attempt for DBName='msdb', the mode=0
          and status=328 (status suspect_bit=256). For DBName='msdb' in
          sysdatabases, status bit 256 was forced Off and mode was forced to
          0. WARNING: You MUST stop/restart SQL Server prior to accessing this
          database!
     
    					
  4. 停止并重新启动 SQL Server。
  5. 验证数据库已恢复并可用。
  6. 运行 DBCC NEWALLOC、 DBCC TEXTALL 和 DBCC CHECKDB。

更多信息

如果数据库仍在执行这些步骤之后标记为置疑,可能有其他问题导致无法恢复的数据库。此位置您或者是从一个完好的备份还原或将数据库设置为紧急模式下,使用大容量复制程序 (BCP) 在出大容量复制数据。有关详细的信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
165918绕过 (紧急) 模式和带 NO_LOG 转储事务
重要如果使用这篇文章 (Q165918) 不确定的任何您正在执行的操作完全后果与您的主要支持提供者联系以获得帮助。

属性

文章编号: 180500 - 最后修改: 2006年5月30日 - 修订: 5.0
这篇文章中的信息适用于:
  • Microsoft SQL Server 6.0 标准版
  • Microsoft SQL Server 6.5 标准版
关键字:?
kbmt kbprb KB180500 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 180500
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。
不再更新的 KB 内容免责声明
本文介绍那些 Microsoft 不再提供支持的产品。因此本文按“原样”提供,并且不再更新。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com