相較於 Oracle 8i 與 9i 版本,Oracle 11g 在資料庫備份與高可用性架構(MAA)方面實現了質的飛躍。作為真正應用叢集(RAC)特性的核心組件,Oracle 11g 透過恢復管理器(RMAN)的 DUPLICATE DATABASE 命令,支援直接從主資料庫透過網路克隆備用資料庫,只要目標資料庫處於活動狀態即可。這項「即時克隆」特性徹底消除了傳統流程中必須先生成備份集、再傳輸、最後在備用端手動還原恢復的繁瑣步驟。RMAN 會在主站點自動於記憶體中生成轉換腳本,然後在備用站點執行克隆操作,全程無需 DBA 人工干預,大幅降低了部署複雜度與人為錯誤風險。
本文實作環境採用虛擬化架構:雙核 AMD Athlon 64 位元 CPU、4GB 記憶體、宿主機運行 Windows XP,透過 VMware Server 1.0.8 建立兩台虛擬機,各分配 1 個 vCPU 與 1200MB 記憶體,客戶端作業系統為 Oracle Enterprise Linux (OEL) 4.5.1(核心 2.6.9-55.ELsmp)。兩節點分別命名為 training(主庫)與 11gStdby(備庫),經 /etc/hosts 設定互通後,各自安裝 Oracle 11g R1 並建立標準種子資料庫(SID: orcl)。
為確保零資料遺失,必須先啟用 FORCE LOGGING,再切換至 ARCHIVELOG 模式。預設的 NOFORCE LOGGING 允許 NOLOGGING 操作導致變更未記錄,違背 Data Guard 保護承諾。
ALTER SYSTEM SET log_archive_format = 'log_%s_%t_%r.arc' SCOPE=SPFILE;
ALTER SYSTEM SET db_unique_name = 'orcl' SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE FORCE LOGGING;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
自 9i R2 引入 Standby Redo Log(SRL)以来,Oracle 強烈建議配置以支援即時應用與重做串聯。11g 新特性:若主庫已建立 SRL,DUPLICATE 會自動在備庫同步建立。本例每組配置多個成員防單點故障:
ALTER DATABASE ADD STANDBY LOGFILE '/u01/app/Oracle/oradata/orcl/srl01.log' SIZE 50M REUSE;
ALTER DATABASE ADD STANDBY LOGFILE '/u01/app/Oracle/oradata/orcl/srl02.log' SIZE 50M REUSE;
ALTER DATABASE ADD STANDBY LOGFILE '/u01/app/Oracle/oradata/orcl/srl03.log' SIZE 50M REUSE;
主備路徑不同時需設定 DB_FILE_NAME_CONVERT 與 LOG_FILE_NAME_CONVERT,確保 RMAN 能正確映射資料檔與日誌檔路徑。
以下參數確保 DUPLICATE 能自動配置備庫環境:
DB_UNIQUE_NAMEstdby,採 ASYNC 模式與 VALID_FOR=(ONLINE_LOGFILE,PRIMARY_ROLE)ALTER SYSTEM SET log_archive_dest_1 = 'LOCATION=/u01/app/Oracle/Flash_recovery_area/ORCL/ DB_UNIQUE_NAME=orcl VALID_FOR=(ALL_LOGFILES,ALL_ROLES)';
ALTER SYSTEM SET log_archive_dest_state_1 = 'ENABLE';
ALTER SYSTEM SET log_archive_dest_2 = 'SERVICE=stdby ASYNC DB_UNIQUE_NAME=stdby VALID_FOR=(ONLINE_LOGFILE,PRIMARY_ROLE)';
ALTER SYSTEM SET log_archive_dest_state_2 = 'ENABLE';
ALTER SYSTEM SET standby_file_management = 'AUTO';
ALTER SYSTEM SET log_archive_config = 'DG_CONFIG=(orcl,stdby)';
主庫 tnsnames.ora 新增備庫條目;備庫 listener.ora 註冊靜態監聽 SID_LIST_LISTENER,確保 RMAN auxiliary 連線可在 NOMOUNT 階段建立。
orapwd 建立或從主庫複製,確保 SYS 密碼一致DB_NAME=stdby,啟動至 NOMOUNT 狀態等待 RMAN 接管export ORACLE_SID=stdby
sqlplus / as sysdba
SQL> startup nomount pfile='/home/oracle/init_stdby.ora';
在主庫啟動 RMAN,以 target / 連主庫、auxiliary sys@stdby 連備庫。配置 2 個 target 與 2 個 auxiliary 通道加速。核心命令結構:
RUN {
ALLOCATE CHANNEL d1 TYPE DISK;
ALLOCATE CHANNEL d2 TYPE DISK;
ALLOCATE AUXILIARY CHANNEL cnv1 TYPE DISK;
ALLOCATE AUXILIARY CHANNEL cnv2 TYPE DISK;
DUPLICATE TARGET DATABASE
FOR STANDBY
FROM ACTIVE DATABASE
DORECOVER
SPFILE
SET db_unique_name='stdby'
SET control_files='/u01/app/Oracle/oradata/orcl/control01.ctl'
SET log_file_name_convert='/u01/app/oracle/oradata/orcl/','/u01/app/Oracle/oradata/stdby/'
SET log_archive_dest_1='location=/u01/app/Oracle/Flash_recovery_area/STDBY/ valid_for=(ALL_LOGFILES,ALL_ROLES) db_unique_name=stdby'
SET log_archive_dest_2='service=orcl ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=orcl'
SET fal_client='stdby'
SET fal_server='orcl'
SET standby_file_management='AUTO'
SET log_archive_config='dg_config=(orcl,stdby)'
NOFILENAMECHECK;
}
SET 子句修改FOR STANDBY 類型,修正檔名後複製至備庫,MOUNT STANDBY DATABASE克隆完成後,在主庫執行 ALTER SYSTEM ARCHIVE LOG CURRENT; 強制日誌切換。觀察備庫告警日誌出現 RFS[2]: Successfully opened standby log 4 等記錄,確認重做傳輸與應用正常。此時物理備用資料庫已就緒,可支援即時查詢、快照備份等進階用途。
原文出處: Oracle 11g Data Guard: Building a Physical Standby Database by Jim Czuprynski