Firebird 数据库损坏原因

Firebird 数据库损坏原因

我在多台入门级 Windows 服务器上运行了多个不同的 Firebird 版本(2.0、2.1),这些服务器的硬件千差万别。它们之间唯一的相同之处是它们运行的​​是相同的自制应用程序,具有相同的数据库结构。

最近,我发现多台服务器的速度大幅下降。原来是数据库损坏了,所以每次数据库损坏时,我都会修复、备份和恢复数据库,一段时间内(1-2 周)一切都正常,然后又会重复出现。谢天谢地,我还没有看到任何数据丢失或损坏……到目前为止。问题是,每次这样的停机都会导致生产力下降,而且由于一些数据库位于远程位置,我经常会花很多时间开车。

我一直在尝试找出导致损坏的原因,但一直没能找到。它在不同的硬件上运行这一事实表明它不应该是基于硬件的问题。

如果我们排除硬件问题,我有一种不好的感觉,那就是 Firebird 中的一个错误,因为我没有通过 SQL 做任何花哨的事情。您知道如何准确找出导致损坏的原因并希望解决问题吗?

[编辑] 根据第一个回复:我在 firebird.log 中遇到了几个不同的问题:

INET/inet_error: read errno = 10054
INET/inet_error: select in packet_receive errno = 10038
Relation has 12 orphan backversions (5 in use) in table LIMITAI (139)
Index 1 is corrupt on page 61700 level 1. File: ..\..\..\src\jrd\validation.cpp, line: 1659 (repeats for multiple pages and index numbers)
Page 50801 is an orphan (repeats for multiple pages)

答案1

检查 firebird.log。它可能包含有关发生问题的重要信息。
检查您的应用程序如何处理事务。Firebird 不喜欢长时间运行的事务。它们会导致速度变慢并最终(取决于负载等)导致服务器崩溃。

对于性能问题,我建议社会主义监测报

韋斯

答案2

对照以下列表检查您的服务器:

  1. 已安装最新版本的 Firebird
  2. 数据库强制写入模式已开启
  3. 使用 NTFS 文件系统
  4. 系统有 UPS(如果没有——关闭 HDD 写入缓存)
  5. 硬件可靠(没有由于内存故障、没有坏扇区等导致系统挂起)
  6. 建议使用受保护内存缓存的 RAID

遵循这些简单的规则,我们的服务器可以运行多年而不会发生任何事故。

相关内容