尝试提交2-3百万行的插入时,进程崩溃。现在,我发现数据库文件的所有活动均被锁定,包括读取,转储和运行完整性检查。
我可以以某种方式解锁此数据库还是让sqlite3恢复文件?
有什么方法可以恢复该数据库文件的内容?我做有24小时前的备份,但是如果我必须完全回滚到旧版本的数据库,则会丢失许多其他数据。
以下代码:
$ sqlite3 dbFile.sqlite
SQLite version 3.19.3 2017-06-08 14:26:16
Enter ".help" for usage hints.
sqlite> PRAGMA integrity_check;
Error: database is locked
sqlite> .tables
Error: database is locked
sqlite> SELECT * FROM dbTable LIMIT 1;
Error: database is locked
在数据库文件上运行fuser
表示当前没有进程试图访问该文件。 在同一目录中有一个热文件(即dbFile.sqlite-journal
存在)。
使用统计信息,我发现该文件夹的类型为panfs
,这似乎是造成该问题的原因。我在这里可以做什么?
值得注意的是不是this question的重复项,因为如上所述,数据库(1)没有被任何正在运行的进程锁定,(2)也被锁定以进行读取,并且(3)由于已完全读取/ write锁定this answer中的.dump
解决方案不适用(因为.dump
失败)。
最接近的相关问题是this question,尽管该问题位于不同的NFS文件系统上。
答案 0 :(得分:0)
显然,PanFS服务器没有注意到崩溃,因此仍然报告写锁定。
如果可能,您可以尝试在此计算机上卸载并重新装载文件系统。
或者,将两个文件(数据库和日记)复制到其他位置。当您打开该数据库时,SQLite将回滚部分事务。