備份效能三大支柱
RMAN 備份本質是磁碟讀取 → 記憶體處理 → 磁碟/磁帶寫入的流水線。調優核心在於消除三個階段的瓶頸:
| 階段 | 瓶頸表現 | 調優方向 |
| 讀取 (Source) | 資料檔讀取慢、單通道串行 | 多通道並行、BCT、磁碟條帶化 |
| 處理 (Memory) | 緩衝區不足、壓縮 CPU 競爭 | LARGE_POOL、壓縮算法、BACKUP_TAPE_IO_SLAVES |
| 寫入 (Target) | 備份目標 IOPS 不足、磁帶流速慢 | 多通道、ASM/檔案系統條帶、磁帶多驅動器 |
I/O 模式優化:同步 vs 非同步
-- 檢查作業系統非同步 I/O 支援
-- Linux: cat /proc/sys/fs/aio-max-nr
-- Windows: 預設支援
-- 關鍵參數 (需實例重啟)
ALTER SYSTEM SET DISK_ASYNCH_IO = TRUE SCOPE=SPFILE; -- 資料檔非同步讀寫
ALTER SYSTEM SET TAPE_ASYNCH_IO = TRUE SCOPE=SPFILE; -- 磁帶非同步
ALTER SYSTEM SET BACKUP_TAPE_IO_SLAVES = TRUE SCOPE=SPFILE; -- 磁帶寫入從進程
通道與並行度配置
| 參數/設定 | 建議值 | 原理 |
| 通道數 | CPU 核心數 × 0.5 ~ 1 | 平衡並行度與 CPU 爭用 |
| FILESPERSET | 4 ~ 8 | 每備份集包含檔案數,影響並行粒度 |
| MAXPIECESIZE | 4G / 8G / UNLIMITED | 避免單檔過大超過檔案系統/磁帶限制 |
| RATE | KB/秒限制 | 限制單通道頻寬,保護生產 IO |
實戰通道配置範例
RUN {
# 8 核心伺服器:配置 4-6 條通道
ALLOCATE CHANNEL c1 DEVICE TYPE DISK
FORMAT '/backup/rman/%d_L0_%U'
MAXPIECESIZE 4G RATE 50M;
ALLOCATE CHANNEL c2 DEVICE TYPE DISK
FORMAT '/backup/rman/%d_L0_%U'
MAXPIECESIZE 4G RATE 50M;
ALLOCATE CHANNEL c3 DEVICE TYPE DISK
FORMAT '/backup/rman/%d_L0_%U'
MAXPIECESIZE 4G RATE 50M;
ALLOCATE CHANNEL c4 DEVICE TYPE DISK
FORMAT '/backup/rman/%d_L0_%U'
MAXPIECESIZE 4G RATE 50M;
BACKUP INCREMENTAL LEVEL 0 DATABASE PLUS ARCHIVELOG;
RELEASE CHANNEL c1; RELEASE CHANNEL c2;
RELEASE CHANNEL c3; RELEASE CHANNEL c4;
}
記憶體緩衝區調優
| 參數 | 作用 | 建議 |
| LARGE_POOL_SIZE | RMAN 共用緩衝區 (非共用池) | 至少 64MB,大型備份建議 256MB-1GB |
| DB_FILE_DIRECT_IO_COUNT | 直接 I/O 讀取區塊數 | 128 (1MB) ~ 256 (2MB),視檔案系統 |
| BACKUP_TAPE_IO_SLAVES | 磁帶寫入從進程緩衝 | TRUE (磁帶備份時) |
| _BACKUP_KSFQ_BUFsz | 隱含參數:備份緩衝區大小 | 通常無需調整,極大備份可諮詢支援 |
LARGE_POOL 設定範例
-- 確保 LARGE_POOL 獨立於 SHARED_POOL
ALTER SYSTEM SET LARGE_POOL_SIZE = 512M SCOPE=BOTH;
-- 驗證
SELECT name, bytes/1024/1024 MB FROM v$sgastat WHERE pool = 'large pool';
區塊變更追蹤 (BCT) - 增量備份加速神器
-- 啟用 BCT (需 Enterprise Edition)
ALTER DATABASE ENABLE BLOCK CHANGE TRACKING
USING FILE '/u01/bct/prod_bct.f' REUSE;
-- 驗證
SELECT filename, status, bytes/1024/1024 MB
FROM v$block_change_tracking;
-- 效果:增量備份無需全表掃描,直接讀取位圖識別變更區塊
-- 典型加速:10x - 100x (視變更率)
壓縮算法選擇策略
| 算法 | CPU 開銷 | 壓縮率 | 適用場景 |
| BASIC (預設) | 低 | ~2-3x | 通用、CPU 敏感 |
| LOW (11g+) | 極低 (LZO) | ~1.5-2x | 高頻備份、CPU 受限 |
| MEDIUM (11g+) | 中 (ZLIB) | ~3-5x | 平衡、儲存成本敏感 |
| HIGH (11g+) | 高 (BZIP2) | ~5-10x | 歸檔備份、網路傳輸、離線存儲 |
-- 設定預設壓縮
CONFIGURE COMPRESSION ALGORITHM 'MEDIUM';
-- 或單次備份指定
BACKUP AS COMPRESSED BACKUPSET DATABASE;
磁帶備份專項優化
- 多驅動器並行:每驅動器配置 1-2 條通道
- 流速匹配:RATE 參數限制寫入速度 ≤ 驅動器最大流速 × 0.8
- 多工 (Multiplexing):`FILESPERSET` 控制多資料檔交織寫入,避免磁帶空轉
- 標籤管理:條碼標籤 + RMAN `CHANGE ... TAG` 管理生命週期
RMAN 目錄資料庫備份:守護元數據心臟
-- 每次目標資料庫備份後執行
# expdp_rcat.sh
expdp rman/rman_pass@RCAT_DB \
SCHEMAS=RMAN \
DIRECTORY=DPUMP_DIR \
DUMPFILE=rman_cat_%Y%m%d_%H%M.dmp \
LOGFILE=rman_cat_exp.log \
COMPRESSION=ALL \
REUSE_DUMPFILES=Y
原則:目錄資料庫雖小但單點故障風險極高,必須異地備份、定期恢復驗證。
效能監控關鍵視圖
-- 即時備份進度與速率
SELECT
sid, serial#,
sofar, totalwork,
round(sofar/totalwork*100,1) pct_done,
time_remaining,
message
FROM v$session_longops
WHERE opname LIKE 'RMAN%' AND totalwork > 0;
-- 備份集寫入速率歷史
SELECT
bs_key,
device_type,
compression_ratio,
input_bytes/1024/1024 input_mb,
output_bytes/1024/1024 output_mb,
elapsed_seconds,
output_bytes/1024/1024/elapsed_seconds mb_per_sec
FROM v$backup_set
WHERE completion_time > SYSDATE-7
ORDER BY completion_time DESC;
常見效能問題診斷清單
| 現象 | 可能原因 | 排查步驟 |
| 備份極慢 (< 10MB/s) | 單通道、無 BCT、磁碟 IO 瓶頸 | 增加通道、啟用 BCT、檢查磁碟負載 |
| CPU 100% 長時間 | 壓縮算法過重、通道過多 | 降級壓縮、減少通道 |
| RMAN-06059 歸檔找不到 | 歸檔被手動刪/移動 | CROSSCHECK ARCHIVELOG; 從備份恢復 |
| ORA-19504 建立檔案失敗 | 空間不足/MAXPIECESIZE/權限 | 清理空間、調大 MAXPIECESIZE、檢查權限 |
| 備份驗證失敗 | 媒體損壞/檔案系統錯誤 | VALIDATE BACKUPSET; 檢查硬體/檔案系統 |
總結
RMAN 效能調優是系統工程,而非單一參數調整。核心遵循:
- 啟用 BCT (增量備份前提)
- 適度並行 (通道數匹配 CPU/IO)
- 非同步 I/O (OS/參數雙重保障)
- 智慧壓縮 (算法匹配 CPU/儲存成本)
- 緩衝區專用 (LARGE_POOL 隔離)
- 持續監控 (v$session_longops + 歷史趨勢)
- 目錄自備份 (元數據同等重要)
建立基準線、定期壓力測試、異常即時告警,讓備份效能可見、可控、可預測。