Oracle Data Guard 災難恢復與高可用架構完整指南
Data Guard 是 Oracle 原生高可用/災備方案,提供 Physical Standby (物理備援) 與 Logical Standby (邏輯備援) 兩種架構,支援 Maximum Protection / Availability / Performance 三種保護模式。本文系統整理架構差異、同步機制、角色切換 (Switchover/Failover)、客戶端自動轉向與監控指標。
兩種 Standby 架構對比
| 特性 | Physical Standby | Logical Standby |
| 同步來源 | Primary Redo Log (Archived/Standby Redo) | SQL Apply (從 Redo 轉換的 SQL) |
| 結構一致性 | Physical + Logical 完全一致 (Block-level) | 僅 Logical 一致 (Table-level) |
| 開啟模式 | Mount (Apply) / Read Only (Active Data Guard) | Open Read/Write (可建立索引/物化視圖) |
| 適用場景 | 災備、報表卸載 (Active DG)、零資料遺失 | 報表查詢、異構平台、部分物件複製 |
| 效能影響 | Primary 極低 (僅傳輸 Redo) | Primary 較高 (SQL 轉換、Apply 處理) |
| 不支援物件 | 極少 (Global Temp Table 等) | 較多 (Unsupported Datatypes, DDL 限制) |
三大保護模式
| 模式 | 同步機制 | 資料遺失風險 | Primary 可用性影響 | 適用場景 |
| Maximum Protection | SYNC + AFFIRM (雙寫確認) | 零 (RPO=0) | Standby/Network 故障 → Primary Shutdown | 核心金融、零容忍遺失 |
| Maximum Availability | SYNC + AFFIRM (正常) / ASYNC (異常降級) | 極低 (正常同步) | Standby/Network 故障 → Primary 繼續 (降級) | 高可用 + 資料保護平衡 |
| Maximum Performance | ASYNC (非同步傳輸) | 可能遺失 (RPO > 0) | 無影響 (最佳效能) | 跨地域、網路不穩、效能優先 |
角色切換操作
-- 1. Switchover (計劃性角色互換,雙方正常)
-- Primary 執行
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
-- Standby 執行
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
-- 2. Failover (非計劃性,Primary 故障)
-- Standby 執行 (Physical)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
-- Standby 執行 (Logical)
ALTER DATABASE ACTIVATE LOGICAL STANDBY DATABASE FINISH APPLY;
客戶端自動轉向 (Fast-Start Failover / FAN)
- JDBC Thin 驅動支援
ONS (Oracle Notification Service) 訂閱 FAN 事件
- 連接字串配置:
(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=ON)(FAILOVER=ON)(ADDRESS=(PROTOCOL=TCP)(HOST=PRIMARY)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=STANDBY)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=MY_SVC)))
- 應用層無感知自動重連新 Primary
關鍵監控指標
-- Primary 端:傳輸延遲
SELECT DEST_ID, STATUS, GAP_STATUS, APPLY_LAG, TRANSPORT_LAG
FROM V$ARCHIVE_DEST_STATUS WHERE TARGET='STANDBY';
-- Standby 端:應用延遲
SELECT NAME, VALUE, DATUM_TIME, TIME_COMPUTED
FROM V$DATAGUARD_STATS WHERE NAME LIKE '%lag%';
-- 缺口偵測
SELECT * FROM V$ARCHIVE_GAP;
-- Active Data Guard 即時查詢
SELECT OPEN_MODE, DATABASE_ROLE FROM V$DATABASE;
-- Physical Standby + READ ONLY = Active Data Guard 啟用
部署最佳實踐
- Standby Redo Log (SRL):強制配置,大小 = Online Redo Log,組數 = Online Redo 組數 + 1
LOG_ARCHIVE_DEST_2 參數:SERVICE=STANDBY SYNC AFFIRM NET_TIMEOUT=30 VALID_FOR=(ONLINE_LOGFILE,PRIMARY_ROLE) DB_UNIQUE_NAME=STANDBY
- Flashback Database:雙方啟用,Failover 後原 Primary 可快速轉為 Standby (Reinstate)
- 定期 Switchover 演練:每季驗證切換流程、應用轉向、資料一致性
- Data Guard Broker:使用
DGMGRL 統一管理、自動化 Failover、集中監控
版本演進
- 11g:Active Data Guard (Physical Standby Read Only + Apply)
- 12c:Far Sync Instance (零資料遺失跨地域)、多租戶 (CDB/PDB) 支援
- 18c/19c:Automatic Failover 增強、Rolling Upgrade 支援