首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi FireDAC SQLite 備份、優化與交易控制(七):TFDSQLiteBackup 一鍵備份、同步/異步模式、鎖定策略

     編輯:Delphi

前言

SQLite 資料庫備份常被誤以為單純複製檔案,但若在寫入過程中複製會導致資料損毀。FireDAC TFDSQLiteBackup 元件封裝 SQLite Online Backup API,支援線上熱備份、進度回調、目標為檔案或記憶體,幾行代碼即可實現企業級備份策略。本文並補充交易控制與效能優化要點。

一、TFDSQLiteBackup 核心用法

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';       // 臨時表/索引存記憶體

五、備份策略建議

  1. 定時熱備份: 每日/每小時呼 TFDSQLiteBackup.Backup 到備份目錄,保留 7~30 代。
  2. 異地同步: 備份檔上傳至雲端/NAS。
  3. 驗證機制: 定期開啟備份檔執行 PRAGMA integrity_check 確保可用性。
  4. 避免檔案複製: 絕不在應用運行時直接 Copy 檔案,必須使用 Online Backup API。

結語

TFDSQLiteBackup + WAL 模式 + 合理交易粒度 + 快取調優,構成 SQLite 生產環境可靠性與效能的四大支柱。備份不再是「複製檔案」,而是有保證的一致性快照操作。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved