2012-06-05 8 views
6

Tengo una base de datos sqlite en mi host local (Win NT) y quiero hacer una copia de seguridad. Quiero usar el comando de shell '.backup' para lograr esta tarea. Pero parece que puedo insertar nuevas filas en la base de datos durante el proceso de copia de seguridad.sqlite3 comando de shell '.backup' y transacción

¿El comando de shell '.backup' inicia una nueva transacción exclusiva en mi base de datos?

Pensé que cuando ejecutaba el comando '.backup' shell, bloqueaba mi base de datos.

Respuesta

3

El método de copia de seguridad sqlite3 no bloquea la base de datos. Yo sugeriría a utilizar la solución siguiente si desea bloquear la base de datos:

  • iniciar una transacción (bloqueo compartido)
  • Mediante el uso de cualquier declaración INSERT, la base de datos consigue un bloqueo reservado. Sin embargo, esta instrucción INSERT puede estar vacía.
  • Haga una copia de seguridad de la base de datos.
  • Finalice la transacción utilizando ROLLBACK o COMMIT.

Código:

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

Una manera menos hacky sería si está utilizando una tabla llamada 'copia de seguridad' y va a insertar una fila (fecha, ..) por cada copia (si esta información es relevante para usted).