SQL Server 返回了错误 21(设备未就绪。) 解决方法

最新把之前的项目迁移到新机器上,装完Sqlserver后。把原来的数据库文件附加后,无法访问,修改了数据库文件的读写属性。

后面web程序连接数据库时,程序报错了,SQL Server 返回了错误 21(设备未就绪。以前没见过这个错,网上查找,执行一段sql后就好了。sql如下:

use master

declare @databasename varchar(255)

set @databasename='leddb'

exec sp_dboption @databasename, N'single', N'true'--将目标数据库置为单用户状态

dbcc checkdb (@databasename,REPAIR_ALLOW_DATA_LOSS)

dbcc checkdb (@databasename,REPAIR_REBUILD)

exec sp_dboption @databasename, N'single', N'false'--将目标数据库置为多用户状态

执行完有报错,但是web程序也已经可以正常连接了

### SQL Server 列偏移问题及解决方案 当遇到类似于‘F:\DB\Ly_XXX.mdf’中、偏移量为 0x0000000009c000的位置执行读取期间,操作系统已经向 SQL Server 返回错误 21 (设备就绪)[^1]的情况时,这通常意味着存在物理磁盘或文件系统的损坏。这类问题是比较严重的,因为它们可能影响到数据库的一致性和可用性。 对于此类问题的一个常见处理方式是尝试通过重启SQL Server服务来解决问题。具体操作可以通过命令提示符输入`services.msc`打开服务管理器,找到并重新启动相应的SQL Server实例[^4]。然而这种方法仅适用于临时性的系统资源冲突情况,在某些情况下并不能彻底修复底层的数据文件损伤。 更深入的解决办法涉及到了解决潜在的数据文件损坏: - **检查硬件状态**:确认存储介质本身没有故障是非常重要的一步。如果硬盘有坏道或者其他形式的物理损害,则需要更换硬件。 - **运行一致性检测工具**:利用Windows自带的chkdsk工具扫描和修正NTFS卷上的任何逻辑文件系统错误。该过程可以在安全模式下或者引导至恢复环境来进行以获得更好的访问权限[^2]。 - **使用DBCC CHECKDB命令**:这是针对SQL Server内部结构进行健康状况评估的关键手段之一。它能够识别出各种类型的元数据不一致以及索引碎片等问题,并提供两种级别的自动修复选项——REPAIR_ALLOW_DATA_LOSS 和 REPAIR_REBUILD 。需要注意的是前者可能导致部分数据丢失所以应谨慎选择[^5]。 ```sql USE master; GO ALTER DATABASE YourDatabaseName SET SINGLE_USER WITH ROLLBACK IMMEDIATE; GO DBCC CHECKDB ('YourDatabaseName', REPAIR_REBUILD); -- 或者在必要时采用允许损失的方式 -- DBCC CHECKDB ('YourDatabaseName', REPAIR_ALLOW_DATA_LOSS); GO ALTER DATABASE YourDatabaseName SET MULTI_USER; GO ``` 上述措施可以帮助缓解由于列偏移引发的各种异常现象,但在实施之前建议先备份好重要资料以防万一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值