2012-06-05 51 views
6

我在我的本地主機(Win NT)上有sqlite數據庫並且想備份它。我想用shell命令'.backup'來完成這個任務。但似乎我可以在備份過程中將新行插入到數據庫中。sqlite3 shell命令'.backup'和事務

'.backup'shell命令對我的數據庫啓動新的獨佔事務嗎?

我想當我執行'.backup'shell命令時,它鎖定了我的數據庫。

回答

3

sqlite3備份方法不鎖定數據庫。我會建議使用以下解決方法,如果你想鎖定數據庫:

  • 開始事務(共享鎖)
  • 通過使用任何INSERT語句時,數據庫得到了保留鎖。但是,此INSERT語句可能爲空。
  • 備份數據庫。
  • 使用ROLLBACKCOMMIT結束交易。

代碼:

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

一個不太哈克的方式是,如果你使用的是名爲「備份」表,您爲每個副本中插入一行(日期,..)(如果這些信息與你有關)。