2012-06-05 18 views
6

Yerel ana bilgisayarımda (Win NT) sqlite veritabanı var ve yedeklemek istiyorum. Bu görevi gerçekleştirmek için '.backup' kabuk komutunu kullanmak istiyorum. Ancak yedekleme işlemi sırasında yeni bir satır ekleyebilirim.sqlite3 shell komutu '.backup' ve işlem

'.backup' kabuk komutu veritabanımda yeni özel işlem başlatır mı?

'.backup' kabuk komutunu çalıştırdığımda veritabanımı kilitlediğimi düşündüm.

cevap

3

sqlite3 yedekleme yöntemi veritabanını kilitlemez. Veritabanını kilitlemek isterseniz aşağıdaki geçici çözümü kullanmak öneririm:

    herhangi INSERT deyimini kullanarak bir işlem (paylaşılan kilidi)
  • başlatın
  • , veritabanı ayrılmış bir kilit alır. Ancak, bu INSERT bildirimi boş olabilir.
  • Veritabanını yedekleyin.
  • Bir işlemi ROLLBACK veya COMMIT kullanarak sonlandırın.

Kodu:

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

Daha az hacky yolu (eğer 'yedek' adlı bir tablo kullanıyor ve her kopya için bir satır (tarih, ..) ekleyerek eğer olurdu bu bilgi sizin için geçerlidir).