環境規劃
| 項目 | 主庫 | 備庫 |
| DB_UNIQUE_NAME | PRIM | STBY |
| SID | ORCL | STBY |
| ORACLE_HOME | /oracle/product/11.2.0/db_1 | 同 |
| 資料檔路徑 | /oradata/orcl/ | /oradata/stby/ |
步驟 1:主庫啟用強制歸檔與備份模式
ALTER DATABASE FORCE LOGGING;
-- 檢查歸檔狀態
ARCHIVE LOG LIST;
-- 若非歸檔模式
SHUTDOWN IMMEDIATE
STARTUP MOUNT
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
ARCHIVE LOG LIST;
步驟 2:建立 Standby Redo Log(主庫同步建立,備庫同步同步)
ALTER DATABASE ADD STANDBY LOGFILE
GROUP 4 ('/oradata/orcl/standby_redo04a.log','/oradata/orcl/standby_redo04b.log') SIZE 50M,
GROUP 5 ('/oradata/orcl/standby_redo05a.log','/oradata/orcl/standby_redo05b.log') SIZE 50M,
GROUP 6 ('/oradata/orcl/standby_redo06a.log','/oradata/orcl/standby_redo06b.log') SIZE 50M,
GROUP 7 ('/oradata/orcl/standby_redo07a.log','/oradata/orcl/standby_redo07b.log') SIZE 50M;
步驟 3:主庫建立密碼檔並複製至備庫
ORAPWD FILE=$ORACLE_HOME/dbs/orapwprim PASSWORD=oracle ENTRIES=10 FORCE=Y IGNORECASE=Y
SCP $ORACLE_HOME/dbs/orapwprim STBY:$ORACLE_HOME/dbs/orapwstby
步驟 4:主庫 PFILE 關鍵參數
*.DB_UNIQUE_NAME=PRIM
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(PRIM,STBY)'
*.LOG_ARCHIVE_DEST_1='LOCATION=/oradata/arch/prim VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PRIM'
*.LOG_ARCHIVE_DEST_2='SERVICE=STBY VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=STBY'
*.FAL_CLIENT=PRIM
*.FAL_SERVER=STBY
*.STANDBY_FILE_MANAGEMENT=AUTO
步驟 5:備庫 PFILE 關鍵參數(檔名轉換參數關鍵)
*.DB_UNIQUE_NAME=STBY
*.DB_FILE_NAME_CONVERT='/oradata/orcl','/oradata/stby'
*.LOG_FILE_NAME_CONVERT='/oradata/orcl','/oradata/stby'
*.LOG_ARCHIVE_DEST_1='LOCATION=/oradata/arch/stby VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=STBY'
*.LOG_ARCHIVE_DEST_2='SERVICE=PRIM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=PRIM'
*.FAL_CLIENT=STBY
*.FAL_SERVER=PRIM
*.STANDBY_FILE_MANAGEMENT=AUTO
步驟 6:RMAN 從主庫備份並恢復至備庫
-- 主庫
RMAN TARGET /
BACKUP DATABASE FORMAT '/u01/oradata/dbfull_%U';
-- 建立 Standby Controlfile
ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/oradata/stby/stbycontrol.ctl';
-- 複製控制檔至備庫雙路徑
-- 備庫
STARTUP NOMOUNT PFILE='/home/oracle/initstby.ora'
RMAN TARGET /
RESTORE DATABASE;
-- 若檔名轉換參數正確,資料檔自動落在 /oradata/stby/
步驟 7:啟動主庫、配置 TNS、啟動 Redo Apply
-- 主庫
STARTUP PFILE='/home/oracle/initprim.ora'
-- 雙方 TNSNAMES.ORA 配置 PRIM/STBY 服務名
-- 備庫啟動 Redo Apply(後台脫離 Session)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
步驟 8:驗證同步
-- 主庫
SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG;
ALTER SYSTEM SWITCH LOGFILE; -- 切兩次
-- 備庫
SELECT SEQUENCE#, APPLIED FROM V$ARCHIVED_LOG ORDER BY 1;
-- APPLIED=YES 表示同步正常
主備切換標準流程
- 主庫確認
SELECT SWITCHOVER_STATUS FROM V$DATABASE; 返回 TO STANDBY
- 主庫執行
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
- 主庫
SHUTDOWN IMMEDIATE; STARTUP MOUNT;
- 備庫確認
SWITCHOVER_STATUS = TO PRIMARY
- 備庫執行
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
- 備庫開啟:
- 未開唯讀:
ALTER DATABASE OPEN;
- 已開唯讀:
SHUTDOWN IMMEDIATE; STARTUP;
- 新備庫重啟 Redo Apply:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
- 新主庫
ALTER SYSTEM SWITCH LOGFILE; 觸發首次日誌傳輸
故障切換關鍵指令
-- 有缺失歸檔時,備庫手工註冊
ALTER DATABASE REGISTER PHYSICAL LOGFILE '檔案路徑';
-- 強制完成故障切換(終止 RFS 進程,不等網路超時)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;