一例IBM服务器Raid磁盘阵列故障

通常我们在服务器上做了硬件层面的Raid之后,用户拔掉任意一块硬盘,系统仍然能够正常工作。

不巧的是,某些情况下,由于疏忽大意,往往会造成意外的发生,今天就遇到了客户同时拔掉了奇偶校验的两块硬盘,而且是CMS的生产服务器,包括Oracle数据库【OMG!】

在ssh的终端直接抛出了一个io error后,整个CentOS系统就崩溃了,不接受任何指令,包括reboot,

倒是tomcat竟然还能工作,这里小赞许一下,但好像servlet也不行了。

到机房直接断电重启,系统已经无法启动。服务器反复加载硬件,到硬盘这一步时,始终过不去,提示error。

按系统提示输入C键,进入Raid阵列管理,发现已经有两块磁盘Offline,badluck!

尝试将磁盘设置为Online,发现没有相关选项。

……经过IBM工程师一番折腾之后,操作系统总算恢复正常。但Oracle好像有点不太对头:

启动Oracle出现如下错误提示:

ORA-01113: file 3 needs media recovery

ORA-01110: data file 3: '/oracle/app/oradata/orcl/sysaux01.dbf'

按照提示要求执行:

sql >recovery datafile 3;

提示修复成功

但重启数据库后,在startup.log中又抛出如下错误:

ORA-00607: Internal error occurred while making a change to a data block
ORA-00600: internal error code, arguments: [4194], [49], [24], [], [], [], [],

看样子,Oracle在尝试回滚最近的数据时,遇到了麻烦。

OK,稀里糊涂搜索一通后,得到了一个相近的答案:

重建UNDO

SQL> startup mount
ORACLE instance started.
Total System Global Area  599785472 bytes
Fixed Size                  1220772 bytes
Variable Size             125833052 bytes
Database Buffers          465567744 bytes
Redo Buffers                7163904 bytes
Database mounted.

SQL> create undo tablespace undotbs02 datafile '/home/u01/app/oracle/oradata/orcl/undotbs02.dbf' size 100m
  2  ;
create undo tablespace undotbs02 datafile '/home/u01/app/oracle/oradata/orcl/undotbs02.dbf' size 100m
*
ERROR at line 1:
ORA-01109: database not open
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/home/u01/app/oracle/oradata/orcl/system01.dbf
/home/u01/app/oracle/oradata/orcl/undotbs01.dbf
/home/u01/app/oracle/oradata/orcl/sysaux01.dbf
/home/u01/app/oracle/oradata/orcl/users01.dbf
SQL> alter database datafile '/home/u01/app/oracle/oradata/orcl/undotbs01.dbf' offline drop;
Database altered.
SQL> alter database open;
Database altered.
SQL> archive log list;
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     1056
Current log sequence           1058
SQL> create undo tablespace undotbs2 datafile '/home/u01/app/oracle/oradata/orcl/undotbs02.dbf' size 100m;
Tablespace created.
SQL> ALTER SYSTEM SET undo_tablespace='UNDOTBS2' ;
System altered.

通过以上设置,再次重启数据库,ok,一切恢复正常!

由此得出一个重要教训:服务器上的东西不要随便插入拔出

[此文在实际操作过程中发现日志中仍然存在警告,有异常,5个小时后,Oracle再次停掉]

【建议重新安装Oracle,Oracle修复过于复杂,除非有重要数据,不建议继续修复】

相关推荐