备库归档路径必须独立于主库,log_archive_dest_1需设为专用路径(如/u02/archivelog_stby),fra也须分离(如/u01/fra_stby),且db_recovery_file_dest_size不低于20g;log_archive_config必须双向配置dg_config,db_unique_name大小写敏感,否则归档传输失败。
备库归档路径不能直接照抄主库的 log_archive_dest_1
主库和备库如果共用同一套归档配置(比如都指向 /u01/archivelog),rman 或 oracle 自动归档会尝试往相同路径写文件,但备库只读、不生成新归档,而主库传来的归档又可能因路径已存在同名文件被拒绝或覆盖——典型表现是 ora-19504: failed to create file 或归档传输卡在 archived log destination 状态。
实操建议:
-
LOG_ARCHIVE_DEST_1在备库必须显式指向独立路径,例如LOCATION=/u02/archivelog_stby,不能留空或沿用主库值 - 路径需提前创建并赋予
oracle用户读写权限,否则ALTER DATABASE RECOVER MANAGED STANDBY DATABASE启动时会静默失败 - 若使用 ASM,路径格式要匹配:主库用
+FRA/PROD/ARCHIVELOG,备库就得换 diskgroup 或加后缀,如+FRA_STBY/STBY/ARCHIVELOG
FRA 路径本身也得区分主备,不能共享 DB_RECOVERY_FILE_DEST
FRA 不只是存归档的地方,还放控制文件快照、RMAN 备份片、闪回日志。主备库共用同一个 FRA(比如都设为 /u01/fra)会导致:RMAN-03009 备份失败、ORA-19809 超限告警频发,甚至备库无法应用归档(因为 FRA 满了,归档无法落盘)。
实操建议:
- 备库的
DB_RECOVERY_FILE_DEST必须独立,推荐与主库同级目录但带标识,如/u01/fra_stby;若用 ASM,务必用不同 diskgroup 名或目录前缀 -
DB_RECOVERY_FILE_DEST_SIZE可比主库略小(毕竟备库不主动写备份),但不能低于 20G,否则归档堆积时ARCH进程会 hang 住 - 修改后需重启备库实例生效,
ALTER SYSTEM SET ... SCOPE=BOTH对 FRA 不起作用
检查归档是否真落到备库指定路径,别只信 ARCHIVE LOG LIST
ARCHIVE LOG LIST 显示的是归档目的地配置,不是实际归档位置。常见错觉是“显示 Destination: /u02/archivelog_stby 就代表归档进去了”,结果发现目录下空空如也——根本原因是主库传来的归档被备库重命名规则拦截,或路径权限不对,归档被悄悄扔进了默认 $ORACLE_HOME/dbs。
实操建议:
- 查真实归档文件位置:执行
SELECT NAME FROM V$ARCHIVED_LOG WHERE DEST_ID = 1 AND FIRST_TIME > SYSDATE - 1 ORDER BY FIRST_TIME DESC;,确认NAME字段路径是否匹配你配的LOG_ARCHIVE_DEST_1 - 手动触发一次主库日志切换(
ALTER SYSTEM SWITCH LOGFILE),再立刻在备库对应路径ls -lt,看是否有新*.arc文件生成 - 如果没出现,立刻查备库告警日志:
tail -f $ORACLE_BASE/diag/rdbms/*/alert/log.xml,搜索ORA-和arch关键字
备库开启 LOG_ARCHIVE_CONFIG 是为了防“路径混淆”,不是可选项
很多 DBA 认为备库不归档,LOG_ARCHIVE_CONFIG 配不配无所谓。但主库传归档时,会校验 DB_UNIQUE_NAME 是否在对方的 LOG_ARCHIVE_CONFIG 白名单里。如果备库没设,主库可能拒绝发送归档,现象是 V$ARCHIVE_DEST_STATUS.STATUS = ERROR,错误信息里带 ORA-16057: DGID not in LOG_ARCHIVE_CONFIG。
实操建议:
- 主备库都必须设置:主库上
LOG_ARCHIVE_CONFIG='DG_CONFIG=(PROD,STBY)',备库上对称写成'DG_CONFIG=(STBY,PROD)' - 两个库的
DB_UNIQUE_NAME必须和DG_CONFIG里的一致,大小写敏感,不能有空格 - 改完后主库执行
ALTER SYSTEM ARCHIVE LOG CURRENT,观察备库是否收到新归档,这是最短验证链
路径隔离这事看着是配几个字符串,实际卡点全在细节:备库路径权限、FRA 磁盘空间、DG_CONFIG 大小写、还有告警日志里那几行不起眼的 ORA 错误。漏掉任意一个,归档就停在半路,而且不报大错,只默默积压。










