sqlite3 shell命令'.backup'和事务

goR*_*ack 6 sqlite shell backup database-backups

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

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

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

Seb*_*jas 3

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

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

代码:

BEGIN;
INSERT INTO <anytable> SELECT * FROM <anytable> WHERE 1=0;
.backup <database> <file>
ROLLBACK;
Run Code Online (Sandbox Code Playgroud)

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