sqlite:在线备份与原始备份不同

时间:2014-06-12 14:27:55

标签: sqlite

我使用here中的示例2代码对(空闲)数据库进行在线备份。备份文件与原始文件不同(长度相同,但它以3个字节不同),尽管两个数据库中的.dump是相同的。在不同时间拍摄的备份文件彼此相同。

这并不是很好,因为我想要一个简单的保证,即备份与原始备份相同,并且我想在实际数据库和备份上记录校验和以简化恢复。我是否可以解决这个问题,或者我是否可以使用备份API生成相同比较的文件?

2 个答案:

答案 0 :(得分:2)

在线备份可以写入现有数据库,因此这种写入是在事务中完成的。 在这样的事务结束时,文件更改计数器(偏移24-27)被更改为允许其他进程检测数据库已被修改,并且这些进程中的任何高速缓存都是无效的。 此更改计数器不使用原始数据库中的值,因为它可能与目标数据库的旧值相同。

如果新创建目标数据库,则更改计数器从零开始。 这可能是对原始数据库的改变,但至少它是一致的。

偏移量28处的字节减少了,因为数据库有一些未使用的页面。 偏移44处的字节已更改,因为数据库实际上并未使用新的架构功能。 您可以通过在备份之前执行VACUUM来避免这些更改,但这对更改计数器没有帮助。

答案 1 :(得分:0)

我不希望它们是相同的,只是因为备份API确保任何备份都是自洽的(即正在进行的事务被忽略)。