Help and Support

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

丢失设备导致数据库标记为置疑

展开全部 | 关闭全部

症状

当它尝试启动时,如果可用设备文件数据库的任一,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 (主): 为 vdn 127 的字符无法打开设备 C:\MSSQL\DATA\MSDB.DAT (或 C:\DATA\SQL\MSDB.MDF)
这些将遵循的日志中的更高版本:
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? (http://support.microsoft.com/kb/165918/ ) 跳过 (紧急) 模式和 DUMP TRANSACTION WITH NO _ LOG
重要 如果您使用本文 (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 不再提供支持的产品。因此本文按“原样”提供,并且不再更新。

文章翻译