6

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

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

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

4

1 回答 1

3

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

  • 启动事务(共享锁)
  • 通过使用任何INSERT语句,数据库都会获得一个保留锁。但是,此INSERT语句可以为空。
  • 备份数据库。
  • 使用ROLLBACK或结束事务COMMIT

代码:

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

如果您使用的是名为“备份”的表,并且您正在为每个副本插入一行(日期,..)(如果此信息与您相关),那么一种不那么 hacky 的方法是。

于 2012-08-07T18:38:11.543 回答