首页 > 代码库 > Oracle异常ORA-00210,ORA-00202故障处理

Oracle异常ORA-00210,ORA-00202故障处理

早上刚上班,跟往常一样,支起电脑支架,打开电脑,有种战争片里边,回归阵地,架起机关枪,准备迎敌的仪式感。

一切都那么熟悉,在启动测试环境的时候,开发的声音打破了办公室的清静:“公司XXX系统的数据库是不是挂了!!!”

听完习惯性的一身冷汗!囧!!!

赶紧打开相关工具,连上服务器确认情况:

[oracle@xxxxDb ~]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.4.0 Production on Thu Jul 13 09:11:29 2017Copyright (c) 1982, 2013, Oracle.  All rights reserved.Connected to:Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL> select open_mode from v$database;  select open_mode from v$database*ERROR at line 1:ORA-00210: cannot open the specified control fileORA-00202: control file:‘/home/oracle/u01/app/oracle/fast_recovery_area/orcl/control02.ctl‘ORA-27041: unable to open fileLinux-x86_64 Error: 2: No such file or directoryAdditional information: 3

果然数据库状态不正常,提示不能打开控制文件,找不到相关文件路径。

DBA就是这样,平常系统正常的时候,大家往往会忽略你的存在,但是一旦系统出现问题,又像是充当着救火队员!!!

回归正题,正常的处理流程,我们接下来需要去查看相关的告警日志,找出异常信息:

先查看alter日志:
一般告警日志的存放路径可以通过如下命令查询:

SQL> show parameter background_dump_dest

pwd
/home/oracle/u01/app/oracle/diag/rdbms/orcl/orcl/alert   ---注:这里注释的敏感信息,参考的时候,以自己实际环境为准。

<msg time=‘2017-07-12T18:06:52.299+08:00‘ org_id=‘XXXX‘ comp_id=‘XXXX‘ type=‘UNKNOWN‘ level=‘16‘ host_id=‘xxxxDb‘ host_addr=‘这里是服务器IP地址‘> <txt>    nt OS err code: 0 </txt></msg><msg time=‘2017-07-12T18:06:52.299+08:00‘ org_id=‘XXXX‘ comp_id=‘XXXX‘ type=‘UNKNOWN‘ level=‘16‘ host_id=‘xxxxDb‘ host_addr=‘这里是服务器IP地址‘> <txt>  Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=远程客户端的IP地址,例如:192.168.1.111)(PORT=58310)) </txt></msg><msg time=‘2017-07-12T18:06:59.902+08:00‘ org_id=‘XXXX‘ comp_id=‘XXXX‘ client_id=‘‘ type=‘UNKNOWN‘ level=‘16‘ host_id=‘xxxxDb‘ host_addr=‘这里是服务器IP地址‘ module=‘MMON_SLAVE‘ pid=‘26750‘> <txt>Errors in file /home/oracle/u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_m000_26750.trc:ORA-00210: 无法打开指定的控制文件ORA-00202: 控制文件: ‘‘/home/oracle/u01/app/oracle/fast_recovery_area/orcl/control02.ctl‘‘ORA-27041: 无法打开文件Linux-x86_64 Error: 2: No such file or directoryAdditional information: 3 </txt></msg>

从上述文件中,可以大概看到是在7月12日18:06的时候出现的“控制文件找不到的相关报错信息”
有趣的是,里边有一个客户端连接Client address 可以看到IP地址,这时候还有点兴奋:终于找到你了,是不是有人在恶意攻击,然后一查该IP地址,居然是公司的IP,
尴尬了,自己人啊,于是问开发,昨天下午6点的时候,有没有人对数据库进行过操作,得到的回复是,没有进行其他操作,只是进行了简单的查询和更新操作!!!

哎,不说了!!! 心想还是,抓紧处理故障吧!

再根据日志中提到的信息,查看trc文件:

/home/oracle/u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_m000_22241.trc:ORA-00210: 无法打开指定的控制文件ORA-00202: 控制文件: ‘‘/home/oracle/u01/app/oracle/fast_recovery_area/orcl/control02.ctl‘‘ORA-27041: 无法打开文件

大概知道问题想象之后,首先需要尽快恢复业务,然后再寻找出现故障的原因!
根据日志报错信息,可以确定是控制文件的问题,那么,我们先查看一下数据库里边的控制文件有哪些:

SQL> show parameter control_fileNAME				     TYPE	 VALUE------------------------------------ ----------- ------------------------------control_file_record_keep_time	     integer	 7control_files			     string	 /home/oracle/u01/app/oracle/oradata/orcl/control01.ctl,                                      /home/oracle/u01/app/oracle/fast_recovery_area/orcl/control02.ctl

发现一个问题,之前没有记错的话,数据库的两个控制文件都是存放在相同的目录下,即:...oradata/orcl下,怎么第二个控制文件放在了...fast_recovery_area/orcl目录下?
奇怪了,该数据库之前没有开启闪回,为什么这个地方的控制文件存放路径发生了变化?

接着处理,确认一下当前环境是否开启闪回,

SQL> select flashback_on from v$database;select flashback_on from v$database                         *ERROR at line 1:ORA-00210: cannot open the specified control fileORA-00202: control file:‘/home/oracle/u01/app/oracle/fast_recovery_area/orcl/control02.ctl‘ORA-27041: unable to open fileLinux-x86_64 Error: 2: No such file or directoryAdditional information: 3

完了,还查看不了!!!
                                
试着查看一下闪回相关的参数呢?

Oracle异常ORA-00210,ORA-00202故障处理