SQLite 資料庫備份常被誤以為單純複製檔案,但若在寫入過程中複製會導致資料損毀。FireDAC TFDSQLiteBackup 元件封裝 SQLite Online Backup API,支援線上熱備份、進度回調、目標為檔案或記憶體,幾行代碼即可實現企業級備份策略。本文並補充交易控制與效能優化要點。
procedure TForm1.btnBackupClick(Sender: TObject);
var
DestConn: TFDConnection;
begin
{ 1. 準備目標連接(檔案或記憶體) }
DestConn := TFDConnection.Create(nil);
try
DestConn.DriverName := 'SQLite';
DestConn.Params.Add('Database=C:\Backup\MyDB_Backup.sdb'); // 目標檔案
// DestConn.Params.Add('Database=:memory:'); // 或備份到記憶體
DestConn.Open;
{ 2. 配置備份元件 }
FDSQLiteBackup1.DriverLink := FDPhysSQLiteDriverLink1; // 來源驅動連結
FDSQLiteBackup1.Database := 'C:\Data\MyDB.sdb'; // 來源檔案路徑
FDSQLiteBackup1.DestDatabaseObj := DestConn.CliObj; // 目標連接介面
// FDSQLiteBackup1.OnProgress := BackupProgress; // 可選進度回調
{ 3. 執行備份(同步阻塞直到完成) }
FDSQLiteBackup1.Backup;
ShowMessage('備份完成!');
finally
DestConn.Free;
end;
end;
| 屬性/事件 | 說明 |
|---|---|
PageCount | 每步複製頁數(預設 -1 全部),大資料庫可分步避免長時間鎖定。 |
OnProgress(ASender; APage, ATotal: Integer) | 進度回調,可更新 UI 進度條。 |
Backup | 同步執行;若需異步,可放入 TTask.Run 執行緒。 |
// 1. 明確交易邊界
FDConnection1.StartTransaction;
try
FDConnection1.ExecSQL('INSERT ...');
FDConnection1.ExecSQL('UPDATE ...');
FDConnection1.Commit;
except
FDConnection1.Rollback;
raise;
end;
// 2. 巢狀交易支援(Savepoint)
FDConnection1.StartTransaction;
try
FDConnection1.ExecSQL('SAVEPOINT sp1');
try
// 子操作
except
FDConnection1.ExecSQL('ROLLBACK TO sp1');
end;
FDConnection1.Commit;
except FDConnection1.Rollback; raise; end;
FDConnection1.Params.Values['JournalMode'] := 'WAL'; // 讀寫不阻塞,極大提升並發
FDConnection1.Params.Values['Synchronous'] := 'NORMAL'; // FULL 最安全但慢,NORMAL 平衡,OFF 最快但斷電風險
FDConnection1.Params.Values['CacheSize'] := '-32768'; // 32MB 快取(負數 = KB),大幅減少磁碟 IO
FDConnection1.Params.Values['PageSize'] := '4096'; // 4KB 頁大小(預設),匹配檔案系統簇大小
FDConnection1.Params.Values['LockingMode'] := 'NORMAL'; // EXCLUSIVE 獨占寫入快但阻塞讀取
FDConnection1.Params.Values['TempStore'] := 'MEMORY'; // 臨時表/索引存記憶體
TFDSQLiteBackup.Backup 到備份目錄,保留 7~30 代。PRAGMA integrity_check 確保可用性。TFDSQLiteBackup + WAL 模式 + 合理交易粒度 + 快取調優,構成 SQLite 生產環境可靠性與效能的四大支柱。備份不再是「複製檔案」,而是有保證的一致性快照操作。