数据库 SQL Server 检测到基于一致性的逻辑 I/O 错误 校验和不正确 解决方法

发布时间 2023-07-25 18:30:09作者: 木头侠

消息 824,级别 24,状态 2,第 35 行
SQL Server 检测到基于一致性的逻辑 I/O 错误
校验和不正确(应为: 0xafd28414,但实际为: 0x84d07fc6)。在文件 'D:\back\U9TEST1_Data.mdf' 中、
偏移量为 0x00000a3cde4000 的位置对数据库 ID 17 中的页 (1:5367538) 执行 读取 期间,发生了该错误。
SQL Server 错误日志或系统事件日志中的其他消息可能提供了更详细信息。这是一个威胁数据库完整性的严重错误条件,
必须立即纠正。请执行完整的数据库一致性检查(DBCC CHECKDB)。此错误可以由许多因素导致;有关详细信息,请参阅 SQL Server 联机丛书。

可能原因:数据库系统表架构损坏,也可能是数据库中某个表数据文件已损坏,Sql Server并提示使用DBCC检测修复。

解决方法:

数据库中执行以下语句:

--1.设置数据库为单用户模式(会立即断开其他所有用户的连接)
ALTER DATABASE  DB_001(要修复的数据库)
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO

--2.修复数据库(允许数据丢失)
DBCC CHECKDB ('DB_001', REPAIR_ALLOW_DATA_LOSS)

--3.单用户模式关闭(多用户模式开启)
ALTER DATABASE DB_001
SET MULTI_USER;
GO

如果:通过DBCC CHECKDB('DB_001','REPAIR_ALLOW_DATA_LOSS')  修复

如以上测试无法修复,说明系统表架构已经严重损坏。

需要通过底层16机制代码 纠正错误页 。可以快速修复损坏文件

数据库中执行以下语句:
USE MASTER
GO
SP_CONFIGURE 'ALLOW UPDATES',1
GO
RECONFIGURE WITH OVERRIDE
GO
ALTER DATABASE DB_001 SET emergency
GO
ALTER DATABASE DB_001 SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
DBCC CHECKDB('DB_001 ','REPAIR_ALLOW_DATA_LOSS')
GO
ALTER DATABASE DB_001 SET ONLINE
GO
sp_configure 'allow updates', 0
GO
reconfigure with override
GO
ALTER DATABASE DB_001 SET MULTI_USER WITH ROLLBACK IMMEDIATE
GO

如果还不行,那就单表迁移吧。