我有一个经常崩溃的程序(Zotero),它的SQLite数据库被锁定并且无法访问重启程序使用,除非我重启(我真的想避免).所以这不起作用(使用通用名称db.sqlite
代替我的实际文件zotero.sqlite
):
sqlite3 db.sqlite sqlite> .backup main backup.sqlite Error: database is locked
根据这里的答案,我试过:
echo ".dump" | sqlite3 db.sqlite | sqlite3 db.sqlite2 mv db.sqlite2 db.sqlite
db.sqlite2
是0KB所以这显然不起作用.受到另一个线程的启发,我也试过了
echo '.dump' | sqlite3 db.sqlite > db.dump cat db.dump | sqlite3 db.sqlite2 mv db.sqlite2 db.sqlite
导致db.sqlite2
文件大小略小db.sqlite
,而Zotero(需要数据库的文件)无法识别其内容.
所以这似乎是一种非常强力的方式,但是有效:
cp -pv db.sqlite db.sqlite2 rm -f db.sqlite mv db.sqlite2 db.sqlite
我想知道这个解决方案是否有任何缺点,以及为什么在此之前提出其他方法.