主库必须启用force logging和archivelog模式,否则adg无法实时应用与查询;需校验db_unique_name、log_archive_config及归档目标参数一致性,并通过rman duplicate搭建备库,启用mrp0实时应用后方可开启real-time query。
确认主库是否启用force logging和归档模式
active data guard 要求主库必须处于归档模式且开启 force logging,否则备库无法应用重做、实时查询(real-time query)会直接报错 ora-16000: database open for read-only access 或查询卡住。
- 检查归档模式:
SELECT log_mode FROM v$database;—— 必须返回ARCHIVELOG - 检查强制日志:
SELECT force_logging FROM v$database;—— 必须为YES;若否,执行ALTER DATABASE FORCE LOGGING; - 归档未启用时,需先关闭数据库(
SHUTDOWN IMMEDIATE),挂载后运行ALTER DATABASE ARCHIVELOG;,再打开 - 注意:开启
FORCE LOGGING会对主库 DML 性能产生轻微影响(尤其大量小事务),但不可跳过
配置主备库的初始化参数与网络连通性
参数不匹配是 ADG 启动失败最常见原因,尤其是 DB_UNIQUE_NAME、LOG_ARCHIVE_CONFIG 和 LOG_ARCHIVE_DEST_n 三者必须严格一致且双向可达。
-
DB_UNIQUE_NAME在主库和备库上必须不同(如主库设为orcl,备库设为orcl_stby) -
LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,orcl_stby)'需在两边都配置,顺序无关,但名称必须完全一致(区分大小写) - 主库的
LOG_ARCHIVE_DEST_2指向备库:SERVICE=orcl_stby ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl_stby - 备库的
LOG_ARCHIVE_DEST_2指向主库(用于快照备库切换或故障回切):SERVICE=orcl ASYNC VALID_FOR=(STANDBY_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=orcl - 确保
tnsnames.ora中orcl_stby和orcl服务名可解析、监听正常,用tnsping orcl_stby和sqlplus sys@orcl_stby as sysdba实测连通
使用RMAN DUPLICATE FROM ACTIVE DATABASE搭建物理备库
Oracle 19c 推荐用 DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE,无需备份恢复,但要求主库处于 OPEN 状态且已开启归档+强制日志,且备库主机上已创建好密码文件和最小初始化参数文件(含 DB_NAME、DB_UNIQUE_NAME、CONTROL_FILES)。
- 主库上生成密码文件并复制到备库:
orapwd file=$ORACLE_HOME/dbs/orapworcl_stby password=xxx entries=10 - 备库参数文件中必须设置
STANDBY_FILE_MANAGEMENT=AUTO,否则新增数据文件不会自动同步 - RMAN 命令中指定
NOFILENAMECHECK(因主备路径可能不同),并显式分配通道:ALLOCATE CHANNEL c1 DEVICE TYPE DISK; - 执行后,备库默认以 MOUNT 状态启动,此时运行
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;启动实时应用 - 验证是否启用实时应用:
SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK# FROM V$MANAGED_STANDBY WHERE PROCESS IN ('MRP0','RFS');——MRP0的STATUS应为APPLYING_LOG
开启实时查询(Real-Time Query)并验证可用性
物理备库默认只读打开后不支持查询未应用的日志块,必须启用实时应用(USING CURRENT LOGFILE)且确保备库处于 OPEN READ ONLY 状态,才能访问最新已接收但尚未应用的数据(即“准实时”)。
- 先确认备库已启动实时应用:
SELECT DATABASE_ROLE, OPEN_MODE, PROTECTION_MODE FROM V$DATABASE;—— 应为PHYSICAL STANDBY/READ ONLY WITH APPLY - 若为
READ ONLY(无 WITH APPLY),说明MRP0进程未运行,需检查ALERT.log中是否有ORA-16700或ORA-16191错误 - 查询任意表前,先查
V$DATAGUARD_STATS中apply lag和transport lag,单位为秒;理想值应 - 测试语句:
SELECT COUNT(*) FROM scott.emp;+SELECT SYSDATE FROM DUAL;对比主备时间差,确认延迟在预期范围内 - 注意:
FLASHBACK DATABASE在 ADG 备库上默认禁用,如需开启,必须先停掉 MRP 并设置DB_FLASHBACK_RETENTION_TARGET,但会增加存储开销
实际环境中,最容易被忽略的是备库监听器未配置静态注册(GLOBAL_DBNAME 设为 orcl_stby_DGMGRL),导致主库 RMAN 连接时报 ORA-12514: TNS:listener does not currently know of service requested;这个问题往往卡在第一步,却常被误判为网络不通。










