SQLite3数据库文件被锁定以进行读取和完整性检查

时间:2018-08-09 13:52:08

标签: sqlite panfs

尝试提交2-3百万行的插入时,进程崩溃。现在,我发现数据库文件的所有活动均被锁定,包括读取,转储和运行完整性检查。

  1. 我可以以某种方式解锁此数据库还是让sqlite3恢复文件?

  2. 有什么方法可以恢复该数据库文件的内容?我有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文件系统上。

1 个答案:

答案 0 :(得分:0)

显然,PanFS服务器没有注意到崩溃,因此仍然报告写锁定。

如果可能,您可以尝试在此计算机上卸载并重新装载文件系统。

或者,将两个文件(数据库日记)复制到其他位置。当您打开该数据库时,SQLite将回滚部分事务。