InterBase/Firebird 常见损坏错误及其恢复几率
Alexey Kovyazin, 31-03-2014
以下是 InterBase/Firebird 数据库中常见错误和问题的描述及其恢复可能性。
要获得准确的恢复价格和时间,请通过电子邮件联系我们。
有关大致定价,请参阅“Firebird 和 InterBase 恢复”服务说明。无法 100% 保证所描述的错误与所述原因完全对应。
内部 gds 软件一致性检查(找不到提示页 (165))
错误描述
数据库无法使用 Firebird 或 InterBase 引擎打开,并出现以下消息:内部 gds 软件一致性检查(找不到提示页 (165))
异常关闭或物理数据库文件损坏。事务清单页(TIP)已丢失。损坏区域可能从几页到整个数据库不等,因此需要进一步调查。
原因(为什么会发生?)最可能的原因是服务器异常关闭(使用重置按钮)、错误的备份方法或备份工具。在 Windows XP 上,此类损坏可能由“gdb”文件的“系统还原”功能引起。
恢复过程
首先,应使用 FirstAID Diagnostician 扫描数据库。如果 FirstAID 未警告严重损坏,则可以使用完整版 FirstAID 修复损坏。
如果损坏严重,则需要定制恢复。
修复损坏的可能性
99%
数据库文件显示损坏。页面类型错误。页面 NNN 类型错误(预期 X,找到 Y)
错误描述
标准输出或 firebird.log 或 interbase.log 中出现错误消息:
数据库文件显示损坏。页面类型错误。页面 NNN 类型错误(预期 X,找到 Y)
由于物理损坏或其他原因,数据库文件页面的顺序已更改,或者指针页或索引根页等上出现了错误值。
原因
最可能的原因是服务器异常关闭(使用重置按钮)、错误的备份过程或错误的备份工具/方法。
恢复过程
首先,应使用 FirstAID Diagnostician 扫描数据库。如果 FirstAID 未警告严重损坏,则可以使用完整版 FirstAID 修复损坏。
否则,需要定制恢复过程。
修复损坏的可能性
95%。
文件“*.gdb”的未知数据库 I/O 错误。尝试从文件读取时出错
错误描述
数据库无法打开,并出现以下错误消息:文件“*.gdb”的未知数据库 I/O 错误。尝试从文件读取时出错。
原因
由于服务器异常关闭,最新的数据库页面未写入磁盘。
恢复过程
定制恢复过程。使用 gfix 和备份/恢复检查数据库。
恢复可能性
95%
解压缩超出缓冲区
错误描述
出现错误消息:内部 gds 软件一致性检查(解压缩超出缓冲区 (179))
原因
这是严重的数据库损坏:系统表可能已损坏。有时此错误在数据库转移到新服务器/计算机后出现。需要调查。
恢复过程
数据库结构分析,生成新页面,需要多次迭代。
恢复可能性
95%
记录长度错误
错误描述
出现错误消息:内部 gds 软件一致性检查。记录长度错误
原因
“记录长度错误”通常由内存条故障引起。我们强烈建议检查服务器上的内存( RAM)。
恢复过程
使用 IBSurgeon 的低级工具定位并删除错误记录。需要多次迭代。
恢复可能性
97%
数据库文件显示损坏。校验和错误
错误描述
数据库文件显示损坏。校验和错误。数据库页面 XX 上出现校验和错误。
原因
内存条故障。我们强烈建议检查服务器上的内存( RAM)。
恢复过程
定制恢复过程。需要多次迭代。
恢复可能性
99%
找不到记录回滚版本
错误描述
数据库似乎正常工作,但 gbak 无法完成备份。
错误文本:
内部 gds 软件一致性检查(找不到记录回滚版本 (291))
gds_$receive 失败。由于错误在完成前退出。内部 gds 软件一致性检查(错误检查后无法继续)。
原因
最可能的原因是事务管理错误。需要调查事务性能。
恢复过程
数据库需要详细分析,通常的解决方案是找到并删除有问题的数据库对象,然后重新创建它们。有时需要将数据传输到新数据库。
恢复可能性
99%
下一事务早于最旧活动事务
错误显示
内部 gds 软件一致性检查(下一事务早于最旧活动事务 (266))
原因
此罕见错误发生在 InterBase 4.x-5.x 中,这是一个 bug。
恢复过程
定制恢复过程
恢复可能性
99%
头文件损坏
错误描述
数据库无法打开,Firebird/InterBase 不将其视为有效数据库。
原因
物理损坏,硬盘故障。
恢复过程
定制恢复过程
恢复可能性
80%
数据库文件大小超过实现限制
错误描述
这发生在 InterBase 4.x-5.x 服务器和早期 Firebird(0.9.x)测试版上。数据库无法打开,数据库文件大小为 4Gb。
原因
InterBase 4.x-5.x-6.0.x 和早期 Firebird 0.9.x 的实现限制。
恢复过程
定制恢复过程。
恢复可能性
通常,我们可以保存所有数据(即 100%),但有时可能低于 70%。
字符串转换错误
错误描述
错误文本:字符串“XXX”的转换错误。
原因
无法进行初步诊断,需要现场调查。
恢复过程
定制恢复过程。
恢复可能性
99%
INET/inet_error: 读取错误 errno = 10054 或 10038 或 10093
错误显示
firebird.log 或 interbase.log 中出现多条错误 10054、10038、10093 等。
原因
这些错误由网络问题引起 - 请检查您的集线器、网络适配器等。这本身不是 Firebird/InterBase 错误,但可能影响 Firebird/InterBase。
恢复过程
我们提供 FBScanner 工具来解决“10054 错误”问题(以及其他问题)。详情请参见此处。
恢复可能性
不适用。
未找到伙伴索引描述 (175))
错误描述
错误消息文本:内部 gds 软件一致性检查(未找到伙伴索引描述 (175))
主键或外键的索引丢失。
原因
可能由物理损坏或内部服务器 bug 引起。
恢复过程
定制恢复过程。
恢复可能性
100%
其他错误
错误描述
以下是罕见的 Firebird/InterBase 错误列表,可能由不同原因引起。请随时向我们发送您的问题描述 - 我们可以帮助您。
错误的 UDF 可能导致 interbase.log 中出现以下错误:
SCH_validate – 未进入
SCH_validate – 错误的线程
索引损坏可能导致 interbase.log 中出现以下消息:
页面 34672 是孤儿页
在单个事务中密集插入/更新/删除期间可能出现此错误:
内部 gds 软件一致性检查(保存点过多 (287))
对于以下错误,如果不调查数据库则很难识别原因:
内部 gds 软件一致性检查(保存点回滚期间出错 (290))
内部 gds 软件一致性检查(优化块大小超出 (286))
内部 gds 软件一致性检查(无效的 SEND 请求(167))
可能原因
原因各不相同。我们需要调查损坏的数据库。
恢复过程
自定义恢复过程。
恢复几率
各不相同