03-SQLServer事件整理
一、824事件
1、报错信息
SQL Server 检测到基于一致性的逻辑 I/O 错误 校验和不正确(应为: 0x2da0cee5,但实际为: 0x2db9cefc)。在文件 'D:\sqldata\payment.mdf' 中、偏移量为 0x00000000092000 的位置对数据库 ID 6 中的页 (1:73) 执行 读取 期间,发生了该错误。SQL Server 错误日志或系统事件日志中的其他消息可能提供了更详细信息。这是一个威胁数据库完整性的严重错误条件,必须立即纠正。请执行完整的数据库一致性检查(DBCC CHECKDB)。此错误可以由许多因素导致;有关详细信息,请参阅 SQL Server 联机丛书。
SQL Server detected a logical consistency-based I/O error: 校验和不正确(应为: 0x2da0cee5,但实际为: 0x2db9cefc). It occurred during a 读取 of page (1:73) in database ID 6 at offset 0x00000000092000 in file 'D:\sqldata\payment.mdf'. Additional messages in the SQL Server error log or system event log may provide more detail. This is a severe error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online.
2、产生原因
这个问题是我使用winhex工具,修改了.mdf文件里某一页的偏移量,然后修改的整个过程中,该数据库的页校验是CHECKSUM模式,所以在修改完偏移量数据库联机后,产生了这个问题。
原理:当数据库的页校验是CHECKSUM或TORN_PAGE_DETECTION时,每次读取页面时,会计算页面的校验和值和页眉中保存的值是否一样,不匹配的话就会报这个错误
3、解决办法
(1)做checkdb操作报错
命令:dbcc checkdb('payment')
(2)最终解决方案(使用允许丢失数据的方式修复对应的表或者库)
a.将数据库设置为单用户模式
alter database payment set single_user with rollback immediate
b.允许丢失数据对表做修复
dbcc checktable('payment.dbo.person',repair_allow_data_loss)
c.将数据库设置为多用户模式
alter database payment set multi_user with rollback immediate
再次查看发现可以查看了,但是数据丢了