sqlite数据库加锁提交_如何解锁SQLite数据库?

如何解锁SQLite数据库?

sqlite> DELETE FROM mails WHERE (`id` = 71);

SQL error: database is locked

如何解锁数据库以便这样做?

ryantm asked 2019-03-04T16:16:22Z

30个解决方案

226 votes

在Windows中你可以尝试这个程序[http://www.nirsoft.net/utils/opened_files_view.html]来找出处理db文件的过程。 尝试关闭该程序以解锁数据库

在Linux和macOS中,您可以执行类似的操作,例如,如果您的锁定文件是development.db:

$ fuser development.db

此命令将显示锁定文件的进程:

> development.db:5430

只是杀了这个过程......

杀了-9 5430

...并且您的数据库将被解锁。

noneno answered 2019-03-04T16:17:24Z

82 votes

我在写入过程中使应用程序崩溃导致我的sqlite数据库被锁定。 这是我如何修复它:

echo ".dump" | sqlite old.db | sqlite new.db

摘自:[http://random.kakaopor.hu/how-to-repair-an-sqlite-database]

robert answered 2019-03-04T16:17:56Z

51 votes

SQLite wiki DatabaseIsLocked页面提供了对此错误消息的良好解释。 它部分地说明争用的来源是内部的(对于发出错误的过程)。

这个页面没有解释的是SQLite如何决定你的进程中的某些东西是否存在锁定以及哪些条件可能导致误报。

converter42 answered 2019-03-04T16:18:29Z

27 votes

删除-journal文件听起来像一个糟糕的主意。 它允许sqlite在崩溃后将数据库回滚到一致状态。 如果在数据库处于不一致状态时将其删除,则会留下损坏的数据库。 引用sqlite站点的页面:

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

我们怀疑SQLite恢复的常见故障模式是这样的:发生电源故障。 电源恢复后,善意的用户或系统管理员开始在磁盘上查看损坏情况。 他们看到他们的数据库文件名为“important.data”。 这个文件对他们来说可能很熟悉。 但在崩溃之后,还有一个名为“important.data-journal”的热门期刊。 然后用户删除热门日志,认为他们正在帮助清理系统。 除了用户教育之外,我们知道无法阻止这种情况。

回滚应该在下次打开数据库时自动发生,但如果进程无法锁定数据库,则会失败。 正如其他人所说,其中一个可能的原因是另一个流程目前正在开放。 如果数据库位于NFS卷上,则另一种可能性是过时的NFS锁定。 在这种情况下,解决方法是使用未在NFS服务器上锁定的新副本替换数据库文件(mv database.db original.db; cp original.db database.db)。 请注意,由于NFS文件锁定的错误实现,sqlite FAQ建议谨慎对NFS卷上的数据库进行并发访问。

我无法解释为什么删除-journal文件会让你锁定以前无法访问的数据库。 这是可重复的吗?

顺便说一下,-journal文件的存在并不一定意味着发生了崩溃或者有回滚的变化。 Sqlite有一些不同的日志模式,在PERSIST或TRUNCATE模式下,它始终保留-journal文件,并更改内容以指示是否存在要回滚的部分事务。

Aaron answered 2019-03-04T16:19:36Z

12 votes

如果进程锁定SQLite DB并崩溃,则数据库将永久锁定。 那就是问题所在。 并不是某些其他进程有锁定。

answered 2019-03-04T16:20:02Z

12 votes

如果要删除“数据库已锁定”错误,请按照下列步骤操作:

将数据库文件复制到其他位置。

用复制的数据库替换数据库。 这将取消引用正在访问数据库文件的所有进程。

vinayak jadi answered 2019-03-0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值