锁定sqlite3 db以进行文件下载

Gab*_*ber 6 c c++ database sqlite locking

我在一些系统上有一个sqlite3数据库,我需要在正在进行的操作中下载.停止或暂停访问进程不是一种选择.因此,据我所知,我需要在下载期间将数据库中的SHARED锁(如http://www.sqlite.org/lockingv3.html中所述)保存到数据库,以避免数据库更改和下载过程中的损坏.我如何明确获得这样的锁定?下载是从C++程序控制的,所以我需要锁定它.

编辑:thkala建议进行数据库转储.但我更愿意找到一个带锁定的解决方案,因为我不确定是否有足够的内存可用于db的完整副本.

thk*_*ala 8

不,不.不,不!

搞乱锁和手工复制文件是做旧事情的老方法.SQLite现在有一个适当的备份API,你可以使用.这是执行SQLite数据库的在线副本的推荐方法 - 您可以使用它来创建数据库的副本,然后可以在方便时下载.

编辑:

如果你绝对必须使用锁定,你可以使用这里概述的方法- 可能在翻译成C之后:

  • 打开数据库

  • 使用该BEGIN IMMEDIATE语句获取共享锁.

  • 手动复制/下载文件 - 确保您不会错过任何文件.至少有DB文件,日志文件和可能的WAL文件.您可能希望将DB放在单独的目录中以简化操作.

  • ROLLBACK 你刚刚开始的交易.

我理解这种方法在某些情况下如何有用,但我必须重申,这不再是推荐的方法.