若備份或恢復需耗費數小時,即便方案極安全也失去實用價值。DB2 獨特的三級邏輯存儲結構——資料庫 → 表空間 → 資料表,天然支援分級備份恢復,是實現高效能數據保護的關鍵。本文深度解析分級備份原理、實戰策略、效能調優參數、大對象 (LOB) 處理、異機恢復流程與自動化框架。
| 層級 | 對應物件 | 備份命令 | 恢復命令 | 適用場景 | 效能特徵 |
|---|---|---|---|---|---|
| 資料庫級 | 整個資料庫 (含系統/用戶表空間) | BACKUP DATABASE | RESTORE DATABASE | 整庫遷移、災難恢復、基準點建立 | 最慢、最完整、資源消耗最大 |
| 表空間級 | 一或多個表空間 (如 TS_DATA, TS_INDEX) | BACKUP DATABASE ... TABLESPACE | RESTORE DATABASE ... TABLESPACE | 核心業務表空間高頻備份、大表空間分批 | 快 5-20 倍、可並行、不影響其他表空間 |
| 資料表級 | 單一或少數資料表 | EXPORT / LOAD / INGEST | IMPORT / LOAD / INGEST | 參考表更新、單表損壞修復、資料修正 | 最快、最精準、近零業務影響 |
類比:資料庫 = 學校,表空間 = 年級,資料表 = 學生。校長 (DBA) 可按學校/年級/學生三個層級管理,精準施策。
| 層級 | 頻率 | 時間窗口 | 類型 | 保留 | 目的 |
|---|---|---|---|---|---|
| 資料庫完整備份 | 每週日 01:00 | 4 小時 | 離線/線上 | 4 週 | 基準恢復點、異機建庫 |
| 資料庫增量備份 | 每日 01:00 (除週日) | 1 小時 | 線上增量 | 2 週 | 減少恢復時需應用的日誌量 |
| 核心表空間 (TS_CORE) 完整 | 每日 02:00 | 30 分鐘 | 線上 | 7 天 | 核心交易表空間快速恢復 |
| 核心表空間增量 | 每 4 小時 | 10 分鐘 | 線上增量 | 3 天 | RPO < 4 小時 |
| 歷史/歸檔表空間 (TS_HIST) | 每月 1 號 03:00 | 2 小時 | 線上 | 1 年 | 低頻變更資料,降低備份頻率 |
| 關鍵參考表 (單表) | 每日 04:00 | 5 分鐘 | EXPORT/INGEST | 30 天 | 單表級快速修復、資料對帳 |
# 表空間線上備份 (核心範例)
db2 "backup database MYDB tablespace (TS_CORE, TS_INDEX)
online
to /backup/db2/MYDB
compress
include logs
parallelism 4
buffer 1024
buffers 4
util_impact_priority 50"
# 參數解析:
# ONLINE: 允許並發讀寫
# COMPRESS: 壓縮備份集 (CPU 換 I/O,通常快 30-50%)
# INCLUDE LOGS: 確保備份自包含,無需外部日誌即可恢復
# PARALLELISM: 並行度 (建議 = CPU 核心數 / 2 或磁碟通道數)
# BUFFER: 緩衝區大小 (4K 頁面數,1024 = 4MB)
# BUFFERS: 緩衝區數量 (建議 = PARALLELISM)
# UTIL_IMPACT_PRIORITY: 節流控制 (0-100,50 表中等優先級)
# 表空間恢復 (並行)
db2 "restore database MYDB tablespace (TS_CORE, TS_INDEX)
from /backup/db2/MYDB
taken at 20240115010000
into MYDB
newlogpath /db2log/MYDB
parallelism 8
buffer 1024
buffers 8
without prompting"
# 關鍵: 容器分佈於不同物理磁碟/RAID 組,實現真正並行 I/O
# 1. 產生重導向腳本
db2 "restore database MYDB from /backup taken at 20240115010000
redirect generate script /tmp/restore_redirect.sql"
# 2. 編輯腳本:修改容器路徑、表空間名稱、容器大小
# SET TABLESPACE CONTAINERS FOR 5 USING (FILE '/new/path/ts_data' 100000)
# 3. 執行重導向恢復
db2 "restore database MYDB from /backup taken at 20240115010000
redirect generate script /tmp/restore_redirect.sql"
# ... 執行腳本中的 SET CONTAINERS 命令 ...
db2 "restore database MYDB continue"
# 4. 前滾恢復 (若為可恢復模式)
db2 "rollforward database MYDB to end of logs and complete"
# INGEST: 高效能、支援 MERGE/UPDATE/DELETE、可恢復、線上
db2 "ingest from /backup/exports/cust_table.del
format del
insert into APP_SCHEMA.CUST_TABLE"
# LOAD: 最高效能、不可恢復 (需後續備份)、鎖表
db2 "load from /backup/exports/cust_table.del
of del
replace into APP_SCHEMA.CUST_TABLE
copy yes to /backup/load_copy
nonrecoverable # 或 COPY YES 配合歸檔日誌
# 選擇指南:
# - 可恢復環境、需點恢復、並發業務 → INGEST
# - 初始載入、大量歷史資料、可接受鎖表、事後全備 → LOAD
# - 小批量、邏輯複雜、需觸發器/約束 → IMPORT
# 備份含 LOB 表空間
db2 "backup database MYDB tablespace (TS_LOB_DATA) online to /backup compress include logs"
# 恢復 LOB 表空間 (需確保 LOB 路徑一致或重導向)
db2 "restore database MYDB tablespace (TS_LOB_DATA) from /backup taken at ... into MYDB"
# LOB 獨立管理策略:
# 1. LOB 置於專用表空間 (TS_LOB_DATA),獨立備份排程
# 2. 啟用 LOB 壓縮 (COMPRESS YES) 節省 60-80% 空間
# 3. 考慮將極大 LOB (視頻/影像) 移至檔案系統/物件存儲,資料庫僅存 URI
| 參數 | 建議範圍 | 調優方向 | 監控指標 |
|---|---|---|---|
| PARALLELISM | 2-16 (CPU 核心數/2) | 增加並行度直到 I/O 飽和 | iostat %util, iowait |
| BUFFER (4K 頁) | 512-4096 (2MB-16MB) | 增大減少系統呼叫開銷 | 備份吞吐量 MB/s |
| BUFFERS | = PARALLELISM | 每並行進程一組緩衝 | 記憶體使用 |
| UTIL_HEAP_SZ | 5000-50000 (4K 頁) | 支援並行備份/恢復/重組的共享堆 | db2pd -db -mempools |
| COMPRESS | YES (預設) | CPU 密集型改為 I/O 密集型 | CPU 使用率 vs 備份時間 |
| ENCRYPT | AES256 (合規要求) | 硬體加速卡卸載 CPU | 備份時間增長 % |
#!/bin/ksh
# auto_backup.ksh - 每日自動備份主程式
DB=MYDB
TS_LIST="TS_CORE TS_INDEX TS_LOB_DATA"
BKUP_DIR="/backup/db2/${DB}"
LOG_FILE="/home/db2inst1/logs/auto_backup_$(date +%Y%m%d).log"
# 1. 完整備份 (週日)
if [[ $(date +%u) -eq 7 ]]; then
db2 "backup database ${DB} online to ${BKUP_DIR} compress include logs parallelism 4" >> ${LOG_FILE} 2>&1
else
# 2. 增量備份 (平日)
db2 "backup database ${DB} online incremental to ${BKUP_DIR} compress include logs parallelism 2" >> ${LOG_FILE} 2>&1
fi
# 3. 表空間級高頻備份 (每 4 小時由排程器觸發此腳本參數)
if [[ $1 == "tablespace" ]]; then
db2 "backup database ${DB} tablespace (${TS_LIST}) online to ${BKUP_DIR} compress include logs parallelism 4" >> ${LOG_FILE} 2>&1
fi
# 4. 清理過期備份 (保留策略)
find ${BKUP_DIR} -name "*.001" -mtime +30 -delete
find ${BKUP_DIR} -name "*.log" -mtime +7 -delete
# 5. 驗證備份完整性 (抽樣)
db2ckbkp -h ${BKUP_DIR}/${DB}.0.db2inst1.NODE0000.CATN0000.$(date +%Y%m%d)*.001 >> ${LOG_FILE} 2>&1
echo "$(date) Backup completed for ${DB}" >> ${LOG_FILE}
DB2 備份恢復效能優化的核心在於:善用三級結構分級備份、線上備份並行化參數調優、重導向恢復標準化、單表級快速修復選項 (INGEST/LOAD)、自動化框架固化最佳實踐。建議建立 備份效能基線庫 (不同粒度、參數組合的耗時/吞吐量),每季度壓力測試驗證 RTO/RPO 達標,將備份恢復從「事後保險」轉型為「業務連續性核心能力」。