Oracle的DG环境备库数据文件创建失败导致主备不一致

2020-09-21 00:00:00 数据 文件 日志 进程 恢复

周末一个下午,接到公司领导安排说某局的一个库主备不一致了,由于备库查询功能,导致不能查到新数据,需要及时处理,当时我只能开车直接去公司有内网机器处理。其实,大家可以想想如果遇到这样的问题,该如何思考,一般是日志gap,解决Gap,这是常规的想法,其实我当时也是,下面是我的处理过程。当时情况有点紧急,对方要求尽快恢复。

1 我们查看了备库是否有日志gap,没有结果,也就是主备日志是传递过来的。

select * from v$archive_gap;

2 既然日志在备库,为何没有使用呢,我们知道这个用日志的进程有mrp进程负责,下面查新该进程

ps -ef | grep mrp

select process,status,sequence# from v$managed_standby

没有发现MRP进程,这就是问题的进一步根源,MRP异常终止。

3 查询数据库告警日志。

发现在3天前有个记录如下所示

ORA-01119: error in creating database file '+data'

ORA-17502:ksfdcre:4 Failed to create file +data

ORA-15041: diskgroup 'DATA' space exhausted

File #64 added to control file as 'unnamed00064'

Originally created as :

'+DATA/ddx/datafile/opms.325.10512334334'

Recovery was unable to create the file as : '+data'

MRP0:Background Media Recovery terminated with error 1274

ORA-01274:cannot add datafile '+DATA/ddx/datafile/opms.325.10512334334' - file could not be created

Managed Standby Recovery not using Real Time Apply

Recovery interrupted!

Recovered data files  to a consistent state at change 16458842540422

MRP0: Background Media Recovery Process shutdown (ddx)

从告警日志我们知道,主库创建了一个数据文件,但是该数据文件在备库由于空间问题没有创建成功,Oracle默认将该文件记录下控制文件中,名字为$ORACLE_HOME/dbs/unnamed00064.dbf

而该文件不存在,无法恢复。

需要做两件事

1 扩容ASM磁盘组,这个需要用户到现场去扩盘。

2 扩容后处理问题文件,重建该文件,启动MRP进程做恢复,这个过程我们详细说下

关闭数据库,启动到Mount阶段

alter system set standby_file_management=manual;

alter database create datafile '/oracle/app/oracle/product/11.2.0/dbs/UNNAMED00064' as ''+DATA/ddx/datafile/db1.dbf';

alter database open <<<<此时只读,没有Apply日志

alter database recover managed standby database using current logfile disconnect from session; <<<<< 启动MRP进程恢复数据


由于这个文件日志恢复需要3天的数据,大约恢复了30分钟,主备就一致了。

这个案例的启示: 主库和备库必须具有相同的配置,包括空间大小,我建议将convert参数也配置好,及时主备环境一致,这样号排查问题。




相关文章