DB_FILE_NAME_CONVERT和LOG_FILE_NAME_CONVERT必须配对设置且顺序严格为“主库路径,备库路径”,逐字节匹配(区分大小写、空格及末尾斜杠),否则触发ORA-01111/ORA-01157;需手动创建映射后目录,ASM环境须确认磁盘组已挂载;参数仅影响新建文件,不重命名已有文件,主备库均应预先配置以防switchover失败。

路径映射参数(DB_FILE_NAME_CONVERT 和 LOG_FILE_NAME_CONVERT)必须配对设置,且顺序不能颠倒:前一个值是主库路径,后一个是备库路径;配错会导致备库无法识别新数据文件或日志文件,直接报 ORA-01111 或 ORA-01157。
DB_FILE_NAME_CONVERT 为什么必须手动校验大小写和路径格式
Oracle 对该参数值做**逐字节匹配**,不忽略空格、不自动转大小写。常见错误是主库用大写路径(如 +DG_DATA/PROD/),但参数里写成小写 +dg_data/prod/,结果备库收到建表空间请求后,在目标路径找不到对应目录,触发 ORA-19504: failed to create file。
- 主库路径必须严格等于
V$DATABASE.NAME或V$DATAFILE.FILE_NAME中实际出现的字符串(含 ASM diskgroup 别名、大小写、末尾斜杠) - 备库路径必须真实存在且 Oracle 进程有读写权限;若用 ASM,需确认 diskgroup 已挂载、别名一致
- 多个映射对用逗号分隔,建议每对单独一行便于维护,例如:
DB_FILE_NAME_CONVERT='+DG_DATA/PRIMARY/','+DG_DATA/STANDBY/','+DG_FRA/PRIMARY/','+DG_FRA/STANDBY/'
LOG_FILE_NAME_CONVERT 配置不当会卡住日志应用
该参数只影响 standby redo log(SRL)的创建路径。如果未设或设错,备库在接收主库切换日志(ALTER SYSTEM SWITCH LOGFILE)后,尝试生成 SRL 文件时失败,MRP 进程会停在 APPLYING_LOG 状态,V$MANAGED_STANDBY 中 PROCESS 显示为 MRP0、STATUS 为 WAIT_FOR_LOG,同时告警日志反复输出:ORA-00308: cannot open archived log 或 ORA-19504: failure to create file。
- 它不用于 online redo log 路径转换(那是
LOG_ARCHIVE_DEST_n的事) - 值必须与
STANDBY_FILE_MANAGEMENT=MANUAL时手工ALTER DATABASE ADD STANDBY LOGFILE所用路径逻辑一致 - RAC 环境下,不同实例可能使用不同 thread,建议统一用通配形式,例如:
'+DG_ORA/PRIMARY/','+DG_ORA/STANDBY/'
修改后必须重启 MRP 并验证 rename 行为
改完这两个参数并重启备库(或仅 ALTER SYSTEM SET ... SCOPE=SPFILE 后重启实例),不代表映射立即生效——只有后续新建的数据文件或 SRL 才走新规则。已存在的文件不会自动重命名,仍按旧路径注册在控制文件中。
- 若已有文件路径错误,需先
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=MANUAL,再ALTER DATABASE RENAME FILE 'old_path' TO 'new_path' - 改完后务必执行:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT,否则 MRP 不会加载新配置 - 验证是否生效:在主库执行
CREATE TABLESPACE ts_test DATAFILE SIZE 10M,然后查备库SELECT FILE_NAME FROM DBA_DATA_FILES WHERE TABLESPACE_NAME = 'TS_TEST',确认路径已按预期转换
最容易被忽略的是:这两个参数在主库上也得设(哪怕主库不用),因为角色切换后,原主库变备库,若没提前配置,switchover 一完成就卡住。别等故障发生才补。











