关闭SQLite3中的journal暂存档
相信很多使用SQLite3當做數據庫的人都會一個現象,那就是當SQLite3有做寫入的動作時,SQLite3會自動產生一個名為"數據庫名稱-journal"的暫存檔。這是做什么用的呢?
答案是用來Rollback ,換句話說,就是當數據寫入數據庫有失敗動作時,透過journal檔案予以復原到未更動前(原始)數據,來確保數據完整與一致性。如果在每次寫入的時間很長或頻繁的進行數據庫寫入情況下,因系統(主機)電力不穩或突然斷電時,那么下次重新啟動,而journal檔案若存在,則在開啟SQLite數據庫時,若發現有journal檔案的存在,便會對數據庫做Rollback 動作(還原)(詳細內容:http://www.sqlite.org/atomiccommit.html)。但是有時候系統(主機)電力不穩或突然斷電會導致journal檔案損毀,因而造成SQLite數據庫無法開啟[問題1]。必須(手動)刪除journal檔案,SQLite數據庫才能再度開啟。
目前所知的方法有兩種:
第一種方法:
在系統開機后第一次開啟或每一次使用SQLite數據庫時,先檢查是否已經存在journal檔案了,如果是則透過程序自動去刪除該journal檔案。
但是這有個問題,因為自動刪除該journal檔案,導致沒有Rollback (還原)作用,無法保障數據完整與一致性。缺點二:有時候會發生程序無法自動刪除(如:journal檔案嚴重損毀),而導致上面的問題(無法開啟數據庫)[問題1]再度發生。
?
第二種方法:
使用"PRAGMA journal_mode = OFF"指令,這個指令能關閉自動產生journal暫存檔動作。
但是如此一來當在寫入數據庫的過程,一旦發生意外狀況,將會導致SQLite數據庫無法保障數據完整與一致性。缺點二:journal_mode設定為OFF時,無法使用交易模式(Transaction)進行操作。
?
第二種方法的缺點二在如果需要使用交易模式(Transaction)進行操作時,可以透過"PRAGMA journal_mode = DELETE"指令,修改回原本的journal模式(journal_mode),就可以使用交易模式(Transaction)。
總結
以上是生活随笔為你收集整理的关闭SQLite3中的journal暂存档的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux TCP server系列(6
- 下一篇: 骁龙870神机卖1699元 realme