【问题标题】:sqlite3 shell command '.backup' and transactionsqlite3 shell 命令 '.backup' 和事务
【发布时间】:2012-06-09 09:07:45
【问题描述】:
我的本地主机 (Win NT) 上有 sqlite 数据库并且想要备份它。我想使用 shell 命令 '.backup' 来完成这个任务。但似乎我可以在备份过程中将新行插入数据库。
'.backup' shell 命令是否会在我的数据库上启动新的独占事务?
我认为当我执行 '.backup' shell 命令时它会锁定我的数据库。
【问题讨论】:
标签:
shell
sqlite
backup
database-backups
【解决方案1】:
sqlite3 备份方式不锁定数据库。如果您想锁定数据库,我建议使用以下解决方法:
- 启动事务(共享锁)
- 通过使用任何
INSERT 语句,数据库将获得保留锁。但是,此 INSERT 语句可以为空。
- 备份数据库。
- 使用
ROLLBACK 或COMMIT 结束事务。
代码:
BEGIN;
INSERT INTO <anytable> SELECT * FROM <anytable> WHERE 1=0;
.backup <database> <file>
ROLLBACK;
如果您使用名为“备份”的表,并且为每个副本插入一行(日期,..)(如果此信息与您相关),那么一种不那么老套的方法。