操作系统返回错误 21(设备未就绪。)

Max*_*Max 15 sql-server errors sql-server-2016 windows-10

每次我重新启动 Windows 时,对于某些数据库,我都会收到此错误:

操作系统返回错误 21(设备未就绪。)

  1. 我检查了磁盘chkdsk /r- 没有坏扇区。
  2. 我执行DBCC CHECKDB没有错误:

    *(CHECKDB found 0 allocation errors and 0 consistency errors in database)* 
    
    Run Code Online (Sandbox Code Playgroud)
  3. 如果我重新启动 SQL Server,错误就会消失。

Windows 10 和 SQL Server 2016 Express。

Sea*_*ser 18

每次我重新启动 Windows 时,某些数据库都会出现此错误。(操作系统错误 21 - 设备未准备好)

这是由于磁盘在 SQL Server 启动时脱机或未联机,或者在 SQL Server 联机后状态发生转换。

3.如果我重新启动 SQL Server,错误就会消失

是的,因为数据库已在 SQL Server 中重新安装。您也可以离线-> 在线数据库以及它会工作,假设磁盘设备已修复。

通过将数据库放在磁盘上,禁用磁盘,运行选择查询(以获取错误),使磁盘重新联机并注意到选择仍然失败并出现相同的错误,这可以在测试环境中轻松重现。需要重新安装数据库才能再次工作并且不会出现操作系统错误 21。

你该怎么办?

让某人做一些 Windows 跟踪来找出它为什么最初没有上线或为什么它会离线(任何状态转换)或为什么它显示准备好 Windows 但实际上不是(也许需要加载其他驱动程序它)。

另外检查任何磁盘过滤器驱动程序是否是最新的,例如防病毒、主机入侵保护等,因为这些也可能会阻止服务/启动/状态。


Max*_*Max 10

我想我已经找到原因了。

问题很可能是由于“快速启动”电源选项造成的

快速启动

这是一种减少启动时间的 Windows 技术;快速启动结合了冷关机和休眠功能的元素。

在这里你可以找到另一篇关于利弊的文章

我已禁用它,问题似乎已解决。


小智 5

这些是我的观察以及我如何解决问题(为了可能有同样问题的其他人的利益)

  • 我正在使用运行 Sql 服务器的 amazon ec2 实例。
  • 我有一个连接到 ec2 实例的 EBS 块设备,该设备映射到 D: 驱动器。
  • 我的数据和日志位于 D: 驱动器中。
  • 当我停止 ec2 实例并稍后启动它时,我总是遇到“设备未就绪”的错误,并且数据库无法启动。
  • 我尝试将 MSSQLSERVER 服务设置为“延迟启动”。
  • 然而,从 sql server 日志中我发现延迟没有得到满足,并且 MSSQLSERVER 随启动一起启动。
  • 我从事件查看器中观察到 D: 驱动器变得健康的时间。
  • 从 sql server 日志中,我注意到 SQL Server 启动我的用户数据库的时间。
  • 我观察到,D:驱动器仅在6秒后才可用;显然会出现“设备未准备好”错误。
  • 我还注意到,“延迟启动”未被遵守,因为有另一个名为“SQL SERVER LaunchPad”的服务启动“MSSQLSERVER”。
  • 我不需要“Launchpad”的分析功能。所以我禁用了该服务。
  • 现在“MSSQLSERVER”启动有延迟,并且可以找到 D: 驱动器文件。


小智 5

这个问题也让我很恼火。我有 5 个数据库连接到我的 SQL Server 实例,其中 3 个工作正常,但其中 2 个抱怨

在文件“E:\xxxxxxxx.mdf”中读取偏移量 0x00000000204000 时,操作系统向 SQL Server 返回错误 21(设备未就绪。)

这是我的解决方案。

  1. 打开Services.msc ,找到名为SQL Server (实例名称)的服务,右键单击并重新启动它。
  2. 返回 ssms,刷新您的数据库,一切都应该正常。

附带说明,我确实尝试采用数据库离线/在线方法。它对我来说不起作用。暴力重启 sqlserver 服务效果很好。对于那些让所有数据库离线的风险过高的人来说,这可能是一个问题。但是,如果您只是像我一样进行本地开发,那么这个解决方案应该没问题。