sqlite在线备份API产生journal文件后,数据库文件再次打开,发现被清空

qq_30705923 2017-09-07 04:20:39

rc = sqlite3_open(dbfile, &pFile);
if ( rc == SQLITE_OK)
{
pBackup = sqlite3_backup_init(pFile, "main", db, "main");
if (pBackup)
{
do{
rc = sqlite3_backup_step(pBakcup, -1);
}while(rc == SQLITE_OK || rc == SQLITE_BUSY || SQLITE_LOCKED);
sqlite3_backup_finish(pBakcup);
}
rc = sqlite3_errcode(pFile);
}
sqlite3_close(pFile);


我使用的是串行模式,代码将内存数据库db备份至文件数据库dbfile,每5秒调用一次。数据库没有其他操作影响,我发现在这个过程中会产生journal文件,手动杀死进程,有时有journal留在磁盘上,然后用sqlite3命令打开文件数据库,发现数据库被清空。如果是程序崩溃,重启后岂不是数据丢失了。如何解决这个问题?
...全文
392 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_30705923 2017-09-08
  • 打赏
  • 举报
回复
引用 1 楼 ckc 的回复:
正在备份的时候崩溃,没有备份结束,当然会出问题 你应该先把上次的备份改个bak这样的名字,然后再开始备份 万一备份失败,可以把上一次的bak恢复回来使用
嗯,我程序是有这个备份的,内存数据库<----->磁盘数据库<------->磁盘备份数据库。我不太明白的是这个journal文件产生后,再打开我的磁盘数据库,磁盘数据库直接被清空了。是不是内存数据库被释放了,无法恢复,只好清空?
ckc 2017-09-08
  • 打赏
  • 举报
回复
正在备份的时候崩溃,没有备份结束,当然会出问题 你应该先把上次的备份改个bak这样的名字,然后再开始备份 万一备份失败,可以把上一次的bak恢复回来使用
企业智慧中台规划与建设总体方案是一个针对企业数字化转型需求而设计的综合性IT解决方案。该方案旨在构建一个集中、高效和灵活的中台架构,通过整合企业内外部的数据资源、业务流程和应用服务,为企业提供一个统一的数字化运营平台。在当前的商业环境下,企业面临着激烈的市场竞争和不断变化的客户需求。为了应对这些挑战,企业需要快速响应市场变化,提高运营效率,降低成本,并实现持续创新。因此,企业智慧中台的规划和建设成为了关键任务。该方案的核心思想是将企业的业务逻辑、数据管理和技术创新紧密结合起来,形成一个高度集成的智慧中台系统。通过构建标准化的数据模型和接口,实现数据的一致性和可访问性,同时提供丰富的数据分析和挖掘工具,帮助企业发现潜在的商业价值和机会。此外,该方案还注重用户体验和业务敏捷性。通过构建灵活的应用开发框架和API接口,支持快速的业务迭代和定制化需求,满足不同部门和角色的个性化需求。同时,通过智能化的自动化流程和决策支持系统,提高企业的决策效率和准确性。总之,企业智慧中台规划与建设总体方案是一个全面而深入的IT解决方案,旨在帮助企业实现数字化转型,提升竞争力和创新能力。通过构建集中、高效和灵活

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧