大家好,我是JiekeXu,江湖人称“强哥”,青学会MOP技术社区主席,荣获Oracle ACE Pro称号,金仓社区最具价值倡导者KVA,崖山最具价值专家YVP,IvorySQL开源社区专家顾问委员会成员,KWDB社区MVP,墨天轮MVP,墨天轮年度“墨力之星”,拥有Oracle OCP/OCM认证,MySQL 5.7/8.0 OCP认证以及金仓KCA、KCP、KCM、KCSM证书,PCA、PCTA、OBCA、OGCA等众多国产数据库认证证书,欢迎关注我的微信公众号“JiekeXu DBA之路”,然后点击右上方三个点“设为星标”置顶,更多干货文章才能第一时间推送,谢谢!

前 言
这样的问题今年已经出现了两次同样的问题了,虽然比较简单,但还是要简单记录一下,算是有坑,希望可以帮助到后来人。Oracle 表空间告警扩容是一个非常简单的事情,几乎每个 DBA 都会,但估计有一大半的 DBA 都犯过错。比如 RAC 添加表空间文件错误的加到本地文件系统,RAC 主库添加完备库因空间不足未同步等,还有我这种主备库空间均充足,但因 convert 参数导致的主备同步中断问题还是比较少的。
问题过程
给 Oracle RAC 主库扩容表空间时,直接对其新增一个数据文件,但谁曾想,直接导致备库同步中断,出现了告警事件。
SQL> @cat_tbs.sql
TABLESPACE_NAME Total g Free g USED%
------------------------------ ---------- ---------- ----------
CC_DATA 3540 180 94.92
alter tablespace CC_DATA add datafile '+DATA' size 30G;
结果导致一个备库和灾备库 MRP0 同步进程中断,但另外一个备库正常同步。查看此备库 alert 日志,不能够创建 ‘+DATA’ 的数据文件, MRP0 进程异常中断,很显然,这是主库给表空间扩容时,添加了一个数据文件因为 convert 转换错误没有同步到备库所致。
2025-11-21T17:33:19.025804+08:00 Errors in file /u01/app/oracle/diag/rdbms/jiekexudg/JIEKEXUDB/trace/JIEKEXUDB_pr00_70497.trc: ORA-01119: error in creating database file '+DATA' ORA-17502: ksfdcre:4 Failed to create file +DATA ORA-15001: diskgroup "DATA" does not exist or is not mounted ORA-29701: unable to connect to Cluster Synchronization Service ORA-15001: diskgroup "DATA" does not exist or is not mounted ORA-29701: unable to connect to Cluster Synchronization Service ORA-15001: diskgroup "DATA" does not exist or is not mounted ORA-29701: unable to connect to Cluster Synchronization Service 2025-11-21T17:33:19.025857+08:00 File #235 added to control file as 'UNNAMED00235'. Originally created as: '+DATA/JIEKEXU/DATAFILE/cc_data.532.1217784759' Recovery was unable to create the file as: '+DATA' PR00 (PID:70497): MRP0: Background Media Recovery terminated with error 1274 2025-11-21T17:33:19.055748+08:00 Errors in file /u01/app/oracle/diag/rdbms/jiekexudg/JIEKEXUDB/trace/JIEKEXUDB_pr00_70497.trc: ORA-01274: cannot add data file that was originally created as '+DATA/JIEKEXU/DATAFILE/cc_data.532.1217784759' PR00 (PID:70497): Managed Standby Recovery not using Real Time Apply
为何会出现这种 convert 转换问题呢,是因为上个月底这套环境进行了一次主备切换,两套 RAC 主备切换后,此单机文件系统的备库作为新主库的备库继续提供服务,但因切换后的新主库没有使用 OMF 自动管理数据文件,通过 convert 参数来管理,主备切换后,新主的 convert 参数没有此单机文件系统备库的 convert 信息,主要还是此单机文件系统备库的 convert 参数还是原来主库的信息,这就导致了在新主库上添加数据文件报错上面无法 convert 转换,控制文件中出现了 ‘UNNAMED00235’ 这样的文件名,但实际路径中也没有生成这个文件。
解决过程
‘UNNAMED00235’ 说明生成的文件 ID 为 235,然后,去主库查看确认刚添加的数据文件师 ID 为 235 的数据文件。
SQL> select file_id,file_name from dba_data_files where tablespace_name='CC_DATA' and file_name='+DATA/JIEKEXU/DATAFILE/cc_data.532.1217784759';
FILE_ID FILE_NAME
---------- -----------------------------------------------------------------------------
235 +DATA/JIEKEXU/DATAFILE/cc_data.532.1217784759
在备库查看此数据文件状态为’RECOVER’,创建时间也基本吻合,并且显示存在于 dbs 目录下,但实际上没有生成,仅在控制文件中名为 “UNNAMED00235”;
SQL> select file#,status,name,CREATION_TIME,online_time from v$datafile where status='RECOVER' and FILE#=235;
FILE# STATUS NAME CREATION_TIME ONLINE_TIME
---------- ------- --------------------------------------------------------------------------------------------------- ------------------- -------------------
235 RECOVER /u01/app/oracle/product/19.0.0/dbhome_1/dbs/UNNAMED00235 2025-11-21 17:33:15
此时尝试重启数据库发现此备库已经无法正常 open,数据文件 235 存在异常,那么为何会出现这种情况呢?继续往下看吧。
SQL> shu immediate
SQL> alter database mount;
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-10458: standby database requires recovery
ORA-01157: cannot identify/lock data file 235 - see DBWR trace file
ORA-01111: name for data file 235 is unknown - rename to correct file
ORA-01110: data file 235:
'/u01/app/oracle/product/19.0.0/dbhome_1/dbs/UNNAMED00235'
上一小结也说过了,一般情况下是主库数据文件添加到本地并非是 ASM 引起的,或者主库添加成功,备库空间不足了,或者同步到备库出现了转换上的问题,使用 OMF 自动转换,使用 convert 转换如果参数配置不正确就会出现这种情况,因我这里已经在半年的时间里出现了两次了,故这里记录一下,免得后面再犯同样的错误。
备库查看参数,这里均没有使用 OMF 管理,原因是之前使用 OMF 时通过 from service 增量恢复备库时却是全库恢复了,故这里设置成 convert 参数避免 ADG 备库通过 from service 导致的全库恢复。
SQL> show parameter db_create_file_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string
SQL> show parameter convert
db_file_name_convert string +DATA/JIEKEXUDB/datafile, /data/JIEKEXUDB/datafile, +DATA/JIEKEXUDB/tempfile, /data/JIEKEXUDB/tempfile
log_file_name_convert string +REDO/JIEKEXUDB/onlinelog, /data/JIEKEXUDB/onlinelog/redo
查看参数发现此单机文件系统备库的值还是原主库的参数路径,这里需要将其修改为现主库地址转换,重启数据库生效。当然如果备库不能重启,那么也可以继续启用 OMF 使用参数 db_create_file_dest 来进行转换。
alter system set db_file_name_convert='+DATA/JIEKEXU/DATAFILE','/data/JIEKEXUDB/datafile' scope=spfile;
alter system set log_file_name_convert='+ARCH/JIEKEXU/ONLINELOG','/data/JIEKEXUDB/onlinelog/redo','+DATA/JIEKEXU/ONLINELOG','/data/JIEKEXUDB/onlinelog/redo' scope=spfile;
重启后正常的参数值如下:
22:10:03 SYS@JIEKEXUDB> show parameter db_create_file_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string
22:10:04 SYS@JIEKEXUDB> show parameter convert
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_file_name_convert string +DATA/JIEKEXU/DATAFILE, /data/jxr
tdb/datafile
log_file_name_convert string +ARCH/JIEKEXU/ONLINELOG, /data/jx
rtdb/onlinelog/redo, +DATA/JXR
T/ONLINELOG, /data/JIEKEXUDB/onli
nelog/redo
pdb_file_name_convert string
因为 MRP0 刚刚中断,归档日志都还在,所以直接通过 create datafile 来创建此数据文件。
SQL> alter database create datafile 235;
alter database create datafile 235
*
ERROR at line 1:
ORA-01275: Operation CREATE DATAFILE is not allowed if standby file management
is automatic.
SQL> show parameter standby
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
enabled_PDBs_on_standby string *
standby_db_preserve_states string NONE
standby_file_management string AUTO
standby_pdb_source_file_dblink string
standby_pdb_source_file_directory string
SQL>
SQL> alter system set standby_file_management=MANUAL;
System altered.
SQL> show parameter standby
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
enabled_PDBs_on_standby string *
standby_db_preserve_states string NONE
standby_file_management string MANUAL
standby_pdb_source_file_dblink string
standby_pdb_source_file_directory string
将参数 standby_file_management 修改为手动管理后直接创建报错,那么需要使用 <alter database create datafile ‘错误的路径UNNAMED00235’ as ‘正确的路径下的文件’> 这样的语法来创建即可。
SQL> alter database create datafile 235;
alter database create datafile 235
*
ERROR at line 1:
ORA-01111: name for data file
/u01/app/oracle/product/19.0.0/dbhome_1/dbs/UNNAMED00235 is unknown - rename to correct file
SQL> alter database create datafile '/u01/app/oracle/product/19.0.0/dbhome_1/dbs/UNNAMED00235' as '/data/JIEKEXUDB/datafile/cc_data.512.1213026931';
Database altered.
--修改为 AUTO 自动
SQL> alter system set standby_file_management=AUTO;
启动 MRP0 进程继续同步
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;
set linesize 150;
set pagesize 20;
column name format a13;
column value format a20;
column unit format a30;
column TIME_COMPUTED format a30;
select name,value,unit,time_computed from v$dataguard_stats where name in ('transport lag','apply lag');
SELECT PROCESS, STATUS,SEQUENCE#,thread#,blocks,block# FROM V$MANAGED_STANDBY;
SQL> SELECT PROCESS, STATUS,SEQUENCE#,thread#,block#,blocks FROM V$MANAGED_STANDBY;
PROCESS STATUS SEQUENCE# THREAD# BLOCK# BLOCKS
--------- ------------ ---------- ---------- ---------- ----------
ARCH CONNECTED 0 0 0 0
DGRD ALLOCATED 0 0 0 0
DGRD ALLOCATED 0 0 0 0
ARCH CONNECTED 0 0 0 0
ARCH CONNECTED 0 0 0 0
ARCH CONNECTED 0 0 0 0
MRP0 WAIT_FOR_LOG 475160 1 0 0
7 rows selected.
MRP0 WAIT_FOR_LOG 482072 2 0 0
其他注意事项
- 有的时候主备切换后,新备库不会继续向级联灾备库自动传递日志,或者备库的日志已经被删除了,那么需要将主库的归档日志复制到灾备库然后手动重新注册一下。
jiekexu-r1:/home/grid(+ASM1)$ asmcmd cp +ARCH/JIEKEXUDB/ARCHIVELOG/2025_11_21/thread_1_seq_475160.1175.1217789667 /tmp
copying +ARCH/JIEKEXUDB/ARCHIVELOG/2025_11_21/thread_1_seq_475160.1175.1217789667 -> /tmp/thread_1_seq_475160.1175.1217789667
scp /tmp/thread_1_seq_475160.1175.1217789667 灾备IP:192.168.32.11:/data/arch
chown oracle:oinstall /data/arch/thread_1_seq_475160.1175.1217789667
--SQL
alter database register logfile '/data/JIEKEXUDB/archivelog/thread_1_seq_475160.1175.1217789667';
alter database register logfile '/data/JIEKEXUDB/archivelog/thread_2_seq_482072.1044.1217789721';
alter database register logfile '/data/JIEKEXUDB/archivelog/thread_1_seq_475161.4225.1217789779';
alter database register logfile '/data/JIEKEXUDB/archivelog/thread_2_seq_482073.5936.1217789881';
- 主备切换后其他备库不同步
原来的一主两备架构的 Oracle RAC 库,当进行两套 RAC 主备切换后,另一单机文件系统备库无法正常同步,查看 alert 日志均正常,网络访问也正常,监听日志也正常,最后才发现是 log_archive_dest_2 参数搞的鬼。原主库配置的 log_archive_dest_2 参数如下:
log_archive_dest_2 string SERVICE=jiekexudg LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=JIEKEXUDB
VALID_FOR=(redo_log_type, database_role): 基于以下因素,识别重做传输服务何时可以将重做数据传输到目的地:
redo_log_type——是否在线重做日志文件、备用重做日志文件或两者目前正在此目的地的数据库上归档;
database_role——数据库当前运行在主角色还是备用角色;
VALID_FOR 属性是可选的。 但是,Oracle 建议在 Oracle Data Guard 配置中为每个数据库的每个重做传输目的地指定 VALID_FOR 属性,以便在角色转换到配置中的任何备用数据库后,重做传输继续进行 。
要为每个LOG_ARCHIVE_DEST_n 目的地配置这些因素,您可以使用一对关键字指定该属性:
redo_log_type 关键字将目标标识为有效的归档以下其中之一
- online_logfile 仅在归档在线重做日志文件时有效。
- standby_logfile 仅在归档备重做日志文件时有效。
- ALL_LOGFILES 当归档在线重做日志文件或备用重做日志文件时,此目标文件有效。
database_role 关键字标识该目标在其中有效存档的角色:
- primary_role该目标仅在数据库以主角色运行时有效。
- standby_role该目标仅在数据库运行在备用角色时有效。
- all_roles 当数据库以主角色或备用角色运行时,此目标是有效的。
如果没有为目标指定 VALID_FOR 属性,默认情况下,在目标上启用归档在线重做日志文件和备用重做日志文件,而不管数据库是运行在主角色还是备用角色。 这个默认行为等同于在 VALID_FOR 属性上设置 (ALL_LOGFILES,ALL_ROLES) 关键字对。
那么是什么意思呢?我这里设置的是 (ONLINE_LOGFILES,PRIMARY_ROLE),当他切换为备库角色后,他在这里就不生效了,我们需要将其修改为备库角色才能正常同步。
SQL> alter system set log_archive_dest_2='SERVICE=jiekexudg ASYNC VALID_FOR=(ONLINE_LOGFILES,STANDBY_ROLE) DB_UNIQUE_NAME=JIEKEXUDBADG COMPRESSION=ENABLE' scope=both sid='*';
SQL> show parameter log_archive_dest_2
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_2 string SERVICE=jiekexudg ASYNC VALID
_FOR=(ONLINE_LOGFILES,STANDBY_
ROLE) DB_UNIQUE_NAME=JIEKEXUDB
ADG COMPRESSION=ENABLE
全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~
欢迎关注我的公众号【JiekeXu DBA之路】,一起学习新知识!
——————————————————————————
公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
ITPUB:https://blog.itpub.net/69968215
腾讯云:https://cloud.tencent.com/developer/user/5645107
——————————————————————————





