2012-06-05 9 views
6

Ich habe SQLite-Datenbank auf meinem lokalen Host (Win NT) und möchte es sichern. Ich möchte den Shell-Befehl '.backup' verwenden, um diese Aufgabe zu erledigen. Aber es scheint, dass ich während des Backup-Vorgangs eine neue Zeile in die Datenbank einfügen kann.sqlite3 shell Befehl '.backup' und Transaktion

Spricht '.backup' Shell-Befehl neue exklusive Transaktion auf meiner Datenbank?

Ich dachte, wenn ich '.backup' Shell-Befehl ausführen, sperrt es meine Datenbank.

Antwort

3

Die sqlite3-Sicherungsmethode sperrt die Datenbank nicht. Ich würde vorschlagen, die folgende Abhilfe zu verwenden, wenn Sie die Datenbank sperren mögen:

  • eine Transaktion starten (Shared-Sperre)
  • Durch jede INSERT Anweisung erhält die Datenbank einen reservierten Sperre. Diese INSERT-Anweisung kann jedoch leer sein.
  • Sichern Sie die Datenbank.
  • Beenden Sie die Transaktion mit einem ROLLBACK oder COMMIT.

Code:

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

Ein weniger hacky Weg wäre, wenn Sie eine Tabelle mit dem Namen 'Backup' und Sie einfügen eine Zeile (Datum, ..) für jede Kopie (wenn diese Information ist für Sie relevant).