在線備份要求資料庫處於 **可恢復 (Recoverable)** 狀態,即啟用 LOGRETAIN 或 USEREXIT (归档日誌)。否則僅能離線備份。
db2 update db cfg for TestDB using LOGRETAIN ON
-- 必須執行一次離線完全備份使配置生效並脫離「備份暫掛」狀態
db2 backup db TestDB to D:\DB2_Train
db2 connect to TestDB
db2 "insert into T1 values (2, '在線備份測試')"
db2 "select * from T1"
db2 backup db TestDB online to D:\DB2_Train
備份期間資料庫**完全可讀寫**,備份映像包含開始時刻的一致性快照 + 備份期間產生的活動日誌範圍。
聯機備份**不包含**完整日誌檔案。必須單獨備份 LOGARCHMETH1 指定路徑下的日誌檔,或設定 INCLUDE LOGS (DB2 10.1+,將所需日誌直接打包進備份映像)。
-- 查詢日誌路徑
db2 get db cfg for TestDB | findstr LOGPATH
-- 手動複製該路徑下所有 .log 檔案至備份目錄 D:\DB2_Train\SQLOGDIR\
db2 drop db TestDB
db2 restore db TestDB from D:\DB2_Train taken at 20240115150000
db2 connect to TestDB
-- SQL1117N: 數據庫處於 ROLL-FORWARD PENDING 狀態,無法連接。
**原因**:聯機備份還原後,資料庫處於不一致狀態,**必須前滾日誌**至一致性點才能使用。
-- 方式 1: 前滾至日誌末尾並完成 (停止前滾)
db2 "rollforward db TestDB to end of logs and complete
overflow log path ('D:\DB2_Train\SQLOGDIR')"
-- 方式 2: 前滾至特定時間點 (PITR)
db2 "rollforward db TestDB to 2024-01-15-15.30.00 and complete
overflow log path ('D:\DB2_Train\SQLOGDIR')"
關鍵參數:
TO END OF LOGS:應用所有可用日誌。AND COMPLETE:結束前滾狀態,資料庫可用。OVERFLOW LOG PATH:指定**備份日誌檔案所在路徑** (此處為手動複製的 SQLOGDIR),前滾過程會從此讀取日誌。
db2 connect to TestDB
db2 "select * from T1"
-- 應包含: (1, '離線備份測試'), (2, '在線備份測試')
| 維度 | 離線備份 | 在線備份 |
|---|---|---|
| 資料庫狀態 | 離線 (無連線) | 在線 (可讀寫) |
| 日誌需求 | 無 (循環日誌即可) | **必須啟用 LOGRETAIN/USEREXIT** |
| 還原後狀態 | 立即可用 | **ROLL-FORWARD PENDING,需前滾** |
| 備份內容 | 資料頁面 + 配置 | 資料頁面 + 配置 + 備份期間日誌範圍 |
| 日誌管理 | 無需額外備份日誌 | **必須單獨備份/包含日誌 (INCLUDE LOGS)** |
| RPO (資料損失容忍) | 備份點後所有資料 | **可達零資料損失 (配合前滾至日誌末尾)** |
LOGARCHMETH1 = DISK:/db2archive 自動归档日誌,配合 BACKUP DB ... INCLUDE LOGS 簡化操作。db2pd -db TestDB -backup / LIST HISTORY BACKUP ALL FOR TestDB。ROLLFORWARD TO AND COMPLETE 。