为了账号安全,请及时绑定邮箱和手机立即绑定

如何解锁SQLite数据库?

如何解锁SQLite数据库?

烙印99 2019-07-17 09:30:20
如何解锁SQLite数据库?sqlite> DELETE FROM mails WHERE (`id` = 71);SQL error: database is locked如何解锁数据库,这样才能正常工作?
查看完整描述

3 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

删除日志文件听起来是个糟糕的主意。它允许sqite在崩溃后将数据库回滚到一致状态。如果在数据库处于不一致状态时删除它,则会留下损坏的数据库。引用方形遗址:

如果确实发生崩溃或停电,并且磁盘上保留了一个热日志,则必须将原始数据库文件和热日志保留在磁盘上,并带有它们的原始名称,直到数据库文件被另一个SQLite进程打开并回滚为止。[.]

我们怀疑SQLite恢复的常见故障模式是这样发生的:发生电源故障。恢复电源后,善意的用户或系统管理员开始四处查看磁盘是否损坏。他们看到了他们的数据库文件,名为“import ant.data”。他们可能对这个文件很熟悉。但在崩盘后,也有一个热门杂志名为“重要数据日记”。然后,用户删除热门日志,认为他们正在帮助清理系统。除了用户教育之外,我们不知道有什么办法可以阻止这种情况。

回滚应该在下一次打开数据库时自动发生,但如果进程无法锁定数据库,则会失败。正如其他人所说,造成这种情况的一个可能原因是,另一个进程目前正在进行之中。如果数据库位于NFS卷上,则另一种可能是过期的NFS锁。在这种情况下,解决方法是将数据库文件替换为未锁定在NFS服务器上的新副本(MV database.db源.db;cp initial.db database.db)。请注意,sqlitFAQ建议注意并发访问NFS卷上的数据库,因为NFS文件锁定的实现存在缺陷。

我无法解释为什么删除日志文件会让您锁定以前无法锁定的数据库。那是可复制的吗?

顺便说一句,日志文件的存在并不一定意味着发生了崩溃,也不一定意味着需要回滚更改。Sqlitt有几种不同的日志模式,并且在持久化或截断模式中,它总是将-日记文件放在适当的位置,并更改内容以指示是否有部分事务要回滚。


查看完整回答
反对 回复 2019-07-17
  • 3 回答
  • 0 关注
  • 2853 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信