2012-07-15 34 views
3

Harddrive bit-rot does happen。我正在使用SQLite處理具有相當關鍵數據的項目。顯然,我會定期備份數據庫,但是會執行SQLite校驗和數據嗎?SQLite校驗其數據嗎?

我讀過關於PRAGMA integrity_check,但不能真正說出它是否對實際數據進行完整性檢查。頁面「How To Corrupt An SQLite Database File」並沒有真正提到硬盤驅動器上的位錯,這就是我所要求的原因。

此外,我正在處理的數據庫將是一個可索引僅追加日誌。一個選項是我會定期旋轉數據庫,並創建每個旋轉文件的MD5總和。但也許這是太多的工作...

任何輸入讚賞。

回答

3

從閱讀integrity_check文檔,我會說它會而不是被保證檢測隻影響用戶數據的損壞(由於未檢測到介質上的位錯誤)。

由於您的數據是隻附加日誌,因此您已經很容易了。一種方法是將文本文件日誌寫入單獨的硬盤中,該硬盤包含每行數據的散列(MD5或其他)。然後,您可以使用該散列日誌來驗證真實數據庫的內容。很顯然,備份將是您計劃的一個組成部分。

+0

是的,可悲的是,似乎integrity_check沒有這樣做。另外,如果我只是想檢測損壞的行,我可能會將MD5散列存儲在同一個數據庫中,因爲我仍然能夠檢測到損壞。還是你有其他想法? – Ztyx 2012-07-15 07:46:25

+0

將散列存儲在與數據相同的行中可能足以滿足您的需要。也許我正在考慮對數據進行惡意修補 - 如果哈希與數據存儲在同一行中,攻擊者只需要在一個位置調整數據。將散列日誌存儲在單獨的驅動器上(也使用單獨的安全證書)可以防止出現這種情況。 – 2012-07-15 07:59:02

2

剛剛偶然發現了這個;我可以使用fzec Python包來恢復損壞的數據。每行將有多個「fzec塊列」從腐敗中恢復。看起來很整齊。