异常

在从库发现DG同步有延迟时执行recover失败,后台日志会报如下异常:

根据源端地址和本地数据文件存放路径,整理语句如下:

alter system set STANDBY_FILE_MANAGEMENT='MANUAL' scope=both;
alter database rename file '/data/app/oracle/product/11.2.0/dbhome_1/dbs/UNNAMED00243' to '/data/app/oracle/oradata/PSPROD/PSPRODDG/datafile/o1_mf_gpapp_h4dnw6m6_.dbf'

此时报错如下:

此时需要注意,o1_mf_gpapp_h4dnw6m6_.dbf,这种命名数据文件的方式很奇怪,一般这种方式多出现在ASM磁盘中,由数据库定义名称,此时我就想到了OMF,查看相关参数,确认此库为OMF管理方式管理数据文件。

此处验证证明了我的猜想,所以修改语句重新执行,修复了此问题。


alter database create datafile '/data/app/oracle/product/11.2.0/dbhome_1/dbs/UNNAMED00243' as new;
alter system set STANDBY_FILE_MANAGEMENT='AUTO' scope=both;

分析

在备用数据库中创建文件为UNNAMED的原因有很多,此次是因为备库上的磁盘空间不足导致的。

STANDBY_FILE_MANAGEMENT 在启用自动备用文件管理后,将在备用数据库上复制主数据库上的操作系统文件添加和删除。此时,我们在主服务器上添加数据文件,而恢复过程(MRP)正在尝试应用存档,由于该参数设置,它将在$ ORACLE_HOME / dbs中创建一个未命名的文件将导致杀死MRP进程,错误如下所示。

当数据库由OMF管理时,修改路径时可以使用 new 来代替路径的位置,修改 redo 除外。