地牯牛的博客

欢迎光临
我们一直在努力

数据库因为断电造成损坏

今天公司的Oracle数据库突然当掉了,这可是我们最核心的数据库,非常紧张。先尝试shutdown,可以正常shutdown,但是执行startup的时候报错,报错信息如下:

Errors in file /opt/oracle9/oracle/admin/ora9/udump/ora9_ora_29602.trc:

ORA-00314: log 1 of thread 1, expected sequence# 1394 doesn't match 1018

ORA-00312: online log 1 thread 1: '/var/oracle/redolog/redo01a.log'

Sun Nov  3 01:21:43 2013

Errors in file /opt/oracle9/oracle/admin/ora9/udump/ora9_ora_29602.trc:

ORA-00600: internal error code, arguments: [ksfdchkfobrerr1], [0x000000000], [0x000000000], [], [], [], [], []

ORA-600 signalled during: ALTER DATABASE OPEN...

Sun Nov  3 10:48:35 2013

Errors in file /opt/oracle9/oracle/admin/ora9/udump/ora9_ora_1561.trc:

ORA-27037: unable to obtain file status

HP-UX Error: 2: No such file or directory

刚开始觉得是重做日志的问题,就想clear掉重做日志,结果是当前日志出了问题,还没有归档不能clear掉,后来尝试startup force,还是有问题,如是启用recover database until cancel,等待输入的时候因为没有搞明白是什么问题就选择了auto,结果照样报错,后来咨询负责公司oracle数据库技术支持的工程师,工程师要我把那几个报错文件发给他,他说挺严重的,就让我把数据库当掉,然后将数据库、控制文件、重做日志文件和配置文件备份,然后执行rman恢复(前天晚上做了rman全备份,并且备份成功了。)200多G的数据文件,拷贝了一天,等到晚上终于拷贝完了,我回家总觉得不对劲,觉得是归档文件丢失了,就想看看归档日志丢失怎么恢复,然后就找到下面的方法,试了一下果然就恢复了,早知道如此就不用停掉业务一天了。

转自:http://space.itpub.net/22021749/viewspace-614544

今天打开数据库的时候不知怎么弄的,不能open了,先是提示数据库没有正常关闭,

使用shutdown immediate,等了一会没有结束,于是直接结束了进程,后来又出来一个问题
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf'

估计应该是日志的问题,又试了下:
SQL> recover database using backup controlfile until cancel;
ORA-00279: change 669109 generated at 09/12/2009 18:47:00 needed for thread 1
ORA-00289: suggestion :
/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2009_09_13/o1_mf_1_10_%u_.ar
c
ORA-00280: change 669109 for thread 1 is in sequence #10


Specify log: {=suggested | filename | AUTO | CANCEL}

根据上面提示的内容,注意到 ‘change 669109 ’ 和 ‘sequence #10’
从网上看到一条语句,可以查出redo logs ,注意要用sys:
SQL> conn sys/oracle as sysdba                         
Connected.
SQL> select v1.group#, member, sequence#, first_change# 
  2  from v$log v1, v$logfile v2
  3  where v1.group# = v2.group#;

从结果里根据 sequence# 和 first_change# 找到了要用到的log file name:
/u01/app/oracle/oradata/orcl/redo03.log

在 Specify log: {=suggested | filename | AUTO | CANCEL} 下面输入:
/u01/app/oracle/oradata/orcl/redo03.log
提示:
Log applied.
Media recovery complete.

接着:
SQL> alter database open resetlogs;

Database altered.

这样,就吧问题解决了。


未经允许不得转载:地牯牛的博客 » 数据库因为断电造成损坏
分享到: 更多 (135)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

地牯牛的博客 更专业 更方便

联系我们联系我们

登录

注册