在企业级数据库运维场景中,Oracle Data Guard是保障数据高可用的常用方案,而RMAN作为Oracle自带的备份恢复工具,能够大幅简化Data Guard备库的创建流程,避免手动复制数据文件带来的繁琐操作和潜在风险。本文将围绕利用RMAN搭建Oracle Data Guard环境的完整流程展开说明,帮助运维人员快速完成容灾架构部署。

前期环境准备
搭建前需要确认主备库的Oracle版本一致,操作系统架构相同,且主备库之间网络互通,防火墙已开放Oracle监听端口和Data Guard通信端口。同时需要规划好主备库的数据文件、日志文件路径,确保备库服务器有足够的存储空间存放主库数据。
主库配置调整
首先需要将主库设置为归档模式,这是Data Guard运行的基础,执行以下SQL语句查看归档状态:
-- 查看数据库归档模式 SELECT log_mode FROM v$database;
如果未开启归档,需要先关闭数据库,启动到mount状态后开启归档:
SHUTDOWN IMMEDIATE; STARTUP MOUNT; -- 开启归档模式 ALTER DATABASE ARCHIVELOG; -- 打开数据库 ALTER DATABASE OPEN;
接着开启主库的强制日志功能,确保所有操作都会记录到日志中,避免数据同步遗漏:
ALTER DATABASE FORCE LOGGING;
然后配置主库的Data Guard相关参数,需要设置db_unique_name区分主备库,配置log_archive_config和log_archive_dest_1、log_archive_dest_2指定归档日志路径和备库同步信息:
-- 设置主库唯一名称 ALTER SYSTEM SET db_unique_name='primary_db' SCOPE=SPFILE; -- 配置归档日志目标 ALTER SYSTEM SET log_archive_config='DG_CONFIG=(primary_db,standby_db)'; ALTER SYSTEM SET log_archive_dest_1='LOCATION=/u01/app/oracle/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=primary_db'; -- 配置备库同步目标 ALTER SYSTEM SET log_archive_dest_2='SERVICE=standby_db LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby_db'; ALTER SYSTEM SET log_archive_dest_state_2=ENABLE; -- 开启数据库闪回(可选,用于快速恢复) ALTER SYSTEM SET db_recovery_file_dest='/u01/app/oracle/fast_recovery_area' SCOPE=SPFILE; ALTER SYSTEM SET db_recovery_file_dest_size=10G SCOPE=SPFILE;
配置完成后重启主库使参数生效,同时需要为Data Guard创建独立的重做日志组,避免日志冲突:
ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/u01/app/oracle/oradata/primary/standby04.log') SIZE 500M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/u01/app/oracle/oradata/primary/standby05.log') SIZE 500M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/u01/app/oracle/oradata/primary/standby06.log') SIZE 500M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('/u01/app/oracle/oradata/primary/standby07.log') SIZE 500M;备库环境准备
备库需要安装与主库相同版本的Oracle软件,不需要创建数据库实例。需要配置备库的监听和TNS解析,确保主库可以通过TNS名称访问备库,同时创建和主库对应的目录结构,包括数据文件目录、归档日志目录、闪回恢复区目录等。
使用RMAN备份主库
在主库上使用RMAN进行全库备份,同时备份当前控制文件和参数文件,用于后续备库恢复:
-- 启动RMAN连接到主库
rman target /
-- 执行全库备份,包含归档日志
RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE DISK FORMAT '/u01/backup/full_%U';
BACKUP DATABASE PLUS ARCHIVELOG;
-- 备份控制文件用于备库
BACKUP CURRENT CONTROLFILE FOR STANDBY FORMAT '/u01/backup/standby_ctl_%U';
-- 备份参数文件
BACKUP SPFILE FORMAT '/u01/backup/spfile_%U';
RELEASE CHANNEL c1;
}备份完成后,将备份文件、控制文件备份、参数文件备份全部传输到备库对应的备份目录下,确保备库可以访问这些文件。
备库恢复与Data Guard配置
在备库服务器上,先使用RMAN恢复参数文件,创建初始化参数文件:
-- 启动RMAN到nomount状态 rman target / STARTUP NOMOUNT; -- 恢复参数文件 RESTORE SPFILE TO PFILE '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initstandby.ora' FROM '/u01/backup/spfile_xxxxxx'; -- 根据恢复后的pfile创建spfile CREATE SPFILE FROM PFILE='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/initstandby.ora'; -- 重启到nomount状态 SHUTDOWN IMMEDIATE; STARTUP NOMOUNT;
接着恢复备库控制文件,将备库启动到mount状态:
-- 恢复备库控制文件 RESTORE STANDBY CONTROLFILE FROM '/u01/backup/standby_ctl_xxxxxx'; -- 挂载备库 ALTER DATABASE MOUNT;
然后执行RMAN全库恢复,将数据文件恢复到备库指定路径:
-- 执行全库恢复
RUN {
ALLOCATE CHANNEL c1 DEVICE TYPE DISK;
RESTORE DATABASE;
RECOVER DATABASE;
RELEASE CHANNEL c1;
}恢复完成后,需要修改备库的Data Guard参数,设置备库的db_unique_name为standby_db,并配置归档日志目标:
-- 设置备库唯一名称 ALTER SYSTEM SET db_unique_name='standby_db' SCOPE=SPFILE; -- 配置归档日志目标 ALTER SYSTEM SET log_archive_config='DG_CONFIG=(primary_db,standby_db)'; ALTER SYSTEM SET log_archive_dest_1='LOCATION=/u01/app/oracle/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=standby_db'; ALTER SYSTEM SET log_archive_dest_2='SERVICE=primary_db LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=primary_db'; ALTER SYSTEM SET log_archive_dest_state_2=ENABLE; -- 设置备库应用日志的参数 ALTER SYSTEM SET standby_file_management=AUTO SCOPE=SPFILE;
重启备库使参数生效,然后启动备库的日志应用服务:
-- 重启备库 SHUTDOWN IMMEDIATE; STARTUP MOUNT; -- 开启实时日志应用 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
同步验证与状态检查
搭建完成后,需要验证主备库同步是否正常。首先在主库切换一次日志,查看备库是否接收到归档日志:
-- 主库切换日志 ALTER SYSTEM SWITCH LOGFILE;
然后在备库查询归档日志应用状态:
-- 查看备库归档应用状态 SELECT sequence#, applied FROM v$archived_log ORDER BY sequence# DESC;
如果applied列显示为YES,说明日志已经成功应用到备库。还可以查询主备库的Data Guard状态,确认同步正常:
-- 主库查询备库状态 SELECT db_unique_name, open_mode, database_role FROM v$database; -- 备库查询自身状态 SELECT db_unique_name, open_mode, database_role FROM v$database;
正常情况下,主库角色为PRIMARY,备库角色为PHYSICAL STANDBY,备库打开模式为READ ONLY WITH APPLY或者MOUNTED,说明Data Guard环境搭建成功。
常见问题说明
- 如果主备库路径不一致,需要在参数中设置
db_file_name_convert和log_file_name_convert,映射主备库的文件路径,避免恢复时报错。 - 网络不通会导致日志同步失败,需要检查主备库的TNS配置,使用
tnsping命令测试连通性。 - 备库恢复时如果提示数据文件不存在,需要检查备份文件是否完整传输,以及RMAN的备份路径是否正确。
RMANOracle_Data_Guard数据库容灾数据同步修改时间:2026-06-04 02:14:48