6

頻繁にクラッシュするプログラム (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.sqlite20KBなので、これは明らかに機能しませんでした。別のスレッドに触発されて、私も試しました

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

このソリューションに欠点があるのか​​どうか、また、なぜこのソリューションの前に他の方法が提案されているのか疑問に思います。

4

1 に答える 1