在文件“E:\SQL Database\S*****d\NewAdvWorks.mdf”中偏移量 0x0000000001c000 处读取时,操作系统向 SQL Server 返回错误 21(设备尚未就绪)。SQL Server 错误日志和系统事件日志中的其他消息可能会提供更多详细信息。这是一个严重的系统级错误情况,会威胁数据库完整性,必须立即更正。完成完整的数据库一致性检查 (DBCC CHECKDB)。此错误可能由多种因素导致;有关更多信息,请参阅 SQL Server 联机丛书。
答案1
对我有用的是:
alter database [database_name] set offline
...等待几秒钟...
alter database [database_name] set online
这比重新启动 SQL Server 更好,因为重新启动 SQL Server 会使所有数据库脱机(而不仅仅是无法访问的数据库)。
答案2
我今天遇到了同样的错误。重新启动 SQL Server 服务即可解决该问题。
SQL Server 错误日志和 Windows 事件日志显示相同的错误:
在文件“blah.mdf”中偏移量 0x00000000026000 处读取时,操作系统向 SQL Server 返回错误 21(设备尚未就绪)。SQL Server 错误日志和系统事件日志中的其他消息可能会提供更多详细信息。这是一个严重的系统级错误情况,会威胁数据库完整性,必须立即更正。完成完整的数据库一致性检查 (DBCC CHECKDB)。此错误可能由多种因素导致;有关更多信息,请参阅 SQL Server 联机丛书。
和:
错误:823,严重性:24,状态:2
在阅读了 Robert van den Berg 的回答后,如果您有其他需要保持在线的数据库,我会尝试先将数据库脱机,然后再联机。
答案3
首先读取错误消息中指示的日志。
然后尝试重置服务器,然后DBCC CheckDB
再次运行。
答案4
就我而言,我可以使用
exec sp_detach_db [dbName];
其次是
exec sp_attach_db [dbName] , @filename1 = N'U:\mdf\dbName.mdf' , @filename2 = N'G:\ldf\dbName_log.ldf';
针对 SQL 2017 下的 30 个数据库。尽管“分离”过程引发了错误,但 SQL 确实分离了数据库。
我在开始分离之前使用过它
select db_name(database_id), * from sys.master_files
,因此我可以编写附加过程脚本,因为我有 30 个处于这种状态的数据库。
我找到了我的情况中的催化剂。前一天晚上我“扩展”了两个卷。磁盘管理报告说它当时无法扩展该卷。我决定等待维护窗口再试一次,目前还没有出现任何错误。
五小时后,使用 VSS 的备份开始。我确信失败的“扩展卷”和 VSS 快照的组合使卷处于异常状态。