sqlite3 shell命令'.backup'和事务

时间:2012-06-05 10:37:32

标签: shell sqlite backup database-backups

我的本​​地主机(Win NT)上有sqlite数据库,想备份它。我想使用shell命令'.backup'来完成这个任务。但似乎我可以在备份过程中将新行插入数据库。

'.backup'hell命令是否在我的数据库上启动新的独占事务?

我想当我执行'.backup'hell命令时它会锁定我的数据库。

1 个答案:

答案 0 :(得分:3)

sqlite3备份方法不会锁定数据库。如果您想锁定数据库,我建议使用以下解决方法:

  • 启动交易(共享锁定)
  • 通过使用任何INSERT语句,数据库获得保留锁。但是,此INSERT语句可以为空。
  • 备份数据库。
  • 使用ROLLBACKCOMMIT
  • 结束交易

<强>代码:

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

如果你使用名为'backup'的表并且你为每个副本插入一行(date,..)(如果这些信息与你相关),那就不那么讨厌了。