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