6

ローカルホスト(Win NT)にsqliteデータベースがあり、バックアップしたい。このタスクを実行するためにシェルコマンド「.backup」を使用したいと思います。しかし、バックアッププロセス中にデータベースに新しい行を挿入できるようです。

'.backup'シェルコマンドはデータベースで新しい排他的トランザクションを開始しますか?

'.backup'シェルコマンドを実行すると、データベースがロックされると思いました。

4

1 に答える 1

3

sqlite3 のバックアップ方法はデータベースをロックしません。データベースをロックしたい場合は、次の回避策を使用することをお勧めします。

  • トランザクションの開始 (共有ロック)
  • INSERTステートメントを使用すると、データベースは予約済みロックを取得します。ただし、このINSERTステートメントは空にすることができます。
  • データベースをバックアップします。
  • ROLLBACKまたはを使用してトランザクションを終了しCOMMITます。

コード:

BEGIN;
INSERT INTO <anytable> SELECT * FROM <anytable> WHERE 1=0;
.backup <database> <file>
ROLLBACK;

'backup' という名前のテーブルを使用していて、各コピーに行 (日付など) を挿入している場合 (この情報が関連している場合) は、あまりハッキリしない方法です。

于 2012-08-07T18:38:11.543 に答える