欢迎您光临自学哈网,只为分享网络知识教程,供大家学习参考!

「自学哈网」数据库损坏(数据库损坏后的一般修复方法)

作者 : 自学哈 本文共3652个字,预计阅读时间需要10分钟 2022-10-20 共181人阅读
也想出现在这里? 联系我们

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

常见的误解

823错误

错误为:“在文件“%ls”中偏移量%#016I64x处执行%S_MSG期间,操作系统将错误%ls返回给洪都博客SQL Server。”

“在文件’ ‘ % 1!’ ‘中的% 2!MSGat偏移量%#016I64x期间,操作系统向SQL Server返回了错误% 1!. “

例如:

消息823,24级,状态3,第1行

操作系统返回错误5(访问被拒绝。)在文件“FilePath\FileName”中偏移量0x0000000000e000处写入到SQLServer。

83错误是指SQL Server在向操作系统申请读写页面时遇到Windows读写请求失败,Windows返回的错误代码和相应的文本会被插入到消息中。对于读取操作,SQL Server在报告823错误之前重试了4次读取请求。

从错误产生的机理可以够看出,823错误是在发出页面读写请求时发生的,与读写内容无关,所以823错误与SQL Server本身无关。此错误通常是由物理文件损坏引起的,但也可可以是由设备驱动程序引起的。如果823错误在一个数据文件上重复出现,要么是硬件设备故障,要么是数据文件已经严重损坏。这个错误基本上意味着数据页中的有效数据已经丢失。通常,DBCC CHECKDB很难修复。

824错误

错误为:“SQL Server检测到基于一致性的逻辑I/O错误%ls。在数据库ID % 1!中第% 2!页上的% 1!执行% 26融间,在文件’ ‘ % 1!’ ‘中偏移量%#016I64x处出现错误。

SQL Server检测到基于逻辑一致性的I/O错误:%ls。该错误发生在数据库ID % 1!中的第% 2!页的第% 1!页的第% 2!页,偏移量%#016I64x,位于文件’ ‘ % 1!’ ‘中。

例如:

SQL Server检测到基于逻辑一致性的I/O错误:tornpage(预期签名:0x0实际签名:0x4e0372a8)。在读取数据库ID 13中偏移量为0000000000000000的页(1:0)时,在以下文件中出现此错误:\ Microsoft SQL Server \ MSSQL . 1 \ MSSQL \ Data \ www 71 _ global _ Data . MDF。

此错误表明Windows报告已成功从磁盘读取该页,但SQL Server在该页中检测到逻辑错误。

常见的错误类型如下:

1、校验和

SQL Server在写入每页时可以够根据页面强度数据计算出一个校验值,一起存储在页面中。下次读取页面时,根据读取的页面数据计算新的检查值。如果写入和读取的数据相同,则两个校验值必须相等。如果两个校验值不相等,说明SQL Server上次写入的数据和这次读取的数据不一样,现在读取的数据有问题。这样,SQL Server可以够避免数据页损坏。

2、撕破的页面

撕裂页保护实际上是一种检测断电引起的页面损坏的方法。例如,意外的电源故障可可以会导致只有一部分页面被写入磁盘。使用坏页保护时,在页的每个512字节扇区的末尾放置一个2位签名(在将原来的2位复制到页头之后)。每次执行写操作时,该签名在二进制数01和10之间交替,因此总是可以够确定是否只有一些扇区被写入磁盘。如果后来在读取页面时发现某个位置的状态不正确,则说明该页面没有被正确写入,因此检测到问题的页面称为缺陷页面。与校验和相比,不完全页检测使用的资源最少,但其算法过于简单,无法检测出磁盘硬件故障导致的所有错误。

3、短期转让

读取的数据长度小于预期。例如,一个读取请求预计读取8KB的数据,但实际上只返回了4KB。这也意味着当前读取的页面已损坏。

4、错误的页面Id

读取页面后,SQL Server将存储在页面开头的页码与自己请求的目标页码进行比较。如果发现要读取的页面是第200页,而读取的内容显示是第100页,SQL Server会触发824错误。这种错误往往是由于I/O系统没有正确处理SQL Server请求而导致的,并且是带着错误页,甚至是空页发送给SQL Server的。

5、恢复待定

在SQL Server企业版中,用户可以够要求在恢复过程中跳过一些损坏的页面(出错后继续)。这些跳过的页面被标识为“恢复挂起”。如果一些用户想要访问它,他们将遇到824错误。

6、陈旧的阅读

有些硬件系统经常会写漏(SQL Server需要一个页面写入硬盘文件,I/O子系统报告写完了,但是SQL Server下次读时候会先读内容再写)。因为旧版页面本身没有问题,无论是校验和还是撕裂页算法都无法检查错误。对于这类问题,SQL Server也有对策。打开SQL Server的启动参数开关-T818后,SQL Server会在内存中维护一个哈希表,记录所有已写入页面的最新LSN(日志序列号)值。下次阅读该页时,您将比较这两个值是否相等。因为LSN是自动增长的唯一值,所以对于每个新修改的页面,LSN的值将大于原始值。如果读取的LSN与存储在存炊洒中的不一致,这意味着最后的写入请求没有真正完成。这时,824错误也会触发。

虽然是“逻辑错误”,是SQL Server主动发现的数据损坏,但损坏的源头大多不是SQL Server本身。这里的错误主要是由于预期写的不完整造成的。错误的原因基本上在I/O子系统。因为SQL Server的读写请求都是发送到Windows,再由Windows发送到底层磁盘系统,所以Windows下面的每一层都可可以出现问题,比如磁盘驱动器故障、磁盘估计问题、设备驱动不正确等。可以够负责任的说,SQL Server本身不会造成824错误。

因为824错误是发生在页面级别的逻辑错误,所以DBCC CHECKDB在许多情况下是可以够修复的。这种修理是合乎逻辑的。存储在页面中的数据在824错误发生之前就丢失了,SQL Server无法修复它们,所以824错误基本上意味着一些数据丢失了。

05错误

错误为:“尝试提取数据库% 1!中的逻辑页% 2!失败。该逻辑页属于分配单元%I64d,而不是%I64d。

“尝试提取数据库% 1!中的逻辑页% 2!失败。它属于分配单元%I64d,而不是%I64d。

例如:

尝试提取数据库2中的逻辑页(1:584)失败。它属于分配单元445237904015360,而不是72057594060079104。

05也是非常著名的数据库损坏错误。此错误通常表示指定数据库中的页面或分配已损坏。当根据页链或使用索引分配映射(IAM)读取属于表的页时,SQL Server将检测到这种损坏。分配给某个表的所有页必须属于与该表关联的分配单元之一。如果标头中包含的分配单元ID与表关联的分配单元ID不匹配,将引发此异常。错误消息中列出的第一个分配单元ID是显示在标题中的ID,而第二个分配单元值是与表关联的ID。

严重级别21表示可可以有数据损坏。原因包括损坏的页链、损坏的IAM或此对象的sys.objects目录视图中的无效条目。这些错误通常是由硬件或磁盘设备驱动程序故障引起的。

严重级别12表示可可以存在临时错误,即缓存中出现错误,但并不意味着磁盘上的数据损坏。以下情况可可以会导致的临时605错误:

操作系统过早地通知SQL Serv红豆Blogger I/O操作已经完成;尽管没有实际的数据丢失

坏的,但现实的错误信息。

运行带有优化器提示NOLOCK的查询,或将事务隔离级别设置为READ。

未承诺的.当使用NOLOCK或READ UNCOMMITTED的查询试图读取

当数据被其他用户移动或更改时,将出现605错误。如果验证是临时的

05错误,您可以够稍后重新运行查询。

通常,如果在数据访问期间出现此错误,但后续的DBCC CHECKDB操作已顺利完成,则605错误可可以是暂时的。

因为605错误意味着一些页面分配不正确,这也是一个非常严重的数据库损坏。通常,很难用DBCC CHECKDB来修复它。

其他错误

在SQL Server内部,除了文件页面分配和每页的内部格式之外,还有一些其他的约束规则。下面是一些常见的错误例子。

PFS页损坏:

消息8946,级别16,状态12,行1表错误:分配页(1:13280496)有

无效的PFS_PAGEpage标头值。类型为0。检查类型、分配单元ID和页面

页面上的ID。

系统表的聚集索引页损坏:

服务器:消息8966,级别16,状态1,第1行无法读取和锁定页面(1:18645)

带SH型插销。sysindexes失败。

消息7985,级别16,状态2,服务器启动,行1系统表预检查:对象

ID 4。无法使用闩锁类型SH读取和闩锁页面(1:51)。check语句

由于不可修复的错误而终止。

字段的值不符合字段数据类型的定义:

消息2570,级别16,状态3,第1行第(1:152)页,objectID 2073058421中的槽0,

索引ID 0,分区ID 72057594038321152,分配单元ID72057594042318848(类型

“行内数据”)。列“c1”的值超出了数据类型“datetime”的范围。更新

列设置为合法值。

本站声明:
本站所有资源来源于网络,分享目的仅供大家学习和交流!如若本站内容侵犯了原著者的合法权益,可联系邮箱976157886@qq.com进行删除。
自学哈专注于免费提供最新的分享知识、网络教程、网络技术的资源分享平台,好资源不私藏,大家一起分享!

自学哈网 » 「自学哈网」数据库损坏(数据库损坏后的一般修复方法)
也想出现在这里? 联系我们
© 2022 Theme by - 自学哈网 & WordPress Theme. All rights reserved 浙ICP备2022016594号