sqlite3的外壳命令“的.backup”和交易(sqlite3 shell command &#

2019-09-17 19:09发布

我有我的本地主机(Windows NT的)在SQLite数据库,并希望将它备份起来。 我想用shell命令“的.backup”来完成这个任务。 但似乎我可以在备份过程中插入新行到数据库中。

不“的.backup” shell命令在我的数据库启动新的独家交易?

我想,当我执行“的.backup” shell命令锁定我的数据库。

Answer 1:

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

  • 启动一个事务(共享锁)
  • 通过使用任何INSERT语句时,数据库得到了保留锁。 然而,这个INSERT语句可以是空的。
  • 备份数据库。
  • 通过使用结束事务ROLLBACKCOMMIT

码:

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

一个不太哈克的方式是,如果你使用的是名为“备份”表,您插入的每个副本行(日期,..)(如果该信息对于你)。



文章来源: sqlite3 shell command '.backup' and transaction