我已经能够找到的唯一的文档.backup和.dump是所示的.help:
.backup ?DB? FILE Backup DB (default "main") to FILE
.dump ?TABLE? ... Dump the database in an SQL text format
If TABLE specified, only dump tables matching
LIKE pattern TABLE.
Run Code Online (Sandbox Code Playgroud)
最大的问题是:在复制/转储之前,这两个命令是否都锁定了数据库?备份是否一致?
这个答案有一些关于 的信息.backup,但是否有任何权威文档?(还有呢.dump?)我在 SQLite 的文档中唯一能找到的是“在线备份 API ”,但我对 API 不感兴趣,我只想备份数据库。
该.dump命令只是在事务中使用一堆 SELECT 语句读取整个数据库。此事务自动锁定数据库以进行写入,但允许并发读取。
这些.backup命令不打扰 SQL;它将数据库页面直接复制到一个新文件中。所有页面读取都通过正常机制访问数据库文件,并封装在事务中。当使用多个sqlite3_backup_step()调用时,事务结束以允许其他连接访问数据库,但检测到任何更改,在这种情况下,整个备份将自动重新启动。
在线备份页面实际上是最好的资源,因为.backup使用在线备份 API。您可以检查shell 的源代码本身:
pBackup = sqlite3_backup_init(pDest, "main", p->db, zDb);
if( pBackup==0 ){
utf8_printf(stderr, "Error: %s\n", sqlite3_errmsg(pDest));
sqlite3_close(pDest);
return 1;
}
while( (rc = sqlite3_backup_step(pBackup,100))==SQLITE_OK ){}
sqlite3_backup_finish(pBackup);
Run Code Online (Sandbox Code Playgroud)
正如文档所说:
源数据库不需要在复制期间锁定,只需在实际读取数据的短暂时间内锁定。
并且,来自sqlite3_backup_step
每次调用 sqlite3_backup_step() 都会获得源数据库上的共享锁,该锁在 sqlite3_backup_step() 调用期间持续有效。
shell 中的调用sqlite3_backup_step(pBackup,100)一次最多读取 100 页。
CLI (shell)文档解释.dump说它实际上是一个用于重新创建原始数据库的 SQL 脚本。
| 归档时间: |
|
| 查看次数: |
4385 次 |
| 最近记录: |