尝试删除SQL Server数据库时出错21

时间:2016-07-23 13:45:43

标签: sql-server

我在外部硬盘上有一个SQL Server数据库。我忘了分开数据库了。我不再需要了,但我无法删除或脱机。

当我尝试删除或使数据库脱机时,我收到以下错误。

  

Msg 823,Level 24,State 2,Line 7

     

操作系统返回   在读取期间错误21(设备未准备好。)到SQL Server   文件'E:\ Kenya Air \ Monet - Paulus.mdf'中的偏移量0x00000000012000。   SQL Server错误日志和系统事件日志中的其他消息   可能会提供更多细节。这是严重的系统级错误情况   这会威胁数据库的完整性,必须立即纠正。   完成完整的数据库一致性检查(DBCC CHECKDB)。这个错误   可能是由很多因素造成的;有关更多信息,请参阅SQL Server   在线图书。

我试过运行DBCC CHECK,但是我得到了同样的错误。

4 个答案:

答案 0 :(得分:1)

尝试使数据库脱机然后在线。

Alter database DatabaseName set offline

然后在一段时间后重新上线

Alter database DatabaseName set online

答案 1 :(得分:0)

我会在SQL中尝试系统存储过程global spawn_id。来自fine manual

  

删除数据库会从SQL Server实例中删除数据库,并删除数据库使用的物理磁盘文件。如果   删除时,数据库或其任何一个文件都处于脱机状态,   磁盘文件不会被删除。这些文件可以手动删除   使用Windows资源管理器从当前服务器中删除数据库   如果不删除文件系统中的文件,请使用   sp_detach_db

操作系统正在报告您在问题中所说的内容:在删除数据库时,SQL Server会尝试从不再存在的设备中删除该文件。因此,根据定义,数据库不能被“丢弃”。但也许它可以分离,因为它只影响系统对可用数据库列表的内部定义。

答案 2 :(得分:0)

不要试图将数据库设置为脱机并重新联机 - 这最终会使事情变得更糟 停止SQL Server - 将相应的数据库文件(数据和日志文件)移动到其他位置。再次启动SQL Server - 最终数据库将指示(恢复挂起) - 现在从SQL服务器中删除数据库。接下来将数据库文件附加回服务器,您应该没问题 - 除非文件在物理上已损坏。我已经多次看到这个问题 - 尤其是在SQL服务器设置为自动启动并且在系统重启之前没有以协调方式关闭的虚拟化SQL实例上。数据或日志文件的瞬时连接问题可能导致此问题。如果您的系统多次显示此问题,请将SQL Server设置为手动启动。

答案 3 :(得分:0)

这在MS方面确实是一个错误,但是您可以全面解决:

  1. 创建新的“虚拟”数据库
  2. 备份它
  3. 使用重定位将其还原并覆盖到由于错误21而无法删除的DB上仍然具有的驱动器中
  4. 同时删除“虚拟”数据库和您最初要删除的数据库
  5. 工作完成