SQL数据库在现在的中小型企业中运用是非常多地,但它的损坏也是很常见地,现就SQL数据库损坏的状况、原因及应急方案分析一下。 一.在还原数据库和附加数据库时出错 SQL备份有两种方法:一是直接复制MDF和LDF文件,二是利用SQL备份机制创建备份文件,但无论是那种备份都会出现无法附加或无法还原的情况。下面就分析一下出错的原因。 1. 在利用备份出来的数据库文件和日志文件附加时会报“错误:823”和“一致性错误”如图: 这种错误出现的原因有: (1)在数据库读写过程中突然死机或重启,重启后数据库有时会出现“置疑”,这时利用MDF和LDF文件附加时就会出现“一致性错误”,有的会出现“错误:823”,这种错误出现的原因是在数据库读写过程中,机器突然死机或重启,由于缓冲数据丢失,数据库无法写入正确的数据,那么数据库会写入一些无关的数据,这样就会造成数据库出错。 (2)在备份数据库时由于磁盘中有坏道,备份出来的MDF文件不完整时也会出现这种错误,这种情况必须地修复损坏MDF文件中损坏的页,但有时会丢失几条数据! 如果出现上面的错误,如果对MDF文件结构不是很清楚的话,请不要对原文件进行胡乱修改,这样会适得其反,会造成更大的损失。 2.因为SQL备份数据库机制有问题(人个感觉,如果数据非常庞大时,备份出来的文件有时会有问题),当用户利用备份出来的备份文件进行还原数据库,数据库会报“发和内部一致性错误”和无任何提示的错误,其中“发和内部一致性错误”最为常见。如图: 出现这种情况大部分都是备份文件损坏造成地,有部分备份文件备份时一切正常,但还原时就会提示“发和内部一致性错误”,这种错误的修复比较复杂,因为我们不能用任何SQL语句进行修复。如果损坏不是很严重时,我们可以在还原数据时选择“恢复完成状态”中地“使数据库不再运行,但能还原其它事务日志”,这样就可以用命令来修复,常常这种情况用命令修复完后,数据会丢失部分! 二.附加还原数据库后,检测数据库是出现一致性错误和分配错误
三.最为常见的“未能读取并闩锁页 (1:4234)(用闩锁类型 SH)” 要检测数据库,会常见到下面的错误: “服务器: 消息 8966,级别 16,状态 1,行 1 未能读取并闩锁页 (1:4234)(用闩锁类型 SH)。sysobjects 失败”。 这种“未能读取并闩锁页 (1:4234)(用闩锁类型 SH)”错误常常会出现在系统表中:sysobjects、sysindexes、syscolumns等中,这种错误出现的原因是因为系统表被破坏,这种错误是很麻烦地,因为SQL的效验比较严密,只要稍改一个关键字节,都出报这个错误,但有时可以导出部分数据。 四.误删除或误格式化后SQL数据库的恢复 在很多情况下,用户会误删除或误格式化掉SQL数据库,出现这种情况后用户会用市面上软件FinalData和EasyRecovery来恢复数据库,虽然用这些数据库软件可以恢复出MDF和LDF文件来,但100%都会无法附加地(除非数据库不使用),即使附加成功,但错误会很多,数据库也无法使用,因为数据库在日常中经常增加和删除记录,这样就会出数据库文件存储不连续的情况,而市面上的软件都是连续取数据,所以会造成数据库无法附加。 出现这种错误时,用户应尽量不要使用本计算机,更不要安装软件和写任何数据。由于市面上的软件还没有完全智能地恢复数据库,所以只能手工恢复这种误删除的数据,这样就必须了解SQL数据库文件的结构。