簡體   English   中英

當Sqlite數據庫損壞以及如何檢測時,技術上會發生什么?

[英]What happens technically when a Sqlite database is corrupted and how to detect?

我正在處理數據庫損壞的任務,所以我已經通過SQLite的如何破壞SQLite數據庫和SO 如何驗證數據庫文件是否有效/一致

但我有更具體的問題,這也可能有助於其他人。 布爾答案沒問題

  1. 如果sqlite數據庫文件已損壞,我可以打開它嗎? 有時還是總是?
  2. 如果answer1為yes並且我打開它,可以讀取/寫入操作使我的應用程序崩潰或者只是返回可以處理的錯誤嗎?
  3. 如果發生損壞,我的一些(下一個)讀/寫是否會成功,或者每次讀/寫都會返回錯誤?
  4. 在成功創建和關閉數據庫文件之后,我可以使用md5sum來檢測下一個文件打開中的任何損壞,前提是我想避免quick_checkintegrity_check因為它們較慢?

損壞數據的本質是,除非您運行徹底的驗證過程,否則所有投注都將被取消。 任何事情都可能發生。 豬可以飛。 誰知道。

您的問題的答案:

  1. 有時候是。 由於SQLite在打開時不會驗證整個數據庫,因此除非在打開期間讀取損壞的數據,否則無法知道該文件已損壞。
  2. 最有可能崩潰的操作將以您可以處理的方式崩潰。 如果SQLite中存在可利用的錯誤,例如緩沖區溢出錯誤或類似問題,則所有投注都會關閉,但沒有跡象表明存在這樣的問題。
  3. 有些可以工作,有些可以失敗,事先無法知道。
  4. 您無法使用MD5檢測損壞的SQLite數據庫。 對於初學者來說,正確的MD5值應該是多少? 要知道的唯一方法是從文件中計算它,這也是你要驗證的。

簡而言之,沒有執行pragma integrity_check; 您不能保證SQLite將如何處理損壞的數據庫。

例如,如果損壞發生使數據庫看起來有效,除了它不再包含用戶存儲在其中的原始數據之外怎么辦?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM