頻繁にクラッシュするプログラム (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
このソリューションに欠点があるのかどうか、また、なぜこのソリューションの前に他の方法が提案されているのか疑問に思います。