FoxPro DBF 索引損壞
我們正在俄羅斯和其他獨聯體國家通過一個名為 BEST 的非常古老的會計系統執行一個非常受歡迎的應用程序。這一切都建立在 FoxPro(不是 Visual Foxpro)DBF/CDX 表上。它是開放的,但沒有用於與其他軟體互動的 API。所以我們必須使用直接訪問表和數據。
我們使用 Sybase Advantage Database Server (ADS Internet Connector) 將我們的線上商店連接到 BEST。在前三個月的開發、測試和執行過程中,一切都很好。但差不多半年前,我們開始遇到索引損壞錯誤。我們幾乎嘗試了所有方法——更換了網線和 NIC、帶 HDD 的 RAID 控制器、記憶體、重新安裝了 windows 伺服器。我們重建了表和索引,查看了日誌——但一切都沒有用。兩天一次,我們遇到索引損壞錯誤,所以我們必須停止伺服器,重新索引表並重新啟動它,整個公司正在等待 10 分鐘。
我們只有 2 個表存在問題 - 訂單及其內容。使用的所有其他 300 個表都不會受到損害。使案件變得更難的另一個問題是問題不是直接的。當索引文件被破壞時 - 它沒有被看到。使用者繼續工作,直到其中一個人開始新的會話 BEST 或客戶下訂單。所以不可能抓住它發生的那一刻。
現在我們責怪ADS。有誰知道 ADS 中的此類問題及其解決方案。我瀏覽了所有網際網路尋找答案,但沒有找到。
謝謝,如果你知道的話。
CDX 索引可能發生兩種基本類型的損壞:邏輯損壞或物理損壞。根據 OP 描述說它有一段時間沒有被檢測到,這聽起來像是邏輯損壞。一種常見的邏輯損壞類型是記錄的鍵不存在,或者它們存在但鍵值不正確。CDX 索引中的物理損壞通常表現為根本無效的索引頁面(例如,鍵計數和實際鍵之間的不匹配)或具有指向不存在的其他頁面的指針。
物理損壞通常會更快被檢測到,因為應用程序在嘗試處理物理損壞頁面時通常會產生錯誤。邏輯損壞可能會在較長時間內未被檢測到,因為很有可能使用邏輯損壞的索引而不會報告任何錯誤(例如,在查找操作中找不到鍵是“正常”情況)。
假設它是 OP 中描述的邏輯損壞,一個可能的原因是 Advantage Database Server 使用的排序規則與共享數據的 FoxPro 應用程序不同。舊式 CDX 索引中不包含任何定義排序規則的資訊。您可以用來查看是否屬於這種情況的一項快速檢查是下載該
checkindex
實用程序。這是一個簡單的實用程序,可以掃描表並驗證鍵和記錄是否相互一致。如果您使用 FoxPro 重新索引表,則可以執行此實用程序(它將使用 Advantage)並確定它們是否使用相同的排序規則。有關排序規則的更多資訊在這裡。