数据库损坏后的一般修复方法 数据库损坏( 二 )


虽然这是一个“逻辑错误”和由SQL Server主动发现的数据损坏,但损坏的来源大多不是SQL Server本身 。这里的错误主要是预期的书写没有完成造成的 。错误的原因基本上在输入/输出子系统中 。由于SQL Server的读写请求是先发送到Windows,再发送到底层磁盘系统,所以Windows下面的每一层都可能出现问题,比如磁盘驱动器故障、磁盘估计问题、设备驱动不正确等 。可以负责任地说,SQL Server本身不会造成824错误 。
因为824错误是页面级别的逻辑错误,所以在许多情况下可以修复DBCC CHECKDB 。这种修复只是逻辑上的 。存储在页面中的数据在824错误发生之前就丢失了,SQL Server无法修复它们,所以824错误基本上意味着一些数据丢失了 。
605错误 。
错误消息是:“尝试提取数据库%d中的逻辑页%S_PGID失败 。逻辑页属于分配单元%I64d,而不是%I64d 。
"尝试提取数据库%d中的逻辑页%S_PGIDin失败 。它属于分配单元%I64d,而不是%I64d 。
例如:
尝试提取数据库2中的逻辑页(1:584)失败 。它属于分配单元445237904015360,而不是72057594060079104 。
605也是一个非常著名的数据库损坏错误 。此错误通常表示指定数据库中的页面或分配已损坏 。当根据页面链或使用索引分配映射(IAM)读取属于表的页面时,SQL Server会检测到此损坏 。分配给表的所有页面必须属于与该表关联的分配单元之一 。如果标头中包含的分配单元标识与表关联的分配单元标识不匹配,则会引发此异常 。错误消息中列出的第一个分配单元标识是标题中显示的标识,而第二个分配单元值是与表相关联的标识 。
严重级别为21表示可能存在数据损坏 。原因包括损坏的页面链、损坏的IAM或对象的sys.objects目录视图中的无效条目 。这些错误通常是由硬件或磁盘设备驱动程序故障引起的 。
严重级别为12表示可能存在临时错误,即缓存中出现错误,但这并不意味着磁盘上的数据已损坏 。的临时605错误可能由以下情况引起:
系统过早地通知SQL Server输入/输出操作已经完成;虽然没有实际的数据丢失 。
糟糕,但真实的错误信息 。
使用优化器提示NOLOCK运行查询,或将事务隔离级别设置为READ 。
未提交.当使用NOLOCK或READ UNCOMMITTED的查询试图读取时 。
当其他用户移动或更改数据时,会出现605错误 。如果验证是暂时的 。
05错误,您可以稍后重新运行查询 。
通常,如果错误发生在数据访问期间,但后续的DBCC检查数据库操作没有错误地完成,则605错误可能是暂时的 。
由于605错误意味着一些页面被分配了问题,这也是一个非常严重的数据库损坏 。一般很难修复DBCC CHECKDB 。
其他错误
在SQL Server内部,除了文件页面分配和每个页面的内部格式之外,还有一些其他的约束规则 。以下是一些常见的错误例子 。
个人理财服务页面已损坏:
消息8946,级别16,状态12,第1行表错误:分配页(1:13280496)有
无效的PFS_PAGEpage标头值 。类型为0 。检查类型、所有单位标识和页面
页面上的标识 。
系统表的聚集索引页损坏:
服务器:消息8966,16级,状态1,第1行无法读取和查看页面(1:18645)
带SH型闩锁 。sysindexes失败 。
消息7985,16级,状态2,服务器SUNART,第1行系统表预检查:对象
Id 4 。无法使用锁存类型sh . ch resource network eck statement读取和锁存页面(1: 51) 。
由于不可修复的错误而终止 。
字段的值不符合字段数据类型定义:
Msg 2570,第16层,状态3,第1页(1:152),objectID 2073058421中的插槽0,
索引标识0,分区标识72057594038321152,分配单元标识72057594042318848(类型
"行内数据& quot).列& quotc1 & quot值超出了数据类型& quot日期时间& quot 。更新
列转换为合法值 。
【数据库损坏后的一般修复方法 数据库损坏】


推荐阅读