当我输入这个查询: 删除邮件中id = 71的所有邮件
SQLite返回以下错误:
SQL error: database is locked
我如何解锁数据库,以便这个查询将工作?
当我输入这个查询: 删除邮件中id = 71的所有邮件
SQLite返回以下错误:
SQL error: database is locked
我如何解锁数据库,以便这个查询将工作?
当前回答
如果你试图解锁Chrome数据库,用SQLite查看它,然后只需关闭Chrome。
窗户
%userprofile%\Local Settings\Application Data\Google\Chrome\User Data\Default\Web Data
or
%userprofile%\Local Settings\Application Data\Google\Chrome\User Data\Default\Chrome Web Data
Mac
~/Library/Application Support/Google/Chrome/Default/Web Data
其他回答
获得此异常的一个常见原因是,当您试图执行写操作时,仍然为读操作保留资源。例如,如果你从一个表中选择,然后尝试更新你所选择的东西,而不是先关闭你的ResultSet。
从您之前的评论中,您说存在一个-journal文件。
这可能意味着您已经打开和(EXCLUSIVE?)事务,还没有提交数据。是你的程序或者其他进程留下了-journal吗?
重新启动sqlite进程将查看日志文件,清除任何未提交的操作并删除-journal文件。
如果一个进程在SQLite DB上有一个锁,并且崩溃了,那么这个DB将永远处于锁定状态。这就是问题所在。并不是其他进程有锁。
我在一个场景中得到了这个错误,与这里描述的略有不同。
SQLite数据库位于由3个服务器共享的NFS文件系统上。在其中2个服务器上,我能够成功地对数据库运行查询,在第三个服务器上,我认为我得到了“数据库已锁定”消息。
第三台机器的问题是,在/var上没有剩余空间了。每次我试图在位于这个文件系统的任何SQLite数据库中运行查询时,我都得到了“数据库被锁定”的消息,并且在日志上出现了这个错误:
Aug 8 10:33:38 server01 kernel: lockd: cannot monitor 172.22.84.87
还有这个:
Aug 8 10:33:38 server01 rpc。statd[7430]: Failed to insert: writing /var/lib/nfs/statd/sm/other.server.name.com: No space left on device .日志含义 Aug 8 10:33:38 server01 rpc。statd[7430]: STAT_FAIL to server01 for SM_MON of 172.22.84.87
太空的情况处理好之后,一切都恢复正常了。
我导致我的sqlite数据库在写入过程中崩溃一个应用程序而被锁定。以下是我如何修复它:
echo ".dump" | sqlite old.db | sqlite new.db
摘自:http://random.kakaopor.hu/how-to-repair-an-sqlite-database