我使用 sqlite3 的 open() 方法打开数据库文件并获得数据库连接,直到程序退出后连接才会关闭。如果出现计算机突然断电或操作系统崩溃等意外错误,是否会损坏数据库文件的模式,或丢失其句柄?更具体地说,如果我重新启动计算机,它可以保持可写状态吗?顺便说一句,我不关心发生错误时的数据丢失。
非常感谢你!
我使用 sqlite3 的 open() 方法打开数据库文件并获得数据库连接,直到程序退出后连接才会关闭。如果出现计算机突然断电或操作系统崩溃等意外错误,是否会损坏数据库文件的模式,或丢失其句柄?更具体地说,如果我重新启动计算机,它可以保持可写状态吗?顺便说一句,我不关心发生错误时的数据丢失。
非常感谢你!
SQLite 是专门为防止这种情况而设计的。从官方SQLite 是 Transactional页面:
SQLite 中单个事务中的所有更改要么完全发生,要么根本不发生,即使将更改写入磁盘的行为被中断
- 程序崩溃,
- 操作系统崩溃,或
- 电源故障。
上一段的声明在 SQLite 回归测试套件中使用特殊的测试工具进行了广泛检查,该工具可以模拟操作系统崩溃和电源故障对数据库文件的影响。
如果您需要了解有关它们如何防止上述崩溃的具体细节,您可能还对 SQLite 文章Atomic Commit in SQLite感兴趣。
当进程处于数据库更新过程中并且程序或操作系统崩溃或电源故障阻止更新完成时,将创建热日志。热门期刊是一种例外情况。热日志的存在是为了从崩溃和电源故障中恢复。如果一切正常(也就是说,如果没有崩溃或电源故障),您将永远不会获得热门期刊。
可能发生的最坏情况是您需要删除崩溃后留下的热门日志。
由于 Sqlite 符合 ACID,因此关机不应该成为问题。
突然断电可能会发生任何事情。但是,我建议 UPS 减轻任何风险。