关于sqlite断电或者存储空间不足造成的数据文件损坏问题

wangxkww 2011-11-01 05:16:59
公司原来使用Sqlite数据库存储一些数据,会因为突然断电造成数据文件损坏,现在考虑将软件移植到嵌入式下,请问各位,

1.对于sqlite,如果产生断电或者存储空间不足等问题,是否有方法避免数据文件损坏;

2.存储在硬盘与存储到SD卡是否在这个断电问题上还有差异;

3.使用sqlite的事务是否可以避免数据文件损坏

谢谢大家
...全文
1283 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lcf901020 2014-05-22
  • 打赏
  • 举报
回复
引用 4 楼 Neusoft6T 的回复:
1.断电情况下数据库文件会损坏?你测试过?由于项目需要,这几天也在调查这个问题。我在虚拟机环境下插入数据过程中强制关闭虚拟机模拟断电操作,数据库没有被损坏,重新打开系统,数据库照样可以访问。给一个SQLite官方document的链接How To Corrupt An SQLite Database File(http://www.sqlite.org/howtocorrupt.html)其中第一段如下: An SQLite database is highly resistant to corruption. If an application crash, or an operating-system crash, or even a power failure occurs in the middle of a transaction, the partially written transaction should be automatically rolled back the next time the database file is accessed. The recovery process is fully automatic and does not require any action on the part of the user or the application. 也就是说在写事务过程中断电是不会损坏数据库文件的。但并不是说断电就一定不会损坏数据库文件,只是说写事务修改数据库过程中断电SQLite的操作是不会损坏数据库文件的,如果断电对硬盘介质造成损坏或影响了文件系统,那是有可能间接造成数据库文件损坏的,这种情况下什么文件都有可能受损,是不受我们控制的。至于为什么断电不会损坏数据库,你可以调查一下hot journal或者Write-Ahead Log,在此就不多说了。 2.SD卡更操蛋。具体体现在数据从缓存中同步到磁盘过程中。 3.在问题1里说的断电不会由于SQLite写事务对数据库文件造成损坏,其实现机制就是利用了事务+日志机制,想具体了解就看hot journal或者Write-Ahead Log部分。 建议先看那篇文档,文档中描述了其它几种有可能造成数据库文件损坏的原因和解决办法。 如果我的理解有什么地方有问题欢迎探讨。
你说的很对,本人实际验证
silensilensilen 2012-09-18
  • 打赏
  • 举报
回复
我最近也遇到这个问题,郁闷数据都没有了,不知道有没有办法恢复?
Neusoft6T 2011-11-07
  • 打赏
  • 举报
回复
1.断电情况下数据库文件会损坏?你测试过?由于项目需要,这几天也在调查这个问题。我在虚拟机环境下插入数据过程中强制关闭虚拟机模拟断电操作,数据库没有被损坏,重新打开系统,数据库照样可以访问。给一个SQLite官方document的链接How To Corrupt An SQLite Database File(http://www.sqlite.org/howtocorrupt.html)其中第一段如下:
An SQLite database is highly resistant to corruption. If an application crash, or an operating-system crash, or even a power failure occurs in the middle of a transaction, the partially written transaction should be automatically rolled back the next time the database file is accessed. The recovery process is fully automatic and does not require any action on the part of the user or the application.
也就是说在写事务过程中断电是不会损坏数据库文件的。但并不是说断电就一定不会损坏数据库文件,只是说写事务修改数据库过程中断电SQLite的操作是不会损坏数据库文件的,如果断电对硬盘介质造成损坏或影响了文件系统,那是有可能间接造成数据库文件损坏的,这种情况下什么文件都有可能受损,是不受我们控制的。至于为什么断电不会损坏数据库,你可以调查一下hot journal或者Write-Ahead Log,在此就不多说了。
2.SD卡更操蛋。具体体现在数据从缓存中同步到磁盘过程中。
3.在问题1里说的断电不会由于SQLite写事务对数据库文件造成损坏,其实现机制就是利用了事务+日志机制,想具体了解就看hot journal或者Write-Ahead Log部分。
建议先看那篇文档,文档中描述了其它几种有可能造成数据库文件损坏的原因和解决办法。
如果我的理解有什么地方有问题欢迎探讨。
wangxkww 2011-11-01
  • 打赏
  • 举报
回复
ok 明白鸟 谢谢两位 结贴了
ACMAIN_CHM 2011-11-01
  • 打赏
  • 举报
回复
[Quote]1.对于sqlite,如果产生断电或者存储空间不足等问题,是否有方法避免数据文件损坏;[/Quote]没有办法,只能加强备份。

[Quote]2.存储在硬盘与存储到SD卡是否在这个断电问题上还有差异;[/Quote]SD卡更糟。

[Quote]3.使用sqlite的事务是否可以避免数据文件损坏[/Quote]无法避免断电这种文件格式损坏。
wwwwb 2011-11-01
  • 打赏
  • 举报
回复
sqlite是桌面数据库,没有日志,在断电、非正常退出的情况不任何数据库都会出问题,
加UPS、经常备份、检查磁盘空间情况

1.对于sqlite,如果产生断电或者存储空间不足等问题,是否有方法避免数据文件损坏;
没有,除非加UPS,存储空间不足在程序中判断磁盘 OR SD卡的剩余空间
2.存储在硬盘与存储到SD卡是否在这个断电问题上还有差异;
应该没有区别
3.使用sqlite的事务是否可以避免数据文件损坏
不能,是数据完整性的

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧