文章编号: 180500 - 最后修改: 2006年5月30日 - 修订: 5.0

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

展开全部 | 关闭全部

症状

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

18-96/11 10:48:32.60 内核 udactivate (主): 未能打开
用于 vdn 127 C:\MSSQL\DATA\MSDB.DAT (或 C:\DATA\SQL\MSDB.MDF) 设备
閿欒娑堟伅 2
18-96/11 10:48:32.60 内核 udopen: 操作系统错误 (该 2
系统找不到指定的文件)。 创建/打开期间
物理设备 C:\MSSQL\DATA\MSDB.DAT (或 C:\DATA\SQL\MSDB.MDF)

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

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

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

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

18-96/11 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 (仅用于 Master 数据库) 主题。

原因

在启动时,SQL Server 试图获得设备文件上的排它锁。 如果设备正由另一进程 (渚嬪备份软件),或者如果缺少该文件遇到以上所述的方案。 鍦 ㄨ 繖浜涙儏鍐典笅有通常是无任何问题设备和数据库。 对于正确,恢复数据库设备必须使可用,,然后必须将数据库状态重置。

替代方法

若要 ヨ 瑙 e 喅姝 ら 棶棰橈执行以下步骤。 请注意最后一步是关键。
  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? (http://support.microsoft.com/kb/165918/ ) 绕过 (紧急) 模式和 WITH NO_LOG DUMP 事务
重要 如果使用本文 (Q165918) 不确定的任何操作正在执行完全的后果联系您的主要支持提供者联系以获得帮助。


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

文章翻译