数据库教程FGMT24‑Oracle RAC+DG生产实战(4):Oracle19c/26ai RAC DataGuard搭建2+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远同步实例打下基础。
本套风哥教程面向DBA、数据库架构师、容灾实施运维工程师;两套环境硬件规格均为每节点64G物理内存,8颗逻辑CPU;风哥教程本文分为前言大纲、核心理论知识、实战操作演练、风哥针对本文总结四大模块;实战章节包含大量可直接复制shell、SQL脚本,读者可以在两套独立测试环境完整复现DG搭建、切换、运维全流程。
### 内容大纲
1. Oracle 2+2 RAC‑to‑RAC DataGuard架构整体规划,两套独立环境硬件网络存储说明,19c与26ai DG版本差异
2. 2+2架构核心理论:主备两边均RAC集群、多thread redo、多实例redo apply、standby redo log计算规则
3. FORCE LOGGING强制日志、补充日志、db_unique_name全局唯一性、Broker在RAC‑to‑RAC环境约束,Broker配置文件ASM共享存储存放
4. 初始化参数详解:log_archive_format必须包含%t_%s_%r、log_archive_config、log_archive_dest_n、FAL_SERVER/FAL_CLIENT、转换参数、standby_file_management
5. 网络规划:全部四个节点hosts、TNS双向连通,每一个RAC节点配置DG静态监听注册;密码文件在主库全部节点、备库全部节点完整同步
6. 第一套环境实战:Oracle19c RHEL8 2+2 DG完整部署,RAC主库参数配置,RMAN duplicate创建RAC备库,开启多实例ADG,DGMGRL Broker配置
7. Oracle19c 2+2 DG日常巡检,redo同步验证,临时表空间处理,RMAN归档保留策略,switchover计划切换、failover灾难切换完整演练
8. 第二套环境实战:Oracle26ai RHEL9 2+2 DG部署,传统zip介质,RAC主库配置,duplicate搭建RAC备库,Broker配置,26ai版本特有变更
9. 2+2 DG补丁运维说明,RAC主库滚动RU补丁,RAC备库滚动RU补丁操作要点
10. 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架构核心技术要点
1. **FORCE LOGGING强制日志**:主库RAC必须开启FORCE LOGGING,防止nologging操作生成不完整redo,同步到备库造成数据逻辑损坏。
2. **Standby Redo Log(SRL)备库重做日志**:主库2节点RAC,每个实例4组online redo,计算公式`SRL=(每个实例redo组数+1)*实例数量`,所以SRL=(4+1)*2=10组;**备库RAC集群每一个thread都必须创建对应SRL**,SRL文件大小必须和主库online redo大小完全保持一致。
3. **db_unique_name全局唯一**:DG配置域内,主库db_unique_name=fgedudb_pri,备库db_unique_name=fgedudb_sb,全局不能重复;RAC集群所有实例共享同一个db_unique_name,spfile sid=’*’全局设置。
4. **log_archive_format归档格式**:RAC环境归档格式必须设置`arch_%t_%s_%r.arc`;`%t`代表thread编号,区分不同RAC实例生成归档;`%s`序列号;`%r`resetlogs ID,缺少%t备库无法识别多thread归档日志。
5. **Broker配置文件存放ASM磁盘组**:主库RAC所有实例访问同一套ASM,dg_broker_config_file1/2必须指向ASM磁盘组路径;备库RAC同样Broker配置文件存放在备库ASM磁盘组;不能存放在本地文件系统,否则RAC第二个实例无法读取Broker配置,引发Broker异常。
6. **TNS网络双向全连通**:主库cn1、cn2,备库dg01、dg02,**四个节点之间全部TNS双向tnsping必须成功**;每一个RAC节点listener.ora配置DG需要的静态SID_LIST注册,用于redo传输与DGMGRL连接。
7. **密码文件全节点同步**:主库两个RAC节点密码文件保持完全一致;完整拷贝同步至备库RAC两个节点;密码修改后,四个节点密码文件全部同步更新,否则redo传输报ORA‑1017认证失败。
8. **多实例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架构;
1. 主库RAC所有实例参数`dg_broker_start=true scope=both sid=’*’`;备库RAC全部实例同样开启dg_broker_start。
2. Broker配置文件必须存放在各自主备库ASM共享磁盘组,不能使用本地文件系统。
3. switchover操作,主库任意节点dgmgrl执行;Broker自动处理两边RAC实例启停、角色转换;切换完成两边RAC集群角色互换,两边维持双实例RAC架构。
4. failover灾难切换之后,旧主库RAC集群失效,需要flashback或者RMAN重建之后,再重新加入Broker配置。
### 1.4 ADG活动数据卫士多实例模式
备库RAC集群开启ADG,备库多个实例可以同时open read‑only,同时执行多实例redo apply;备库RAC集群可以对外提供多节点报表、查询、RMAN备份业务,充分利用异地集群硬件资源。
### 1.5 关键初始化参数解析
1. `LOG_ARCHIVE_CONFIG=’DG_CONFIG=(fgedudb_pri,fgedudb_sb)’`:DG域内全部db_unique_name,sid=’*’对RAC全部实例生效。
2. `LOG_ARCHIVE_DEST_1`:主库本地归档,指向主库ASM RECO磁盘组,`VALID_FOR=(ALL_LOGFILES,ALL_ROLES)`,角色切换之后作为备库同样生效。
3. `LOG_ARCHIVE_DEST_2`:指向备库RAC SCAN TNS服务名,LGWR ASYNC异步传输;生产2+2架构普遍采用异步模式。
4. `FAL_SERVER / FAL_CLIENT`:FAL归档缺失自动抓取;主库FAL_SERVER填写备库SCAN服务;备库FAL_SERVER填写主库SCAN服务。
5. `DB_FILE_NAME_CONVERT / LOG_FILE_NAME_CONVERT`:主库ASM路径映射备库ASM路径;备库端设置。
6. `STANDBY_FILE_MANAGEMENT=AUTO`:备库自动管理新增数据文件,禁止设置manual。网上搜索风哥教程可以学习全套数据库教程
### 1.6 2+2 RAC‑to‑RAC DG高频故障点
1. Broker配置文件放在本地文件系统,RAC第二个实例读取不到配置,DGMGRL报错。
2. 四个节点密码文件不一致,redo传输报ORA‑1017账号密码认证错误。
3. 缺少每个thread对应的standby redo log,redo传输报错。
4. log_archive_format参数缺少%t,RAC多thread归档备库识别异常。
5. 任意节点缺少静态监听SID_LIST注册,DGMGRL连接失败。
6. switchover切换之后部分RAC实例mount失败,spfile参数没有sid=’*’全局生效。
7. 主库新增临时表空间,备库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‑cn2` RHEL8;备库RAC节点`fgedu‑net‑dg01`、`fgedu‑net‑dg02` RHEL8;主库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‑cn2` RHEL9;备库RAC节点`fgedu‑net‑dg01`、`fgedu‑net‑dg02` RHEL9;传统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;
“`
切换完成验证:
1. 原备库RAC集群两个实例open read‑write,作为新primary;
2. 原主库RAC集群两个实例mount状态,作为standby;
3. 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‑cn2` RHEL9;备库RAC节点`fgedu‑net‑dg01`、`fgedu‑net‑dg02` RHEL9;26ai传统zip介质,不使用Gold Image。
> 整体部署逻辑和19c大体保持一致,hosts、tnsnames、静态监听配置逻辑完全复用19c;下面描述版本差异点以及关键操作。
## 2.11 Oracle26ai 2+2 DG特有要点
1. Oracle26ai提供`PREPARE DATABASE FOR DATA GUARD`简化命令,生产建议手工逐条配置参数便于后期维护排错。
2. log_archive_format必须设置`arch_%t_%s_%r.arc`,适配RAC多thread归档。
3. SRL standby redo log计算公式与19c完全相同;2节点RAC合计10组SRL。
4. Broker配置文件必须放置ASM共享磁盘组,禁止本地文件系统。
5. dg_broker_start参数RAC全部实例sid=’*’全局生效。
6. 多实例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补丁运维说明
1. 主库RAC集群执行opatchauto滚动RU补丁,逐个节点打补丁,全部主库节点补丁完成;
2. **备库RAC集群同样执行opatchauto滚动RU补丁,主备GI、DB Home补丁版本必须严格完全一致**;
3. 全部二进制补丁完成,主库执行datapatch完成字典升级;
4. 补丁完成校验dgmgrl show configuration状态,确认redo传输、多实例apply全部正常。
## 2.15 2+2 DG上线验收检查清单(两套环境通用)
1. 操作系统网络:四台主机hosts解析正确;四台主机tnsnames.ora完全一致;每一台RAC节点配置DG静态SID_LIST监听;全部节点互相tnsping全部成功。
2. RAC主库:FORCE LOGGING开启;归档模式开启;log_archive_format包含`%t_%s_%r`;standby redo log组数大小满足计算公式;db_unique_name全局唯一;dg_broker_start=true;Broker配置文件指向ASM磁盘组;四台主机密码文件完全同步。
3. Broker:dgmgrl show configuration返回SUCCESS,无warning、error。
4. RAC备库ADG:两个备库实例open_mode=`READ‑ONLY WITH APPLY`;gv$managed_standby多实例MRP进程正常;不同thread归档sequence持续推进;transport_lag、apply_lag接近0。
5. redo同步测试:主库两个实例分别执行alter system switch logfile;备库正常接收应用两个thread归档。
6. 临时表空间验证:主库创建临时表空间,备库ASM手工创建对应tempfile。
7. RMAN归档删除策略配置`applied on all standby`;FRA快速恢复区空间规划合理。
8. 业务验证:ADG备库多实例执行查询可以读取主库提交变更。
9. 完整switchover计划切换演练:切换完成两边RAC集群角色互换,两边维持双实例;redo传输方向反转;业务连通性测试。
10. 文档记录:DG配置信息,switchover/failover操作手册,故障应急处置脚本,补丁回退预案。
## 2.16 高频故障排查
1. DGMGRL报ORA‑12514/ORA‑1017:检查四台主机静态监听配置;四个RAC节点密码文件不一致,同步密码文件;TNS别名解析错误。
2. transport_lag持续很大:主库log_archive_dest_2状态error;网络防火墙阻断;standby redo log缺失或者大小不对。
3. 备库部分实例MRP进程异常:备库全部实例standby_file_management=AUTO;Broker配置文件配置成本地文件系统,必须修改为ASM磁盘组路径。
4. switchover切换失败:部分归档没有完成应用;standby redo log组数不足;RAC实例存在未完成活动事务;spfile参数没有sid=’*’全局生效,部分实例参数缺失。
5. 多实例ADG只有一个实例apply日志:没有使用`instances all`开启多实例redo apply。
6. 临时表空间查询报错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灾难切换,补丁运维、上线验收清单、高频故障排查。
1. 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+2架构硬性约束:**主备两边合计四台RAC节点密码文件必须100%完全同步**;每一个RAC节点listener.ora配置DG静态SID_LIST注册;四台主机之间TNS双向tnsping全部必须成功。Broker配置文件不能存放在本地文件系统,RAC集群必须存放在ASM共享磁盘组,保证集群所有实例都可以读取Broker配置。
3. 备库RAC集群支持MIRA多实例redo apply;ADG开启之后备库多个实例同时可以read‑only打开,并行执行redo日志应用,可以对外提供报表、备份业务,充分利用异地RAC集群硬件资源。
4. switchover计划切换执行完成,两边RAC集群角色完整互换;原主库RAC集群转变为standby角色,原备库RAC集群提升为primary;需要恢复原始架构,再次执行switchover;failover灾难切换后旧主库RAC集群失效,需要flashback或者RMAN重建,再重新加入Broker配置。
5. 临时表空间特殊行为:主库RAC新增临时表空间,备库RAC集群不会自动生成临时tempfile;DBA必须在备库ASM磁盘组手工创建对应的临时文件,否则备库业务查询报错。RMAN归档删除策略设置`CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY`,归档确认全部备库应用完成之后才允许删除。
6. 2+2 DG补丁运维:RAC主库执行opatchauto滚动RU补丁;**备库RAC集群同样必须执行滚动RU补丁,主备GI与数据库Home补丁版本必须严格一致**;二进制补丁全部完成,主库执行datapatch升级数据字典。
7. Oracle26ai RAC 2+2 DG本教程使用传统zip介质部署,不使用Gold Image;大部分DG配置逻辑和19c保持兼容;26ai新增`PREPARE DATABASE FOR DATA GUARD`简化命令,生产环境建议手工逐条参数配置,便于后期运维故障排查。
8. DG部署完成不等于项目结束,完成全套上线验收,在测试环境完整演练switchover切换流程,编写切换操作手册、应急脚本;生产变更前务必备份密码文件、spfile,准备完整回退方案。
全部shell、SQL脚本建议读者两套独立测试环境完整复现,理解RAC‑to‑RAC 2+2容灾架构特殊约束,掌握搭建巡检切换流程,再落地企业真实核心生产MAA容灾项目。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
