数据库教程FGMT24‑Oracle RAC+DG生产实战(4):Oracle19c/26ai RAC DataGuard搭建2
数据库教程FGMT24‑Oracle RAC+DG生产实战(4):Oracle19c/26ai RAC DataGuard搭建2+2
说明:本套风哥教程本章为两套完全独立2+2 DG容灾环境实战部署;2+2架构定义:主库双节点RAC集群,备库同样为双节点RAC集群;两套环境互不连通、互不依赖。
第一套环境:Oracle19c 2+2 DG,主库RHEL8节点fgedu‑net‑cn1、fgedu‑net‑cn2;备库RHEL8节点fgedu‑net‑dg01、fgedu‑net‑dg02;每节点64G内存8CPU。
第二套环境:Oracle26ai 2+2 DG,主库RHEL9节点fgedu‑net‑cn1、fgedu‑net‑cn2;备库RHEL9节点fgedu‑net‑dg01、fgedu‑net‑dg02;26ai采用传统zip介质,不使用Gold‑Image镜像模式,每节点64G内存8CPU。
两套环境数据库名fgedudb;主库实例fgedudb1(cn1)、fgedudb2(cn2);备库实例fgedudb_sb1(dg01)、fgedudb_sb2(dg02);业务测试用户名fgedu,统一根目录/fgedudb。
前言
MAA最高可用性架构中,2+2(RAC主库双节点+RAC备库双节点)是企业级核心业务的标准容灾架构。主库RAC保障本地机房节点故障高可用;异地备库同样部署双节点RAC集群,灾难发生切换之后,备库直接拥有完整RAC集群高可用能力,不需要事后重建集群。2+2架构对比2+1单机备库,架构复杂度显著提升:主备两边均存在多redo thread、两边均有GI集群、ASM共享存储、多节点密码文件同步、多节点静态监听配置、Broker配置文件存放ASM共享磁盘组、switchover切换两边RAC角色互换、多实例redo apply多实例日志应用等关键点。任何节点参数、网络、密码文件不一致,会造成redo传输中断、MRP进程异常、switchover切换失败。风哥教程本文分别完成两套独立2+2 DG容灾完整实施:Oracle19c 2+2 DG(RHEL8)、Oracle26ai 2+2 DG(RHEL9,传统zip介质),覆盖架构规划、操作系统网络配置、RAC主库DG参数配置、RMAN duplicate搭建RAC备库、多实例ADG、DGMGRL Broker完整配置、switchover计划切换、failover灾难切换、日常巡检、补丁运维、故障处理,为本套教程后续Fast‑Start‑Failover、FarSync远同步实例打下基础。风哥 itpux‑com
本套风哥教程面向DBA、数据库架构师、容灾实施运维工程师;两套环境硬件规格均为每节点64G物理内存,8颗逻辑CPU;风哥教程本文分为前言大纲、核心理论知识、实战操作演练、风哥针对本文总结四大模块;实战章节包含大量可直接复制shell、SQL脚本,读者可以在两套独立测试环境完整复现DG搭建、切换、运维全流程。网上搜索风哥教程可以学习全套数据库教程
内容大纲
- Oracle 2+2 RAC‑to‑RAC DataGuard架构整体规划,两套独立环境硬件网络存储说明,19c与26ai DG版本差异
- 2+2架构核心理论:主备两边均RAC集群、多thread redo、多实例redo apply、standby redo log计算规则
- FORCE LOGGING强制日志、补充日志、db_unique_name全局唯一性、Broker在RAC‑to‑RAC环境约束,Broker配置文件ASM共享存储存放
- 初始化参数详解:log_archive_format必须包含%t_%s_%r、log_archive_config、log_archive_dest_n、FAL_SERVER/FAL_CLIENT、转换参数、standby_file_management
- 网络规划:全部四个节点hosts、TNS双向连通,每一个RAC节点配置DG静态监听注册;密码文件在主库全部节点、备库全部节点完整同步
- 第一套环境实战:Oracle19c RHEL8 2+2 DG完整部署,RAC主库参数配置,RMAN duplicate创建RAC备库,开启多实例ADG,DGMGRL Broker配置
- Oracle19c 2+2 DG日常巡检,redo同步验证,临时表空间处理,RMAN归档保留策略,switchover计划切换、failover灾难切换完整演练
- 第二套环境实战:Oracle26ai RHEL9 2+2 DG部署,传统zip介质,RAC主库配置,duplicate搭建RAC备库,Broker配置,26ai版本特有变更
- 2+2 DG补丁运维说明,RAC主库滚动RU补丁,RAC备库滚动RU补丁操作要点
- 2+2 DG上线验收检查清单,部署切换高频故障排查
一、核心理论知识
本章节为本套风哥教程理论基础,理解RAC‑to‑RAC 2+2容灾架构特殊约束,掌握多实例redo apply原理,规避容灾搭建、角色切换阶段生产隐患。风哥教程 113257174
1.1 2+2 RAC‑to‑RAC DataGuard架构说明
2+2架构定义:主库为双节点RAC集群,备库同样为双节点RAC集群。
- 业务价值:本地机房依靠主库RAC实现节点故障高可用;异地机房备库也是完整双节点RAC;灾难执行switchover切换完成之后,新主库直接拥有双节点RAC全部高可用能力,业务不需要容忍单机运行,符合Oracle MAA最佳可用性架构。
- 架构约束:主库每个实例产生独立redo thread;备库RAC集群每个实例可以接收对应thread归档,支持多实例redo apply(MIRA);switchover执行完成,原主库RAC集群转变为standby角色,原备库RAC集群切换成为primary主库,两边全部维持双实例RAC架构。>
关键区别对比2+1架构:2+1备库只是单机,切换后主库变为单实例;2+2切换之后两边依然保持完整双节点RAC集群架构。网上搜索风哥教程可以学习全套数据库教程
1.2 2+2架构核心技术要点
- FORCE LOGGING强制日志:主库RAC必须开启FORCE LOGGING,防止nologging操作生成不完整redo,同步到备库造成数据逻辑损坏。
- Standby Redo Log(SRL)备库重做日志:主库2节点RAC,每个实例4组online redo,计算公式
SRL=(每个实例redo组数+1)*实例数量,所以SRL=(4+1)*2=10组;备库RAC集群每一个thread都必须创建对应SRL,SRL文件大小必须和主库online redo大小完全保持一致。 - db_unique_name全局唯一:DG配置域内,主库db_unique_name=fgedudb_pri,备库db_unique_name=fgedudb_sb,全局不能重复;RAC集群所有实例共享同一个db_unique_name,spfile sid='*'全局设置。
- log_archive_format归档格式:RAC环境归档格式必须设置
arch_%t_%s_%r.arc;%t代表thread编号,区分不同RAC实例生成归档;%s序列号;%rresetlogs ID,缺少%t备库无法识别多thread归档日志。 - Broker配置文件存放ASM磁盘组:主库RAC所有实例访问同一套ASM,dg_broker_config_file1/2必须指向ASM磁盘组路径;备库RAC同样Broker配置文件存放在备库ASM磁盘组;不能存放在本地文件系统,否则RAC第二个实例无法读取Broker配置,引发Broker异常。
- TNS网络双向全连通:主库cn1、cn2,备库dg01、dg02,四个节点之间全部TNS双向tnsping必须成功;每一个RAC节点listener.ora配置DG需要的静态SID_LIST注册,用于redo传输与DGMGRL连接。
- 密码文件全节点同步:主库两个RAC节点密码文件保持完全一致;完整拷贝同步至备库RAC两个节点;密码修改后,四个节点密码文件全部同步更新,否则redo传输报ORA‑1017认证失败。
- 多实例redo apply(MIRA):12.2及之后版本支持备库RAC多实例同时执行redo日志应用;旧版本只支持单实例MRP应用;19c、26ai默认支持MIRA多实例日志应用。风哥数据库教程 itpux‑com
1.3 DG Broker(DGMGRL)在2+2 RAC‑to‑RAC环境约束
DGMGRL完整支持2+2 RAC‑to‑RAC架构;
- 主库RAC所有实例参数
dg_broker_start=true scope=both sid='*';备库RAC全部实例同样开启dg_broker_start。 - Broker配置文件必须存放在各自主备库ASM共享磁盘组,不能使用本地文件系统。
- switchover操作,主库任意节点dgmgrl执行;Broker自动处理两边RAC实例启停、角色转换;切换完成两边RAC集群角色互换,两边维持双实例RAC架构。
- failover灾难切换之后,旧主库RAC集群失效,需要flashback或者RMAN重建之后,再重新加入Broker配置。
1.4 ADG活动数据卫士多实例模式
备库RAC集群开启ADG,备库多个实例可以同时open read‑only,同时执行多实例redo apply;备库RAC集群可以对外提供多节点报表、查询、RMAN备份业务,充分利用异地集群硬件资源。
1.5 关键初始化参数解析
LOG_ARCHIVE_CONFIG='DG_CONFIG=(fgedudb_pri,fgedudb_sb)':DG域内全部db_unique_name,sid='*'对RAC全部实例生效。LOG_ARCHIVE_DEST_1:主库本地归档,指向主库ASM RECO磁盘组,VALID_FOR=(ALL_LOGFILES,ALL_ROLES),角色切换之后作为备库同样生效。LOG_ARCHIVE_DEST_2:指向备库RAC SCAN TNS服务名,LGWR ASYNC异步传输;生产2+2架构普遍采用异步模式。FAL_SERVER / FAL_CLIENT:FAL归档缺失自动抓取;主库FAL_SERVER填写备库SCAN服务;备库FAL_SERVER填写主库SCAN服务。DB_FILE_NAME_CONVERT / LOG_FILE_NAME_CONVERT:主库ASM路径映射备库ASM路径;备库端设置。STANDBY_FILE_MANAGEMENT=AUTO:备库自动管理新增数据文件,禁止设置manual。网上搜索风哥教程可以学习全套数据库教程
1.6 2+2 RAC‑to‑RAC DG高频故障点
- Broker配置文件放在本地文件系统,RAC第二个实例读取不到配置,DGMGRL报错。
- 四个节点密码文件不一致,redo传输报ORA‑1017账号密码认证错误。
- 缺少每个thread对应的standby redo log,redo传输报错。
- log_archive_format参数缺少%t,RAC多thread归档备库识别异常。
- 任意节点缺少静态监听SID_LIST注册,DGMGRL连接失败。
- switchover切换之后部分RAC实例mount失败,spfile参数没有sid='*'全局生效。
- 主库新增临时表空间,备库RAC不会自动生成临时文件,需要备库手工在ASM创建对应tempfile,查询报临时表空间错误。
1.7 RMAN归档删除保留策略
RAC主库执行CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;,归档日志确认已经传输并且应用到所有备库,RMAN才允许删除归档,避免归档提前删除造成备库归档缺失。
1.8 2+2 DG补丁运维约束
主库RAC集群执行opatchauto滚动RU补丁;备库RAC集群同样必须执行滚动RU补丁,主备库GI、DB Home补丁版本必须100保持完全一致;全部二进制补丁完成之后,主库执行datapatch升级字典。
上51CTO搜索风哥可以学习全套数据库教程
二、实战操作演练
环境说明:
环境一:Oracle19c 2+2 DG;主库RAC节点fgedu‑net‑cn1、fgedu‑net‑cn2RHEL8;备库RAC节点fgedu‑net‑dg01、fgedu‑net‑dg02RHEL8;主库db_unique_name=fgedudb_pri;备库db_unique_name=fgedudb_sb;主库实例fgedudb1、fgedudb2;备库实例fgedudb_sb1、fgedudb_sb2。
环境二:Oracle26ai 2+2 DG;主库RAC节点fgedu‑net‑cn1、fgedu‑net‑cn2RHEL9;备库RAC节点fgedu‑net‑dg01、fgedu‑net‑dg02RHEL9;传统zip介质,不使用Gold Image。
主库RAC两个节点大部分配置操作cn1、cn2全部节点执行;备库RAC两个节点dg01、dg02全部节点执行。
第一部分 环境一:Oracle19c RHEL8 2+2 RAC‑to‑RAC DataGuard完整部署
2.1 环境网络规划与hosts配置
2.1.1 四台主机/etc/hosts配置,四台主机内容必须完全一致
cat >> /etc/hosts <<EOF
#主库RAC节点1
10.10.10.101 fgedu‑net‑cn1
10.10.10.111 fgedu‑net‑cn1‑vip
192.168.20.101 fgedu‑net‑cn1‑priv
#主库RAC节点2
10.10.10.102 fgedu‑net‑cn2
10.10.10.112 fgedu‑net‑cn2‑vip
192.168.20.102 fgedu‑net‑cn2‑priv
#主库SCAN
10.10.10.121 fgedu‑scan‑pri
10.10.10.122 fgedu‑scan‑pri
10.10.10.123 fgedu‑scan‑pri
#备库RAC节点1
10.10.10.201 fgedu‑net‑dg01
10.10.10.211 fgedu‑net‑dg01‑vip
192.168.20.201 fgedu‑net‑dg01‑priv
#备库RAC节点2
10.10.10.202 fgedu‑net‑dg02
10.10.10.212 fgedu‑net‑dg02‑vip
192.168.20.202 fgedu‑net‑dg02‑priv
#备库SCAN
10.10.10.221 fgedu‑scan‑sb
10.10.10.222 fgedu‑scan‑sb
10.10.10.223 fgedu‑scan‑sb
EOF
2.1.2 tnsnames.ora配置,四台主机tnsnames.ora内容完全一致,oracle用户/fgedudb/dbhome/network/admin/tnsnames.ora
FGEDUDB_PRI =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS=(PROTOCOL=TCP)(HOST=fgedu‑scan‑pri)(PORT=1521))
)
(CONNECT_DATA=(SERVICE_NAME=fgedudb_pri)))
FGEDUDB_SB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS=(PROTOCOL=TCP)(HOST=fgedu‑scan‑sb)(PORT=1521))
)
(CONNECT_DATA=(SERVICE_NAME=fgedudb_sb)))
2.1.3 每一个RAC节点listener.ora增加DG静态SID_LIST注册(主库cn1、cn2;备库dg01、dg02四台主机全部配置)
/fgedudb/dbhome/network/admin/listener.ora追加SID_LIST_LISTENER
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC=
(GLOBAL_DBNAME=fgedudb_pri_DGMGRL)
(ORACLE_HOME=/fgedudb/dbhome)
(SID_NAME=fgedudb1)
)
(SID_DESC=
(GLOBAL_DBNAME=fgedudb_pri_DGMGRL)
(ORACLE_HOME=/fgedudb/dbhome)
(SID_NAME=fgedudb2)
)
(SID_DESC=
(GLOBAL_DBNAME=fgedudb_sb_DGMGRL)
(ORACLE_HOME=/fgedudb/dbhome)
(SID_NAME=fgedudb_sb1)
)
(SID_DESC=
(GLOBAL_DBNAME=fgedudb_sb_DGMGRL)
(ORACLE_HOME=/fgedudb/dbhome)
(SID_NAME=fgedudb_sb2)
)
)
四台主机全部重启监听
lsnrctl stop
lsnrctl start
2.1.4 TNS连通性全量测试,四台主机分别执行tnsping两个别名
tnsping FGEDUDB_PRI
tnsping FGEDUDB_SB
全部tnsping必须100%成功,否则DG后续redo传输、DGMGRL会报错。网上搜索风哥教程可以学习全套数据库教程
2.2 RAC主库DG前期准备(主库cn1节点执行,参数sid='*'对全部实例生效)
登录sqlplus / as sysdba
--开启强制日志
alter database force logging;
select force_logging,log_mode from v$database;
--确认归档模式,RAC主库必须开启归档
archive log list;
--归档格式必须包含%t_%s_%r
alter system set log_archive_format='arch_%t_%s_%r.arc' scope=spfile sid='*';
--DG基础全局参数
alter system set db_unique_name='fgedudb_pri' scope=spfile sid='*';
alter system set log_archive_config='DG_CONFIG=(fgedudb_pri,fgedudb_sb)' scope=both sid='*';
alter system set log_archive_dest_1='LOCATION=+RECO VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=fgedudb_pri' scope=both sid='*';
alter system set log_archive_dest_2='SERVICE=FGEDUDB_SB LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=fgedudb_sb COMPRESSION=ENABLE NET_TIMEOUT=30 REOPEN=15' scope=both sid='*';
alter system set log_archive_dest_state_1=enable scope=both sid='*';
alter system set log_archive_dest_state_2=enable scope=both sid='*';
--FAL参数
alter system set fal_server='FGEDUDB_SB' scope=both sid='*';
alter system set fal_client='FGEDUDB_PRI' scope=both sid='*';
alter system set standby_file_management=AUTO scope=both sid='*';
--Broker参数,配置文件存放在ASM RECO磁盘组,RAC全部实例共用
alter system set dg_broker_start=true scope=both sid='*';
alter system set dg_broker_config_file1='+RECO/fgedudb_pri/dr1.dat' scope=spfile sid='*';
alter system set dg_broker_config_file2='+RECO/fgedudb_pri/dr2.dat' scope=spfile sid='*';
2.2.1 RAC主库添加Standby Redo Log,2节点RAC,SRL=(4+1)*2=10组
alter database add standby logfile thread 1 group 11 size 2048M;
alter database add standby logfile thread 1 group 12 size 2048M;
alter database add standby logfile thread 1 group 13 size 2048M;
alter database add standby logfile thread 1 group 14 size 2048M;
alter database add standby logfile thread 1 group 15 size 2048M;
alter database add standby logfile thread 2 group 21 size 2048M;
alter database add standby logfile thread 2 group 22 size 2048M;
alter database add standby logfile thread 2 group 23 size 2048M;
alter database add standby logfile thread 2 group 24 size 2048M;
alter database add standby logfile thread 2 group 25 size 2048M;
select thread#,group#,bytes/1024/1024 mb,status from v$standby_log;
select thread#,group#,bytes/1024/1024 mb,status from v$log;
2.2.2 RAC主库密码文件全节点同步
主库cn1节点ASM密码文件+OCRVOTE/orapwfgedudb,拷贝到cn2节点;完整拷贝两份到备库dg01、dg02节点GI ASM;四个节点密码文件必须完全一致。风哥数据库教程 itpux‑com
2.3 RMAN duplicate搭建RAC备库(备库集群操作)
备库集群fgedu‑net‑dg01、fgedu‑net‑dg02已经部署完整GI+DB RAC软件,没有创建业务数据库;ASM磁盘组OCRVOTE、DATA、RECO全部已经创建完成。
备库dg01节点创建pfile,启动备库实例fgedudb_sb1到nomount;dg02节点实例暂不启动。
备库dg01节点pfile,存放在/fgedudb/dbhome/dbs/initfgedudb_sb.ora
*.db_name='fgedudb'
*.db_unique_name='fgedudb_sb'
*.control_files='+OCRVOTE/fgedudb_sb/control01.ctl','+OCRVOTE/fgedudb_sb/control02.ctl'
*.db_file_name_convert='+DATA/fgedudb_pri/datafile','+DATA/fgedudb_sb/datafile','+DATA/fgedudb_pri/tempfile','+DATA/fgedudb_sb/tempfile'
*.log_file_name_convert='+RECO/fgedudb_pri/onlinelog','+RECO/fgedudb_sb/onlinelog'
*.standby_file_management=AUTO
*.fal_server='FGEDUDB_PRI'
*.fal_client='FGEDUDB_SB'
*.dg_broker_start=true
*.dg_broker_config_file1='+RECO/fgedudb_sb/dr1.dat'
*.dg_broker_config_file2='+RECO/fgedudb_sb/dr2.dat'
*.db_recovery_file_dest='+RECO'
*.db_recovery_file_dest_size=40G
*.memory_max_target=48G
*.memory_target=48G
*.cluster_database=true
fgedudb_sb1.instance_number=1
fgedudb_sb2.instance_number=2
备库dg01节点启动实例nomount
sqlplus / as sysdba <<EOF
startup nomount pfile='/fgedudb/dbhome/dbs/initfgedudb_sb.ora';
create spfile= '+DATA/fgedudb_sb/spfilefgedudb_sb.ora' from pfile='/fgedudb/dbhome/dbs/initfgedudb_sb.ora';
shutdown immediate;
startup nomount;
exit;
EOF
备库dg01节点执行rman duplicate active database
rman target sys/fgedudb@FGEDUDB_PRI auxiliary /
run{
allocate auxiliary channel aux1 type disk;
duplicate target database for standby from active database
nofilenamecheck;
}
duplicate执行结束,备库dg01实例进入mount状态。
之后备库dg02节点设置ORACLE_SID=fgedudb_sb2,读取ASM spfile,启动实例到mount状态。
export ORACLE_SID=fgedudb_sb2
sqlplus / as sysdba <<EOF
startup mount;
exit;
EOF
2.3.1 备库RAC集群全部实例添加Standby Redo Log,合计10组
备库dg01节点执行
alter database add standby logfile thread 1 group 11 size 2048M;
alter database add standby logfile thread 1 group 12 size 2048M;
alter database add standby logfile thread 1 group 13 size 2048M;
alter database add standby logfile thread 1 group 14 size 2048M;
alter database add standby logfile thread 1 group 15 size 2048M;
alter database add standby logfile thread 2 group 21 size 2048M;
alter database add standby logfile thread 2 group 22 size 2048M;
alter database add standby logfile thread 2 group 23 size 2048M;
alter database add standby logfile thread 2 group 24 size 2048M;
alter database add standby logfile thread 2 group 25 size 2048M;
select group#,bytes/1024/1024 mb from v$standby_log;
2.4 DGMGRL Broker配置(主库cn1节点执行dgmgrl)
dgmgrl sys/fgedudb@FGEDUDB_PRI
create configuration 'FGEDU_2PLUS2' as primary database is fgedudb_pri connect identifier is FGEDUDB_PRI;
add database fgedudb_sb as connect identifier is FGEDUDB_SB;
enable configuration;
show configuration;
show database fgedudb_pri;
show database fgedudb_sb;
show configuration状态返回SUCCESS代表Broker配置正常,redo传输通道建立完成。网上搜索风哥教程可以学习全套数据库教程
2.5 开启多实例ADG活动数据卫士(备库集群执行)
备库两个实例全部open read‑only;开启多实例redo apply MIRA。
dg01节点执行:
sqlplus / as sysdba
alter database open read only;
alter database recover managed standby database using current logfile instances all disconnect from session;
select open_mode,database_role from v$database;
dg02节点:
sqlplus / as sysdba
alter database open read only;
select open_mode,database_role from v$database;
两个备库实例open_mode全部显示
READ‑ONLY WITH APPLY,代表多实例ADG MIRA生效。
2.6 2+2 DG日常巡检脚本
2.6.1 RAC主库巡检(cn1节点)
select db_unique_name,database_role,force_logging,open_mode from v$database;
select dest_id,status,error,transport_lag,apply_lag from v$archive_dest_status where dest_id<>0;
select thread#,sequence#,archived,applied from v$archived_log order by thread#,sequence# desc fetch first 20 rows only;
2.6.2 RAC备库集群巡检(dg01节点)
select db_unique_name,database_role,open_mode from gv$database;
select inst_id,process,status,thread#,sequence#,delay_mins from gv$managed_standby;
select thread#,sequence#,archived,applied from v$archived_log order by thread#,sequence# desc fetch first 20 rows only;
2.6.3 redo同步验证,主库两个实例分别切换日志
alter system switch logfile;
alter session set instance=1;
alter system switch logfile;
alter session set instance=2;
alter system switch logfile;
观察备库gv$managed_standby,两个thread sequence持续推进,代表多thread redo传输、多实例apply全部正常。
2.7 临时表空间处理
RAC主库新增临时表空间,备库RAC集群不会自动创建临时文件;备库需要手工在ASM磁盘组创建对应tempfile。
主库操作:
create temporary tablespace temp2 tempfile '+DATA/fgedudb_pri/tempfile/temp2_01.dbf' size 1G;
备库RAC手工创建:
create temporary tablespace temp2 tempfile '+DATA/fgedudb_sb/tempfile/temp2_01.dbf' size 1G;
2.8 RMAN归档删除保留策略(主库cn1节点)
configure retention policy to recovery window of 31 days;
configure archivelog deletion policy to applied on all standby;
2.9 Switchover计划切换演练(DGMGRL,零数据丢失,两边RAC角色互换)
2+2架构switchover执行完成:旧主库RAC集群变为standby;旧备库RAC集群切换成为primary主库;两边全部维持双节点RAC架构。
validate database fgedudb_pri;
validate database fgedudb_sb;
switchover to fgedudb_sb;
show configuration;
切换完成验证:
- 原备库RAC集群两个实例open read‑write,作为新primary;
- 原主库RAC集群两个实例mount状态,作为standby;
- redo传输方向自动反转,新主库向新备库发送redo;>
需要切回原始架构,再次执行
switchover to fgedudb_pri。
2.10 Failover灾难切换演练
主库RAC集群整体彻底损坏,执行failover,存在数据丢失风险;执行完成旧主库集群不再属于DG配置,需要flashback或者RMAN重建,重新加入Broker。
failover to fgedudb_sb;
show configuration;
第二部分 环境二:Oracle26ai RHEL9 2+2 RAC‑to‑RAC DataGuard部署
主库RAC节点
fgedu‑net‑cn1、fgedu‑net‑cn2RHEL9;备库RAC节点fgedu‑net‑dg01、fgedu‑net‑dg02RHEL9;26ai传统zip介质,不使用Gold Image。
整体部署逻辑和19c大体保持一致,hosts、tnsnames、静态监听配置逻辑完全复用19c;下面描述版本差异点以及关键操作。
2.11 Oracle26ai 2+2 DG特有要点
- Oracle26ai提供
PREPARE DATABASE FOR DATA GUARD简化命令,生产建议手工逐条配置参数便于后期维护排错。 - log_archive_format必须设置
arch_%t_%s_%r.arc,适配RAC多thread归档。 - SRL standby redo log计算公式与19c完全相同;2节点RAC合计10组SRL。
- Broker配置文件必须放置ASM共享磁盘组,禁止本地文件系统。
- dg_broker_start参数RAC全部实例sid='*'全局生效。
- 多实例redo apply MIRA特性26ai完整支持。
2.11.1 26ai RAC主库关键DG参数配置
alter database force logging;
alter system set db_unique_name='fgedudb_pri' scope=spfile sid='*';
alter system set log_archive_format='arch_%t_%s_%r.arc' scope=spfile sid='*';
alter system set log_archive_config='DG_CONFIG=(fgedudb_pri,fgedudb_sb)' scope=both sid='*';
alter system set log_archive_dest_1='LOCATION=+RECO VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=fgedudb_pri' scope=both sid='*';
alter system set log_archive_dest_2='SERVICE=FGEDUDB_SB LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=fgedudb_sb COMPRESSION=ENABLE NET_TIMEOUT=30 REOPEN=15' scope=both sid='*';
alter system set fal_server='FGEDUDB_SB' scope=both sid='*';
alter system set fal_client='FGEDUDB_PRI' scope=both sid='*';
alter system set standby_file_management=AUTO scope=both sid='*';
alter system set dg_broker_start=true scope=both sid='*';
alter system set dg_broker_config_file1='+RECO/fgedudb_pri/dr1.dat' scope=spfile sid='*';
alter system set dg_broker_config_file2='+RECO/fgedudb_pri/dr2.dat' scope=spfile sid='*';
添加standby redo log组数大小规则同19c;密码文件四台节点全部同步。
2.12 Oracle26ai备库RAC集群搭建
备库RAC集群GI+DB软件已经部署完成;备库dg01节点创建pfile,spfile存放在ASM;启动dg01实例nomount,执行RMAN duplicate active database;之后dg02实例mount;备库添加10组standby redo log。
2.13 DGMGRL Broker配置、开启多实例ADG、巡检、切换
create configuration 'FGEDU_2PLUS2_26AI' as primary database is fgedudb_pri connect identifier is FGEDUDB_PRI;
add database fgedudb_sb as connect identifier is FGEDUDB_SB;
enable configuration;
show configuration;
备库两个实例open read‑only,开启多实例redo apply。switchover、failover命令与19c完全一致;临时表空间处理、RMAN归档策略逻辑不变。
上51CTO搜索风哥可以学习全套数据库教程
2.14 2+2 DG补丁运维说明
- 主库RAC集群执行opatchauto滚动RU补丁,逐个节点打补丁,全部主库节点补丁完成;
- 备库RAC集群同样执行opatchauto滚动RU补丁,主备GI、DB Home补丁版本必须严格完全一致;
- 全部二进制补丁完成,主库执行datapatch完成字典升级;
- 补丁完成校验dgmgrl show configuration状态,确认redo传输、多实例apply全部正常。
2.15 2+2 DG上线验收检查清单(两套环境通用)
- 操作系统网络:四台主机hosts解析正确;四台主机tnsnames.ora完全一致;每一台RAC节点配置DG静态SID_LIST监听;全部节点互相tnsping全部成功。
- RAC主库:FORCE LOGGING开启;归档模式开启;log_archive_format包含
%t_%s_%r;standby redo log组数大小满足计算公式;db_unique_name全局唯一;dg_broker_start=true;Broker配置文件指向ASM磁盘组;四台主机密码文件完全同步。 - Broker:dgmgrl show configuration返回SUCCESS,无warning、error。
- RAC备库ADG:两个备库实例open_mode=
READ‑ONLY WITH APPLY;gv$managed_standby多实例MRP进程正常;不同thread归档sequence持续推进;transport_lag、apply_lag接近0。 - redo同步测试:主库两个实例分别执行alter system switch logfile;备库正常接收应用两个thread归档。
- 临时表空间验证:主库创建临时表空间,备库ASM手工创建对应tempfile。
- RMAN归档删除策略配置
applied on all standby;FRA快速恢复区空间规划合理。 - 业务验证:ADG备库多实例执行查询可以读取主库提交变更。
- 完整switchover计划切换演练:切换完成两边RAC集群角色互换,两边维持双实例;redo传输方向反转;业务连通性测试。
- 文档记录:DG配置信息,switchover/failover操作手册,故障应急处置脚本,补丁回退预案。
2.16 高频故障排查
- DGMGRL报ORA‑12514/ORA‑1017:检查四台主机静态监听配置;四个RAC节点密码文件不一致,同步密码文件;TNS别名解析错误。
- transport_lag持续很大:主库log_archive_dest_2状态error;网络防火墙阻断;standby redo log缺失或者大小不对。
- 备库部分实例MRP进程异常:备库全部实例standby_file_management=AUTO;Broker配置文件配置成本地文件系统,必须修改为ASM磁盘组路径。
- switchover切换失败:部分归档没有完成应用;standby redo log组数不足;RAC实例存在未完成活动事务;spfile参数没有sid='*'全局生效,部分实例参数缺失。
- 多实例ADG只有一个实例apply日志:没有使用
instances all开启多实例redo apply。 - 临时表空间查询报错ORA‑01060:主库新增临时表空间,备库RAC没有手工在ASM创建对应tempfile。
三、风哥针对本文总结
本套风哥教程完成两套独立2+2 DG容灾实战部署;第一套Oracle19c,RHEL8,主库双节点RAC,备库双节点RAC;第二套Oracle26ai,RHEL9,主库RAC,备库RAC,26ai使用传统zip介质不启用Gold Image。覆盖2+2 MAA架构理论,RAC‑to‑RAC多thread redo、standby redo log计算公式、多实例redo apply(MIRA);网络hosts/tnsnames/静态监听、四节点密码文件同步;RMAN duplicate搭建RAC备库,多实例ADG,DGMGRL Broker配置,redo同步测试,临时表空间处理,RMAN归档保留策略,switchover计划切换、failover灾难切换,补丁运维、上线验收清单、高频故障排查。
- 2+2(RAC主库双节点 + RAC备库双节点)是Oracle MAA企业级核心业务标准容灾架构;switchover切换之后,主备两边全部维持完整双节点RAC集群,灾难切换完成不需要容忍单机运行。主库多thread,归档格式log_archive_format必须带上
%t_%s_%r,缺少%t备库无法区分不同实例归档日志;standby redo log计算公式(每个RAC实例redo组数+1)*RAC实例数,SRL大小必须和主库online redo保持完全一致。 - 2+2架构硬性约束:主备两边合计四台RAC节点密码文件必须100%完全同步;每一个RAC节点listener.ora配置DG静态SID_LIST注册;四台主机之间TNS双向tnsping全部必须成功。Broker配置文件不能存放在本地文件系统,RAC集群必须存放在ASM共享磁盘组,保证集群所有实例都可以读取Broker配置。
- 备库RAC集群支持MIRA多实例redo apply;ADG开启之后备库多个实例同时可以read‑only打开,并行执行redo日志应用,可以对外提供报表、备份业务,充分利用异地RAC集群硬件资源。
- switchover计划切换执行完成,两边RAC集群角色完整互换;原主库RAC集群转变为standby角色,原备库RAC集群提升为primary;需要恢复原始架构,再次执行switchover;failover灾难切换后旧主库RAC集群失效,需要flashback或者RMAN重建,再重新加入Broker配置。
- 临时表空间特殊行为:主库RAC新增临时表空间,备库RAC集群不会自动生成临时tempfile;DBA必须在备库ASM磁盘组手工创建对应的临时文件,否则备库业务查询报错。RMAN归档删除策略设置
CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY,归档确认全部备库应用完成之后才允许删除。 - 2+2 DG补丁运维:RAC主库执行opatchauto滚动RU补丁;备库RAC集群同样必须执行滚动RU补丁,主备GI与数据库Home补丁版本必须严格一致;二进制补丁全部完成,主库执行datapatch升级数据字典。
- Oracle26ai RAC 2+2 DG本教程使用传统zip介质部署,不使用Gold Image;大部分DG配置逻辑和19c保持兼容;26ai新增
PREPARE DATABASE FOR DATA GUARD简化命令,生产环境建议手工逐条参数配置,便于后期运维故障排查。 - DG部署完成不等于项目结束,完成全套上线验收,在测试环境完整演练switchover切换流程,编写切换操作手册、应急脚本;生产变更前务必备份密码文件、spfile,准备完整回退方案。
全部shell、SQL脚本建议读者两套独立测试环境完整复现,理解RAC‑to‑RAC 2+2容灾架构特殊约束,掌握搭建巡检切换流程,再落地企业真实核心生产MAA容灾项目。
- 点赞
- 收藏
- 关注作者
评论(0)