Database
Firebird 數據庫損壞的原因
我在多個基於 Windows 的入門級伺服器上執行了幾個不同的 Firebird 版本(2.0、2.1),這些伺服器的硬體差異很大。它們之間唯一匹配的是它們正在執行具有相同數據庫結構的相同家庭建構應用程序。
最近,我看到多台伺服器的速度大幅下降。結果發現數據庫損壞了,所以每次它損壞時,我都會修復、備份和恢復數據庫,一段時間(1-2 週)一切都很好,然後再次重複。幸運的是,我還沒有看到任何數據失去或損壞…… 問題是,每次這樣的停機都會導致生產力下降,而且由於一些數據庫位於偏遠地區,因此對我來說常常是相當多的驅動力。
我一直在試圖找出導致腐敗的原因,但我一直無法。它在不同硬體上執行的事實暗示它不應該是基於硬體的問題。
如果我們排除硬體問題,我會覺得這是 Firebird 中的一個錯誤,因為我沒有通過 SQL 做任何花哨的事情。您是否知道如何找出導致損壞的確切原因並希望解決問題?
$$ edit $$根據第一個回复:我在 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)
檢查 firebird.log。它可能包含有關問題所在的重要資訊。
檢查您的應用程序如何處理事務。Firebird 不喜歡長時間執行的事務。它們的結果是速度變慢,最終(取決於負載等)伺服器崩潰。
對於性能問題,我推薦Sinática Monitor。
hth
根據以下列表檢查您的伺服器:
- 安裝了最新的 Firebird 版本
- 數據庫的強制寫入模式為 ON
- 使用 NTFS 文件系統
- 系統有 UPS(如果沒有 - 關閉 HDD 寫入記憶體)
- 硬體可靠(沒有因為記憶體壞、沒有壞扇區等而導致系統掛起)
- 建議使用帶有受保護記憶體記憶體的 RAID
遵循這些簡單的規則,我們的伺服器可以執行多年而沒有任何問題。