ora-01111不是独立错误,而是“文件名缺失”的提示标签;真正原因需结合前序错误(如ora-01157或ora-00376)判断,unnamed文件必须手动重建,先停恢复、切manual模式,查主库路径后执行create datafile,再切回auto并重启mrp。

ORA-01111不是独立错误,它只是“文件名缺失”的提示标签
报错里出现 ORA-01111: name for data file 20 is unknown,说明控制文件里只存了个占位符(比如 UNNAMED00020),物理文件根本没建出来。真正要追的,是它前面那个主错误——常见的是 ORA-01157(无法识别/锁定文件)或 ORA-00376(文件当前不可读)。不查前序错误就动手改参数,大概率白忙。
先确认UNNAMED文件的真实来源
执行这条语句:SELECT FILE#, NAME, STATUS FROM V$DATAFILE WHERE FILE# = 20; —— 如果 NAME 是 UNNAMED00020,基本能断定:主库加了新数据文件,但备库没同步成功。原因通常是:
-
standby_file_management被设成了MANUAL,而你忘了手动创建 - 主库用了 ASM + OMF,但备库磁盘组路径不一致或没写权限
- 主库新增文件时,
db_file_name_convert配置漏了对应规则,导致路径转换失败 - 备库 ASM 磁盘组空间不足,MRP 进程退化为在
$ORACLE_HOME/dbs下建UNNAMED占位符
UNNAMED文件必须手动重建,AUTO模式救不了它
别指望把 standby_file_management 改回 AUTO 就能自动修复——UNNAMED 已存在,MRP 会反复卡住并报错。正确顺序是:
- 停恢复:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; - 切手动:
ALTER SYSTEM SET standby_file_management = 'MANUAL' SCOPE=BOTH; - 查主库真实路径:
SELECT FILE_NAME FROM V$DATAFILE WHERE FILE# = 20; - 在备库执行重建(注意路径匹配
db_file_name_convert规则):
非ASM:ALTER DATABASE CREATE DATAFILE '/u01/app/oracle/product/19c/db_1/dbs/UNNAMED00020' AS '/oradata/ORCL/datafile/users02.dbf';
ASM(OMF):ALTER DATABASE CREATE DATAFILE '/u01/app/oracle/product/19c/db_1/dbs/UNNAMED00020' AS NEW; - 切回AUTO:
ALTER SYSTEM SET standby_file_management = 'AUTO' SCOPE=BOTH; - 重启恢复:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
容易被忽略的两个硬性检查点
很多人修完文件还是卡住,是因为漏掉了这两个关键验证:
-
v$archive_gap返回空 ≠ 同步正常——必须查v$managed_standby确认MRP0进程状态是APPLYING_LOG,且SEQUENCE#在持续递增 - 主库
LOG_ARCHIVE_DEST_2的VALID_FOR必须含(ONLINE_LOGFILES,PRIMARY_ROLE),否则 RAC 主库角色切换后归档传输直接静默中断,后续所有文件同步都会断档











