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命令打開檔案資料庫,發現資料庫被清空。如果是程式崩潰,重啟后豈不是資料丟失了。如何解決這個問題?
uj5u.com熱心網友回復:
正在備份的時候崩潰,沒有備份結束,當然會出問題你應該先把上次的備份改個bak這樣的名字,然后再開始備份
萬一備份失敗,可以把上一次的bak恢復回來使用
uj5u.com熱心網友回復:
嗯,我程式是有這個備份的,記憶體資料庫<----->磁盤資料庫<------->磁盤備份資料庫。我不太明白的是這個journal檔案產生后,再打開我的磁盤資料庫,磁盤資料庫直接被清空了。是不是記憶體資料庫被釋放了,無法恢復,只好清空?
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/112387.html
標籤:其他數據庫
