如何解锁SQLite数据库?

如何解锁SQLite数据库?

sqlite> DELETE FROM mails WHERE (`id` = 71);SQL error: database is locked

如何解锁数据库,这样才能正常工作?


烙印99
浏览 2854回答 3
3回答

莫回无

删除日志文件听起来是个糟糕的主意。它允许sqite在崩溃后将数据库回滚到一致状态。如果在数据库处于不一致状态时删除它,则会留下损坏的数据库。引用方形遗址:如果确实发生崩溃或停电,并且磁盘上保留了一个热日志,则必须将原始数据库文件和热日志保留在磁盘上,并带有它们的原始名称,直到数据库文件被另一个SQLite进程打开并回滚为止。[.]我们怀疑SQLite恢复的常见故障模式是这样发生的:发生电源故障。恢复电源后,善意的用户或系统管理员开始四处查看磁盘是否损坏。他们看到了他们的数据库文件,名为“import ant.data”。他们可能对这个文件很熟悉。但在崩盘后,也有一个热门杂志名为“重要数据日记”。然后,用户删除热门日志,认为他们正在帮助清理系统。除了用户教育之外,我们不知道有什么办法可以阻止这种情况。回滚应该在下一次打开数据库时自动发生,但如果进程无法锁定数据库,则会失败。正如其他人所说,造成这种情况的一个可能原因是,另一个进程目前正在进行之中。如果数据库位于NFS卷上,则另一种可能是过期的NFS锁。在这种情况下,解决方法是将数据库文件替换为未锁定在NFS服务器上的新副本(MV database.db源.db;cp initial.db database.db)。请注意,sqlitFAQ建议注意并发访问NFS卷上的数据库,因为NFS文件锁定的实现存在缺陷。我无法解释为什么删除日志文件会让您锁定以前无法锁定的数据库。那是可复制的吗?顺便说一句,日志文件的存在并不一定意味着发生了崩溃,也不一定意味着需要回滚更改。Sqlitt有几种不同的日志模式,并且在持久化或截断模式中,它总是将-日记文件放在适当的位置,并更改内容以指示是否有部分事务要回滚。
打开App,查看更多内容
随时随地看视频慕课网APP