Data Guard是Oracle数据库提供的高可用性和灾难恢复解决方案,物理standby通过重做日志应用实现与主库的数据同步,是生产环境中最常用的部署方式。下面详细介绍快速搭建物理standby的完整流程。

环境准备
搭建前需要确认主备库的软硬件环境满足要求:
- 主备库Oracle数据库版本一致,建议都是企业版
- 主备库操作系统类型相同,小版本差异不影响
- 主库开启归档模式,并且开启强制日志功能
- 主备库网络互通,防火墙开放数据库监听端口
主库配置步骤
1. 开启归档和强制日志
登录主库执行以下命令:
-- 查看当前归档状态 SELECT log_mode FROM v$database; -- 如果未开启归档,先关闭数据库,启动到mount状态开启归档 SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN; -- 开启强制日志,确保所有操作都记录重做日志 ALTER DATABASE FORCE LOGGING;
2. 配置主库参数
修改主库初始化参数,添加Data Guard相关配置:
-- 设置数据库唯一名称,主备库不能相同 ALTER SYSTEM SET db_unique_name='primary_db' SCOPE=SPFILE; -- 设置日志归档目标,第一个是本地归档,第二个是备库归档 ALTER SYSTEM SET log_archive_dest_1='LOCATION=/u01/app/oracle/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=primary_db' SCOPE=SPFILE; ALTER SYSTEM SET log_archive_dest_2='SERVICE=standby_db LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby_db' SCOPE=SPFILE; -- 开启归档目标 ALTER SYSTEM SET log_archive_dest_state_1='ENABLE' SCOPE=SPFILE; ALTER SYSTEM SET log_archive_dest_state_2='ENABLE' SCOPE=SPFILE; -- 配置fal客户端和服务端 ALTER SYSTEM SET fal_client='primary_db' SCOPE=SPFILE; ALTER SYSTEM SET fal_server='standby_db' SCOPE=SPFILE; -- 重启数据库使参数生效 SHUTDOWN IMMEDIATE; STARTUP;
3. 创建主库密码文件
保证主备库使用相同的密码文件,密码文件需要包含sys用户的密码:
-- 在主机系统执行,orapwd是Oracle提供的密码文件生成工具 orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=SysPassword123 entries=10 force=y
4. 配置网络监听和服务名
修改tnsnames.ora文件,添加主备库的服务名配置:
PRIMARY_DB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.10)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = primary_db)
)
)
STANDBY_DB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.11)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = standby_db)
)
)5. 备份主库数据
使用RMAN对主库做全备,用于备库初始化:
rman target / RMAN> BACKUP DATABASE PLUS ARCHIVELOG FORMAT '/u01/backup/full_%U.bak'; RMAN> BACKUP CURRENT CONTROLFILE FOR STANDBY FORMAT '/u01/backup/standby_ctl.bak';
备库配置步骤
1. 安装Oracle软件
在备库服务器安装相同版本的Oracle数据库软件,不需要创建数据库实例。
2. 复制主库文件到备库
将主库的密码文件、备份文件、参数文件复制到备库对应目录:
-- 复制密码文件 scp $ORACLE_HOME/dbs/orapw$ORACLE_SID standby:/$ORACLE_HOME/dbs/ -- 复制备份文件 scp /u01/backup/* standby:/u01/backup/
3. 创建备库参数文件
复制主库参数文件到备库,修改相关参数:
-- 备库启动到nomount状态 STARTUP NOMOUNT PFILE='/u01/app/oracle/product/19c/dbhome_1/dbs/initstandby.ora'; -- 修改备库参数 ALTER SYSTEM SET db_unique_name='standby_db' SCOPE=SPFILE; ALTER SYSTEM SET log_archive_dest_1='LOCATION=/u01/app/oracle/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=standby_db' SCOPE=SPFILE; ALTER SYSTEM SET log_archive_dest_2='SERVICE=primary_db LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=primary_db' SCOPE=SPFILE; ALTER SYSTEM SET fal_client='standby_db' SCOPE=SPFILE; ALTER SYSTEM SET fal_server='primary_db' SCOPE=SPFILE; ALTER SYSTEM SET standby_file_management='AUTO' SCOPE=SPFILE; -- 重启备库 SHUTDOWN IMMEDIATE; STARTUP NOMOUNT PFILE='/u01/app/oracle/product/19c/dbhome_1/dbs/initstandby.ora';
4. 使用RMAN恢复备库
通过RMAN恢复备库数据和控制文件:
rman target sys/SysPassword123@primary_db auxiliary sys/SysPassword123@standby_db RMAN> DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE NOFILENAMECHECK;
5. 启动备库应用日志
恢复完成后,启动备库到只读应用日志状态:
-- 启动备库到挂载状态 ALTER DATABASE MOUNT; -- 开启实时应用日志 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
同步验证
通过以下方式验证主备同步是否正常:
- 查看主备库归档日志序列是否一致:
SELECT max(sequence#) FROM v$archived_log; - 在主库切换一次日志:
ALTER SYSTEM SWITCH LOGFILE;,查看备库是否接收到新日志 - 查看备库应用日志状态:
SELECT process, status FROM v$managed_standby;,MRP进程状态为APPLYING_LOG说明正常
注意事项
- 主备库的
db_name必须相同,db_unique_name必须不同 - 如果主备库数据文件路径不同,需要在备库参数设置
db_file_name_convert和log_file_name_convert - 密码文件的密码必须和主库一致,否则主备无法通信
- 同步过程中如果出现延迟,先检查网络带宽和归档日志是否正常传输
Data_Guard物理standbyOracle数据库主备同步修改时间:2026-06-06 23:10:36