
1. 适用场景本文适用于Oracle 19c 两节点 RAC 主库 ↓ Active Data Guard ↓ Oracle 19c 两节点 RAC 备库本手册基于实际 RAC→RAC 容灾环境整理数据库版本Oracle Database 19c Version 19.25.0.0.0典型架构项目主库备库架构2节点 RAC2节点 RACDB_NAMEPRODCDBPRODCDBDB_UNIQUE_NAMEprodcdbprodadg实例1prodcdb1prodcdb1实例2prodcdb2prodcdb2数据存储ASM DATAASM DATARedo存储ASM RECOASM RECORedo传输ASYNC—最终状态PRIMARY / READ WRITEPHYSICAL STANDBY / READ ONLY WITH APPLY核心规则DB_NAME主备一致 DB_UNIQUE_NAME主备不同四份实际文档均采用这一规划方式。3、utf8容器库容灾 2、mes容器库容灾2. 示例网络规划以下全部为虚拟地址。主库 RAC节点1rac-pri01 Public IP192.0.2.11 VIP192.0.2.21 节点2rac-pri02 Public IP192.0.2.12 VIP192.0.2.22 SCAN rac-pri-scan 192.0.2.10备库 RAC节点1rac-stby01 Public IP198.51.100.11 VIP198.51.100.21 节点2rac-stby02 Public IP198.51.100.12 VIP198.51.100.22 SCAN rac-stby-scan 198.51.100.10数据库主库 DB_NAMEPRODCDB DB_UNIQUE_NAMEprodcdb 备库 DB_NAMEPRODCDB DB_UNIQUE_NAMEprodadg SID prodcdb1 prodcdb23. 整体搭建流程实际实施按以下顺序执行即可1. 主备4个节点配置hosts及网络解析 2. 主库开启FORCE LOGGING 3. 准备备库RAC数据库环境 4. 处理DB_DOMAIN / GLOBAL_NAME 5. 同步SYS密码文件 6. 主库创建Standby Redo Log 7. 备份主库SPFILE 8. 配置主库Data Guard参数 9. 检查备库ASM路径 10. 备库两个节点配置静态监听 11. 主备配置tnsnames.ora 12. 四个节点执行tnsping验证 13. 配置备库Data Guard参数 14. 关闭备库两个实例 15. 两个备库实例启动至NOMOUNT 16. RMAN Active Duplicate 17. 配置归档删除策略 18. 备库以只读方式打开 19. 启动Redo Apply 20. 巡检主备同步状态 21. ADGTEST表验证实际数据同步这就是四套实际环境中反复采用的核心流程。2、mes容器库容灾4. 配置主备 Hosts主库、备库共 4 台服务器均配置主备 Public、VIP、SCAN 以及实际需要的私网解析。示例192.0.2.11 rac-pri01 192.0.2.12 rac-pri02 192.0.2.21 rac-pri01-vip 192.0.2.22 rac-pri02-vip 192.0.2.10 rac-pri-scan 198.51.100.11 rac-stby01 198.51.100.12 rac-stby02 198.51.100.21 rac-stby01-vip 198.51.100.22 rac-stby02-vip 198.51.100.10 rac-stby-scan四份原始实施文档均先完成主备 RAC 节点间的 hosts 解析。4、z16容器库容灾参与搭建5. 主库开启强制日志主库任一实例su - oracle sqlplus / as sysdba执行ALTER DATABASE FORCE LOGGING;检查SELECT name, log_mode, force_logging FROM v$database;要求LOG_MODE ARCHIVELOG FORCE_LOGGING YES该步骤只在主库执行。四套实际环境均以此作为 DG 配置的第一项数据库操作。1、erp容器库容灾6. 准备备库RAC数据库环境四份实际文档采用的方式不是“仅安装软件”而是先在备库 RAC 环境建立同DB_NAME、不同DB_UNIQUE_NAME的数据库环境再通过 RMAN Active Duplicate 覆盖形成 Physical Standby。示例主库 DB_NAMEPRODCDB DB_UNIQUE_NAMEprodcdb 备库 DB_NAMEPRODCDB DB_UNIQUE_NAMEprodadg备库实例prodcdb1 prodcdb2这一点要与前面的“单机→单机 RMAN Backup-Based”手册区分开。7. 检查并处理数据库域名四套实际搭建中均重点处理了DB_DOMAIN/ Global Name且其中一套实际出现过因域名未清理导致归档目的端异常的问题。4、z16容器库容灾参与搭建备库检查SHOW PARAMETER domain;如本环境要求不使用数据库域名ALTER SYSTEM SET db_domain SCOPESPFILE SID*; ALTER SYSTEM SET global_namesFALSE;重启后检查SELECT * FROM global_name;如果需要调整UPDATE global_name SET global_namePRODCDB; COMMIT;是否清除DB_DOMAIN必须以当前环境命名规范为准这里保留该步骤是因为四套实际 ADG 环境均按此方式实施。8. 同步Password File主备必须保证 SYS 远程认证一致。实际实施记录明确建议直接使用主库密码文件同步到备库比在备库重新创建更可靠。4、z16容器库容灾参与搭建正式文档中不保存真实 SYS 密码。检查SHOW PARAMETER remote_login_passwordfile;建议EXCLUSIVE密码文件完成同步后再进行后续 TNS / RMAN 远程连接验证。9. 主库规划Standby Redo Log这是 RAC ADG 的核心。先查询SET LINES 200 SELECT thread#, group#, bytes/1024/1024 size_mb FROM v$log ORDER BY thread#,group#;实际四套文档中都是Thread 12组Online Redo Thread 22组Online Redo因此分别为两个 Thread 各配置Online Redo组数 1即Thread 13组SRL Thread 23组SRL实际环境确实按照每个 Thread 3 组进行配置。2、mes容器库容灾 2、mes容器库容灾SRL大小必须根据当前库 Online Redo 实际大小确定不要固定照抄某个数值。假设当前 Online Redo 为4096MALTER DATABASE ADD STANDBY LOGFILE THREAD 1 (RECO/PRODCDB/ONLINELOG/srl_05.log) SIZE 4096M; ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 (RECO/PRODCDB/ONLINELOG/srl_06.log) SIZE 4096M; ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 (RECO/PRODCDB/ONLINELOG/srl_07.log) SIZE 4096M; ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 (RECO/PRODCDB/ONLINELOG/srl_08.log) SIZE 4096M; ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 (RECO/PRODCDB/ONLINELOG/srl_09.log) SIZE 4096M; ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 (RECO/PRODCDB/ONLINELOG/srl_10.log) SIZE 4096M;检查SELECT group#, thread#, sequence#, status, bytes/1024/1024 size_mb FROM v$standby_log ORDER BY thread#,group#;初建后STATUS UNASSIGNED属于正常。10. 备份主库SPFILERAC 参数调整前先留备份SHOW PARAMETER spfile; CREATE PFILE/home/oracle/prodcdb_before_dg.ora FROM SPFILE;实际四套环境均执行了这一动作。3、utf8容器库容灾11. 配置主库Data Guard参数主库执行ALTER SYSTEM SET log_archive_configDG_CONFIG(prodcdb,prodadg) SCOPEBOTH SID*;配置归档传输目的端ALTER SYSTEM SET log_archive_dest_2 SERVICEPRODADG ASYNC VALID_FOR(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAMEprodadg SCOPEBOTH SID*;启用ALTER SYSTEM SET log_archive_dest_state_2ENABLE SCOPEBOTH SID*;FALALTER SYSTEM SET fal_serverPRODADG SCOPEBOTH SID*; ALTER SYSTEM SET fal_clientPRODCDB SCOPEBOTH SID*;自动文件管理ALTER SYSTEM SET standby_file_managementAUTO SCOPEBOTH SID*;实际环境采用ASYNC对应 Maximum Performance 场景。3、utf8容器库容灾RAC参数统一使用SID*12. 检查ASM路径备库检查SHOW PARAMETER db_create_file_dest; SHOW PARAMETER db_create_online_log_dest;实际四套环境采用db_create_file_dest DATA db_create_online_log_dest_1 RECO4、z16容器库容灾参与搭建主备磁盘组规划一致时RMAN Duplicate 最简单。13. 备库配置静态监听RMAN Duplicate 需要连接 NOMOUNT 状态下的辅助实例因此备库两个节点均配置静态监听。Grid 用户修改$GRID_HOME/network/admin/listener.ora节点1SID_LIST_LISTENER (SID_LIST (SID_DESC (GLOBAL_DBNAME prodadg) (ORACLE_HOME ORACLE_HOME) (SID_NAME prodcdb1) ) )节点2SID_LIST_LISTENER (SID_LIST (SID_DESC (GLOBAL_DBNAME prodadg) (ORACLE_HOME ORACLE_HOME) (SID_NAME prodcdb2) ) )重新加载lsnrctl reload检查lsnrctl status实际四套环境均在两个备库节点分别配置静态 SID。2、mes容器库容灾14. 配置tnsnames.ora主备 RAC 均配置。主库PRODCDB (DESCRIPTION (ADDRESS(PROTOCOLTCP)(HOST192.0.2.11)(PORT1521)) (ADDRESS(PROTOCOLTCP)(HOST192.0.2.12)(PORT1521)) (CONNECT_DATA (SERVERDEDICATED) (SERVICE_NAMEprodcdb) ) )备库PRODADG (DESCRIPTION (ADDRESS(PROTOCOLTCP)(HOST198.51.100.11)(PORT1521)) (ADDRESS(PROTOCOLTCP)(HOST198.51.100.12)(PORT1521)) (CONNECT_DATA (SERVERDEDICATED) (SERVICE_NAMEprodadg) ) )这里保留四份实际文档中的重要经验RMAN Duplicate 需要连接备库静态监听因此备库 TNS 使用 Public IP 或 VIP不使用 SCAN IP。1、erp容器库容灾四台机器分别测试tnsping PRODCDB tnsping PRODADG15. 配置备库Data Guard参数备库执行ALTER SYSTEM SET log_archive_configDG_CONFIG(prodcdb,prodadg) SCOPEBOTH SID*;ALTER SYSTEM SET fal_serverPRODCDB SCOPEBOTH SID*; ALTER SYSTEM SET fal_clientPRODADG SCOPEBOTH SID*;ALTER SYSTEM SET standby_file_managementAUTO SCOPEBOTH SID*;配置未来备库切换成 Primary 后使用的归档目的端ALTER SYSTEM SET log_archive_dest_2 SERVICEPRODCDB ASYNC VALID_FOR(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAMEprodcdb SCOPEBOTH SID*;ALTER SYSTEM SET log_archive_dest_state_2ENABLE SCOPEBOTH SID*;这与四套实际环境的配置方式一致。2、mes容器库容灾16. 关闭并启动备库至NOMOUNT分别确认当前实例ps -ef | grep pmon节点1export ORACLE_SIDprodcdb1 sqlplus / as sysdba节点2export ORACLE_SIDprodcdb2 sqlplus / as sysdba两个备库实例先关闭SHUTDOWN IMMEDIATE;然后分别启动STARTUP NOMOUNT;四套实际文档统一记录为两个节点必须同时启动到 NOMOUNT 状态随后进行 RMAN Duplicate。1、erp容器库容灾17. 执行RMAN Active Duplicate在主库 Oracle 用户下rman target sysPRODCDB auxiliary sysPRODADG密码采用交互方式输入禁止在正式文档中保存明文密码。执行DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE;四套 RAC→RAC 实际环境全部采用了duplicate target database for standby from active database;这一方式。3、utf8容器库容灾 2、mes容器库容灾18. 配置主库归档删除策略实际 ERP、MES、UTF8 环境均在 Duplicate 后设置rman target /执行CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;即归档在所有 Standby 已应用后才允许按 RMAN 策略删除。1、erp容器库容灾 2、mes容器库容灾生产实施前仍应确认该策略与现有 RMAN 备份、归档保留要求一致。19. 打开备库Duplicate 完成后检查SELECT inst_id, status FROM gv$instance ORDER BY inst_id;如需按实际文档方式重新拉起两个实例则分别关闭后STARTUP;查看SELECT database_role, protection_mode, protection_level, open_mode FROM v$database;目标角色必须PHYSICAL STANDBY20. 启动Redo Apply备库执行ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;四套实际文档均采用该命令启动实时应用。4、z16容器库容灾参与搭建停止时ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;最终 Active Data Guard 状态应为DATABASE_ROLE PHYSICAL STANDBY OPEN_MODE READ ONLY WITH APPLY21. 主库核心巡检数据库角色SELECT db_unique_name, database_role, open_mode, protection_mode FROM v$database;正常PRIMARY READ WRITE两个RAC实例SELECT inst_id, instance_name, status FROM gv$instance ORDER BY inst_id;两个实例均应正常。Redo传输状态SET LINES 200 COL dest_name FOR A30 COL error FOR A70 SELECT dest_id, dest_name, status, target, error FROM v$archive_dest WHERE dest_id IN (1,2);重点DEST_2 STATUS VALID ERROR 空如果目的端临时异常四套实际环境中采用过刷新ALTER SYSTEM SET log_archive_dest_state_2DEFER SID*; ALTER SYSTEM SET log_archive_dest_state_2ENABLE SID*;3、utf8容器库容灾22. 备库核心巡检数据库状态SELECT db_unique_name, database_role, open_mode, protection_mode FROM v$database;正常PHYSICAL STANDBY READ ONLY WITH APPLYRAC实例状态SELECT inst_id, instance_name, status FROM gv$instance ORDER BY inst_id;MRP / RFSSELECT process, status, thread#, sequence# FROM v$managed_standby WHERE process IN (MRP0,RFS) ORDER BY process;MRP 正常常见WAIT_FOR_LOG或APPLYING_LOG23. RAC必须按Thread检查日志同步这是 RAC 巡检必须保留的一项。SELECT thread#, MAX(sequence#) received_seq, MAX(CASE WHEN appliedYES THEN sequence# END) applied_seq FROM v$archived_log GROUP BY thread# ORDER BY thread#;正常例如THREAD# RECEIVED_SEQ APPLIED_SEQ ------- ------------ ----------- 1 1580 1580 2 1492 1492必须同时关注Thread 1 Thread 224. 检查Archive GapSELECT * FROM v$archive_gap;正常no rows selected25. 检查Standby Redo LogSELECT group#, thread#, sequence#, status, bytes/1024/1024 size_mb FROM v$standby_log ORDER BY thread#,group#;重点确认Thread 1 SRL存在 Thread 2 SRL存在 SRL大小与Online Redo一致26. ADG简单表测试为了以后快速判断 ADG 是否真正同步建议保留一张简单测试表。选择一个业务 PDB / 测试 Schema在主库执行CREATE TABLE ADGTEST ( ID NUMBER PRIMARY KEY, TEST_TIME TIMESTAMP DEFAULT SYSTIMESTAMP );插入INSERT INTO ADGTEST (ID) VALUES (1); COMMIT;查询ALTER SESSION SET NLS_TIMESTAMP_FORMATYYYY-MM-DD HH24:MI:SS.FF6; SELECT * FROM ADGTEST;例如ID TEST_TIME 1 2026-10-07 10:30:00.123456然后到备库相同 PDBALTER SESSION SET NLS_TIMESTAMP_FORMATYYYY-MM-DD HH24:MI:SS.FF6; SELECT * FROM ADGTEST;能看到完全相同的数据即可直观确认主库DML ↓ Redo产生 ↓ RAC Redo Thread ↓ Redo Transport ↓ Standby Redo Log ↓ MRP Apply ↓ ADG查询成功后续只需INSERT INTO ADGTEST (ID) VALUES (2); COMMIT;然后备库SELECT * FROM ADGTEST ORDER BY ID;即可快速测试。27. 最终验收标准完成以下检查即可认为 RAC→RAC ADG 搭建正常检查项目正常标准主库角色PRIMARY主库状态READ WRITE主库两实例正常运行DEST_2VALIDDEST_2 ERROR空备库角色PHYSICAL STANDBY备库状态READ ONLY WITH APPLY备库两实例正常运行MRP0WAIT_FOR_LOG / APPLYING_LOGRFS正常Thread 1Received ≈ AppliedThread 2Received ≈ AppliedArchive Gap无SRL两个Thread均正常ADGTEST主库写入、备库可查询28. 下一次实施速查版以后再搭 RAC→RAC现场直接看这一段即可【规划】 1. DB_NAME主备一致 2. DB_UNIQUE_NAME主备不同 3. 确认2节点SID 4. 确认Public/VIP/SCAN/Private网络 【主库】 5. FORCE LOGGING 6. 检查ARCHIVELOG 7. 查看Thread及Online Redo 8. 每个Thread创建 Online Redo数量1 的SRL 9. 备份SPFILE 10. 配置LOG_ARCHIVE_CONFIG 11. 配置LOG_ARCHIVE_DEST_2 12. 配置FAL_SERVER/FAL_CLIENT 13. standby_file_managementAUTO 【备库】 14. 建立相同DB_NAME、不同DB_UNIQUE_NAME的RAC环境 15. 处理DB_DOMAIN / GLOBAL_NAME 16. 同步主库Password File 17. 检查DATA / RECO 18. 两节点配置静态Listener 【网络】 19. 配置PRODCDB TNS 20. 配置PRODADG TNS 21. 静态监听连接使用Public/VIP不使用SCAN 22. 四节点tnsping测试 【备库参数】 23. 配置LOG_ARCHIVE_CONFIG 24. 配置FAL_SERVER/FAL_CLIENT 25. standby_file_managementAUTO 26. 配置反向LOG_ARCHIVE_DEST_2 【Duplicate】 27. 关闭备库两实例 28. 两实例STARTUP NOMOUNT 29. RMAN连接Target/Auxiliary 30. DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE 【完成】 31. 配置APPLIED ON ALL STANDBY归档删除策略 32. 打开备库 33. 启动Redo Apply 34. 确认READ ONLY WITH APPLY 【巡检】 35. 主库DEST_2 VALID 36. 两边gv$instance正常 37. MRP/RFS正常 38. Thread 1 received≈applied 39. Thread 2 received≈applied 40. v$archive_gap无记录 41. ADGTEST主写备查成功这版更适合作为你后续真正使用的RAC→RAC ADG 标准 SOP不是把 4 套 CDB 重复写 4 遍而是把 4 次实际实施中共同且已经落地过的操作抽出来只保留下一次搭建必须用到的步骤同时把数据库名、IP、主机名和密码全部模板化。3、utf8容器库容灾 1、erp容器库容灾 2、mes容器库容灾 4、z16容器库容灾参与搭建