备库看不到新数据文件只显示unnamed,根本原因是db_file_name_convert未正确配置或未生效,导致mrp进程无法映射路径而生成占位符;必须成对、精确配置该参数并重启备库,否则即使归档收到也会卡在recover状态。

备库不会自动创建新数据文件——必须靠 DB_FILE_NAME_CONVERT 显式映射路径,否则必然卡在 UNNAMED 状态,MRP 进程停摆。
为什么备库看不到新数据文件,只显示 UNNAMED
主库执行 ALTER TABLESPACE ... ADD DATAFILE 后,备库 RFS 进程能收到归档日志,但 MRP 进程应用时发现目标路径不存在、或 DB_FILE_NAME_CONVERT 未生效,就会跳过创建动作,直接生成一个占位符:/u01/app/oracle/product/11.2.0/dbhome_1/dbs/UNNAMED00008。此时 V$DATAFILE 中该文件 STATUS 为 RECOVER,NAME 是 UNNAMED 开头的路径。
- 查证命令:
SELECT FILE#, NAME, STATUS FROM V$DATAFILE WHERE NAME LIKE '%UNNAMED%'; - 根本原因不是归档没传过去,而是路径转换失败——
SHOW PARAMETER db_file_name_convert在备库返回空值或格式错误(比如漏单引号、不成对、末尾斜杠不一致) - 注意:即使主库用了 ASM(如
+DATA/orcl/datafile/users.555.1117045771),备库是文件系统,也必须靠该参数把+DATA/映射成实际目录,不能依赖DB_CREATE_FILE_DEST
DB_FILE_NAME_CONVERT 配置必须满足的硬性条件
这个参数不是“配了就行”,它对格式、顺序、大小写和路径结尾都敏感。错一处,整个转换就静默失效。
- 必须成对出现,用单引号包裹、英文逗号分隔:
'/u01/oradata/primary/', '/u01/oradata/standby/'—— 多一个空格、少一个/、引号用中文都会失败 - 主备库都要设,但只有备库的值参与转换;若用 spfile,修改后需
ALTER SYSTEM SET DB_FILE_NAME_CONVERT = '...' SCOPE=SPFILE并重启备库 - 如果主库路径含 ASM 别名(如
+DATADG1),而备库 ASM 中没有同名磁盘组,DB_FILE_NAME_CONVERT必须显式覆盖,不能指望 Oracle 自动 fallback - RMAN DUPLICATE 搭建的备库默认不生成该参数,90% 的同步中断都源于此遗漏
临时恢复同步的应急操作(仅限已发生阻塞时)
当 UNNAMED 已出现,MRP 卡住,且无法立即修正参数时,可手动补救,但必须严格按顺序执行:
- 先停恢复:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; - 切到手动管理:
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT = MANUAL; - 创建物理文件(路径必须与
DB_FILE_NAME_CONVERT期望的一致):ALTER DATABASE CREATE DATAFILE '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/UNNAMED00008' AS '/u01/oradata/standby/users02.dbf'; - 再切回自动:
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT = AUTO; - 重启恢复:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
这一步只是绕过阻塞,不代表问题根除——DB_FILE_NAME_CONVERT 仍需当天修复,否则下次加文件还会重演。
验证是否真同步成功,别只看归档序列号
很多人查 V$ARCHIVE_GAP 为空就以为 OK,其实那仅代表归档“收到了”,不等于“应用了”。真正要看的是 MRP 是否在实时推进:
- 查进程状态:
SELECT PROCESS, STATUS, SEQUENCE#, CLIENT_PROCESS FROM V$MANAGED_STANDBY WHERE PROCESS = 'MRP0';——STATUS必须是APPLYING_LOG,且SEQUENCE#应随主库增长 - 查应用延迟:
SELECT NAME, VALUE FROM V$DATAGUARD_STATS WHERE NAME IN ('apply lag', 'transport lag');—— 两值都应接近 0 - 查数据文件是否已落地:
SELECT NAME FROM V$DATAFILE WHERE NAME LIKE '%new_tbs%';—— 返回结果必须是备库本地路径,而非主库路径或UNNAMED
最常被忽略的是:参数改完没重启备库,或改了没切日志触发传输,导致你以为配好了,其实 MRP 还在用旧配置跑。











