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