2012-06-05 5 views
6

私は自分のローカルホスト(Windows NT)にsqliteデータベースを持ち、それをバックアップします。私はシェルコマンド '.backup'を使用してこのタスクを達成したいと思います。しかし、私はバックアッププロセス中にデータベースに新しい行を挿入することができるようだ。sqlite3シェルコマンド '.backup'とトランザクション

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

私は '.backup'シェルコマンドを実行すると、自分のデータベースをロックすると思いました。

答えて

3

sqlite3のバックアップ方法ではデータベースがロックされません。私はあなたがデータベースをロックしたい場合は、以下の回避策を使用することをお勧め:

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

コード:

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

少ないハック方法は、(もしあなたが「バックアップ」という名前のテーブルを使用していて、コピーごとに行(日付、..)を挿入している場合だろうこの情報はあなたに関連します)。