SQLite3数据库文件锁定为读取和完整性检查
试图提交200-300万行的插入时,进程崩溃。现在,我发现数据库文件在所有活动中都被锁定,包括读取、转储和运行完整性检查SQLite3数据库文件锁定为读取和完整性检查,sqlite,panfs,Sqlite,Panfs,试图提交200-300万行的插入时,进程崩溃。现在,我发现数据库文件在所有活动中都被锁定,包括读取、转储和运行完整性检查 我可以以某种方式解锁此数据库,或者让sqlite3恢复该文件吗 有没有办法恢复此数据库文件的内容?我确实有24小时前的备份,但是如果我必须完全回滚到旧版本的数据库,那么各种其他数据都将丢失 代码如下: $ sqlite3 dbFile.sqlite SQLite version 3.19.3 2017-06-08 14:26:16 Enter ".help" for usag
$ 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
exists)
使用stat,我发现有问题的文件夹类型为panfs
,这可能是问题的原因。我能在这里做什么
值得注意的是,它不是的副本,因为数据库(1)没有被任何正在运行的进程锁定,如上所述,(2)也被锁定用于读取,(3)由于完全的读/写锁定,.dump
中的解决方案不适用(因为.dump
失败)
最密切相关的问题是,尽管它位于不同的NFS文件系统上。显然,PanFS服务器没有注意到崩溃,因此仍然报告写锁 如果可能,您可以尝试卸载并重新装载此计算机上的文件系统
或者,将这两个文件(数据库和日志)复制到其他位置。当您打开该数据库时,SQLite将回滚部分事务。可能重复的事务。不幸的是,它不是!我更新了我的问题以澄清关键的区别。您提到了NFS和panfs。此数据库是否在网络装载上?我将数据库文件移动到ext2/ext3fs,并能够打开/转储数据库。谢谢