SQLite3的数据库文件在突然断电或操作系统崩溃时会被损坏吗?

时间:2009-09-21 03:37:20

标签: sqlite crash data-integrity acid fault-tolerance

我打开数据库文件并使用sqlite3的open()方法获取数据库连接,并且在程序退出之前不会关闭连接。如果发生意外错误,例如计算机突然断电或操作系统崩溃,数据库文件的模式是否会损坏,或者其句柄丢失?更具体地说,如果我重启计算机,它是否可以保持可写状态?顺便说一下,我不关心错误发生时的数据丢失。

非常感谢!

3 个答案:

答案 0 :(得分:12)

SQLite 专门旨在防止这种情况发生。来自官方SQLite is Transactional页面:

  

单一内的所有变更   SQLite中的事务发生   完全与否,即使是   将改变写出来的行为   

中断磁盘      
      
  • 程序崩溃,
  •   
  • 操作系统崩溃,或
  •   
  • 电源故障。
  •   
     

前一段的主张是   在SQLite中广泛检查   使用特殊的回归测试套件   测试线束模拟   对数据库文件的影响   操作系统崩溃和电源   故障。

如果您需要了解有关如何防范崩溃的详细信息,您可能也会对SQLite文章Atomic Commit in SQLite感兴趣。

<小时/> 关于崩溃后的写作:(来自File Locking and Concurrency

  

当进程处于数据库更新过程中并且程序或操作系统崩溃或电源故障阻止更新完成时,将创建热日志。热门期刊是一种例外情况。存在热门期刊以从崩溃和电力故障中恢复。如果一切正常(也就是说,如果没有崩溃或电源故障),您将永远不会得到热门日记。

最糟糕的情况是你需要删除崩溃后留下的热门日记。

答案 1 :(得分:4)

由于Sqlite符合ACID标准,因此断电不应成为问题。

http://en.wikipedia.org/wiki/ACID

答案 2 :(得分:1)

突然断电可能会发生任何事情。但是我建议UPS减轻风险。