首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

Oracle 11g 基於備份的 RMAN DUPLICATE 建立 Physical Standby 完整流程

     編輯:Oracle 教學

Oracle 11g 基於備份的 RMAN DUPLICATE 建立 Physical Standby 完整流程

使用 RMAN DUPLICATE ... FOR STANDBY 從主庫備份建立實體備庫,適用於主備儲存結構完全一致的環境。

前提條件

  • 主庫已啟用 ARCHIVELOG + FORCE LOGGING
  • 主庫備份集 (含控制檔、資料檔、歸檔日誌) 對備庫伺服器**完全可見** (共享存儲/NFS/複製到相同路徑)
  • 主備 DB_NAME 相同,DB_UNIQUE_NAME 不同
  • 雙向網路通暢,配置靜態監聽器 (SID_LIST) 供 RMAN 連線

主庫端準備 (Primary)

-- 1. 強制日誌
ALTER DATABASE FORCE LOGGING;

-- 2. 建立 Standby Redo Log (SRL) - 建議每組比 Online Redo 多 1 組
ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/u01/oradata/ORCL/srl04a.log','/u02/oradata/ORCL/srl04b.log') SIZE 500M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/u01/oradata/ORCL/srl05a.log','/u02/oradata/ORCL/srl05b.log') SIZE 500M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/u01/oradata/ORCL/srl06a.log','/u02/oradata/ORCL/srl06b.log') SIZE 500M;

-- 3. 設定 Data Guard 參數 (PFILE/SPFILE)
*.db_unique_name=ORCL_PRI
*.log_archive_config='DG_CONFIG=(ORCL_PRI,ORCL_SB)'
*.log_archive_dest_1='LOCATION=/u01/arch/ORCL_PRI VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ORCL_PRI'
*.log_archive_dest_2='SERVICE=ORCL_SB ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORCL_SB'
*.fal_server=ORCL_SB
*.standby_file_management=AUTO

備庫端準備 (Standby)

  1. 複製密碼檔:scp $ORACLE_HOME/dbs/orapwORCL_PRI $ORACLE_HOME/dbs/orapwORCL_SB
  2. 建立最小化 PFILE (initORCL_SB.ora):
    db_name=ORCL
    db_unique_name=ORCL_SB
    control_files=('/u01/oradata/ORCL/control01.ctl','/u02/oradata/ORCL/control02.ctl')
    log_archive_dest_1='LOCATION=/u01/arch/ORCL_SB VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ORCL_SB'
    fal_server=ORCL_PRI
    standby_file_management=AUTO
    
  3. 建立目錄結構:確保資料檔、日誌、控制檔、備份、歸檔路徑與主庫完全一致。
  4. 啟動 NOMOUNT:
    export ORACLE_SID=ORCL_SB
    sqlplus / as sysdba
    STARTUP NOMOUNT PFILE=/u01/app/oracle/dbs/initORCL_SB.ora
    

RMAN DUPLICATE 執行

rman target sys/xxx@ORCL_PRI auxiliary sys/xxx@ORCL_SB

RUN {
  DUPLICATE TARGET DATABASE FOR STANDBY
  DORECOVER
  SPFILE
    SET "db_unique_name"="ORCL_SB" COMMENT 'Is standby'
    SET "log_archive_dest_2"="SERVICE=ORCL_PRI ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORCL_PRI"
    SET "fal_server"="ORCL_PRI" COMMENT 'Is primary'
    NOFILENAMECHECK;  -- 路徑完全相同才能用
}

關鍵子句解析

  • FOR STANDBY:建立實體備庫控制檔,不開啟資料庫。
  • DORECOVER:Restore 完成後自動執行 Media Recovery (應用歸檔),但**不進入 Managed Recovery 模式**。
  • NOFILENAMECHECK:主備路徑完全一致時跳過檔名轉換檢查。
  • SPFILE:從主庫複製 SPFILE 並套用 SET 參數覆寫。

Duplicate 完成後續操作

  1. 啟用 Managed Recovery:
    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
    
  2. 驗證同步狀態:
    SELECT process, status, sequence# FROM v$managed_standby;
    SELECT max(sequence#) FROM v$archived_log WHERE applied='YES';
    
  3. 開啟唯讀驗證 (Active Data Guard 需額外授權):
    ALTER DATABASE OPEN READ ONLY;
    

常見坑點

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
錯誤原因解決
RMAN-06023: no backup found備份集不可見或 TAG 錯誤確認備份路徑掛載正確;指定 BACKUP LOCATION 或 UNTIL SCN
ORA-19504: failed to create file目標目錄不存在或權限不足預先建立所有目錄,擁有者 oracle:oinstall
Standby 卡在 "waiting for log"SRL 未建立或大小不足主備同步建立足夠 SRL 組 (建議 Online Redo 組數 +1)