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命令打开文件数据库,发现数据库被清空。如果是程序崩溃,重启后岂不是数据丢失了。如何解决这个问题?
...全文
393 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_30705923 2017-09-08
  • 打赏
  • 举报
回复
引用 1 楼 ckc 的回复:
正在备份的时候崩溃,没有备份结束,当然会出问题 你应该先把上次的备份改个bak这样的名字,然后再开始备份 万一备份失败,可以把上一次的bak恢复回来使用
嗯,我程序是有这个备份的,内存数据库<----->磁盘数据库<------->磁盘备份数据库。我不太明白的是这个journal文件产生后,再打开我的磁盘数据库,磁盘数据库直接被清空了。是不是内存数据库被释放了,无法恢复,只好清空?
ckc 2017-09-08
  • 打赏
  • 举报
回复
正在备份的时候崩溃,没有备份结束,当然会出问题 你应该先把上次的备份改个bak这样的名字,然后再开始备份 万一备份失败,可以把上一次的bak恢复回来使用

2,209

社区成员

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

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