ORA-00312
1. 简述
某客户现场,由于原有备库磁盘空间不足,要做备库切换。 实现此场景的方式,对应用影响较小的就是搭建一套新的备库。也就是实现一套主多个从库的结构。这样,应用程序只需要修改tns中的IP地址,重启应用程序即可。
但是在搭建新的备库时,出现如下问题。
2. 错误信息
ORA-00313: open failed for members of log group 9 of thread 1 ORA-00312: online log 9 thread 1: '/data/onlineredo/group_9.265.1176307293' ORA-27037: unable to obtain file status ......
报错的,不只是这一个redo文件。有很多,只是截取这一个,用来体现日志中报错信息。 下面开始分析。
3. 问题分析
先来查看下redo 文件有没有生成。遇到此问题时,第一个想到的就是 redo文件是不是没有生成,确认一下:
#ls /data/onlineredo group_14.1182.1176307327 group_15.1180.1176307327 group_16.1179.1176307331 group_17.1178.1176307333 group_18.1176.1176307337
很奇怪的事,为什么从14以后有,而14之前的没有呢。 查看下主库的配置:
SQL> select group#,thread# from v$standby_log; GROUP# THREAD# ---------- ---------- 9 1 10 1 11 1 12 1 13 1 14 2 15 2 16 2 17 2 18 2 10 rows selected.
从此发现,group 14及之后的standby redo logfiles 是属于thread 2 的。也就是说thread 1 的都没有生成。 这是很奇怪的事。因为thread 1 上也是有数据处理的,如此长时间的不提交standby redo log 一直没有想明白 。 来分析一下吧:
# 查看主库状态 SQL> col group# for a8 SQL> select process,status,group#,thread#,sequence#,block#,delay_mins from v$managed_standby order by sequence#; PROCESS STATUS GROUP# THREAD# SEQUENCE# BLOCK# DELAY_MINS --------- ------------ -------- ---------- ---------- ---------- ---------- DGRD ALLOCATED N/A 0 0 0 0 DGRD ALLOCATED N/A 0 0 0 0 DGRD ALLOCATED N/A 0 0 0 0 DGRD ALLOCATED N/A 0 0 0 0 ARCH CLOSING 5 1 4314 131072 0 ARCH CLOSING 7 1 4315 2926592 0 ARCH CLOSING 1 1 4316 3244032 0 ARCH CLOSING 5 1 4318 1 0 LNS WRITING 7 1 4319 479505 0 LNS OPENING 7 1 4319 0 0
这就是未发送归档的节点, LNS 我们可以看到是OPENING状态。 这大概率是网络不通了。。好吧,查看tns配置。发现。。。果然,tns没配置新的备库。 添加tns配置后,恢复正常。 对于redo 日志缺失这种问题,解决办法 ,就是使用clear 命令重建就可以了。
4. 解决问题
注意这里并不是从 group 9 开始的,而是从1开始的, 因为既然做么,就一次性全处理掉。免得以后想用online redo 时再处理一次。 但是单纯从这个问题的角度上来讲,group 1~8 是可以不用处理的。
alter database clear logfile group 1; alter database clear logfile group 2; alter database clear logfile group 3; alter database clear logfile group 4; alter database clear logfile group 5; alter database clear logfile group 6; alter database clear logfile group 7; alter database clear logfile group 8; alter database clear logfile group 9; alter database clear logfile group 10; alter database clear logfile group 11; alter database clear logfile group 12; alter database clear logfile group 13;
生成后,启用数据同步,并观察日志:
sqlplus / as sysdba <<EOF alter database recover managed standby database disconnect from session; EOF cd $ORACLE_BASE/diag/rdbms/<db_uniq_name>/<db_name>/trace/ tail -50f alert_<ORACLE_SID>.log 2024-09-18T22:17:35.262484+08:00 PR00 (PID:37538): Managed Standby Recovery starting Real Time Apply max_pdb is 5 2024-09-18T22:17:36.059886+08:00 Parallel Media Recovery started with 40 slaves 2024-09-18T22:17:36.119199+08:00 Stopping change tracking 2024-09-18T22:17:36.157449+08:00 TT02 (PID:37624): Waiting for all non-current ORLs to be archived 2024-09-18T22:17:36.157528+08:00 TT02 (PID:37624): All non-current ORLs have been archived 2024-09-18T22:17:36.229130+08:00
发现已经不再报错了。
但是归档缺失。无法进行数据同步,也是有点儿折磨老朽呀。
===================
天行健,君子以自强不息
地势坤,君子以厚德载物
===================