关闭SQLite3中的journal暂存档

关闭SQLite3中的journal暂存档,第1张

概述相信很多使用SQLite3当做数据库的人都会一个现象,那就是当SQLite3有做写入的动作时,SQLite3会自动产生一个名为"数据库名称-journal"的暂存档。这是做什么用的呢? 答案是用来Rollback ,换句话说,就是当数据写入数据库有失败动作时,透过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暂存档全部内容,希望文章能够帮你解决关闭SQLite3中的journal暂存档所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/1179426.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-02
下一篇2022-06-02

发表评论

登录后才能评论

评论列表(0条)

    保存