Oracle断电的一次恢复经历
tJbwhy
|
1#
tJbwhy 发表于 2007-11-07 00:09
Oracle断电的一次恢复经历
Oracle数据库恢复文档:
客户数据库因为掉电,数据库不能正常启动。 故障现象: 进入应用程序的时候,提示:Oracle startup or shutdown in progress..... 诊断及解决过程: 1、SVRMGR> startup nomount; 没有问题 2、SVRMGR> alter database mount; 出现在以下内容,乱码: alter database mount * ORA-00214: ???? 'D:\ORACLE\ORADATA\ORACLE\CONTROL02.CTL' ?? 16788 ??? 'D:\ORACLE \ORADATA\ORACLE\CONTROL01.CTL' ?? 16780 ??? 3、为了解决这个乱码,先设置字符集,然后再重新来过一次: SVRMGR> shutdown abort; SVRMGR> exit; c:\set nls_lang=american_america.zhs16gbk SVRMGR> startup nomount; 4、SVRMGR> alter database mount; 出现以下内容,诊断是几个控制文件版本不一致: alter database mount * ORA-00214: controlfile 'D:\ORACLE\ORADATA\ORACLE\CONTROL02.CTL' version 16788 in consistent with file 'D:\ORACLE\ORADATA\ORACLE\CONTROL01.CTL' version 16780 解决方法: 打开init.ora,找到 control_files = ("d:\oracle\oradata\oracle\control01.ctl", "d:\oracle\oradata\oracle\control02.ctl", "d:\oracle\oradata\oracle\control03.ctl") 把它修改为: control_files = ("d:\oracle\oradata\oracle\control02.ctl", "d:\oracle\oradata\oracle\control03.ctl") 去掉其中的第一个控制文件。 5、 SVRMGR>shutdown abort; SVRMGR>startup nomount; SVRMGR>alter databse mount; SVRMGR>alter databse open; 这时出现这样的内容: alter database open * ORA-00314: log 3 of thread 1, expected sequence# 3990 doesn't match 3987 ORA-00312: online log 3 thread 1: 'D:\ORACLE\ORADATA\ORACLE\REDO01.LOG' 诊断,log日志版本不对。 尝试以下操作,均告失败: SVRMGR> alter database open resetlogs; 出现以下错误: alter database open resetlogs * ORA-01139: RESETLOGS option only valid after an incomplete database recovery SVRMGR> alter database open noresetlogs; 出现以下错误: alter database open noresetlogs * ORA-01139: RESETLOGS option only valid after an incomplete database recovery SVRMGR> recover database until time '2003-12-24:19:19:19'; 出现以下错误: ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below ORA-01194: file 1 needs more recovery to be consistent ORA-01110: data file 1: 'D:\ORACLE\ORADATA\ORACLE\SYSTEM01.DBF' SVRMGR> alter database open resetlogs; 出现以下错误: alter database open resetlogs * ORA-01194: file 1 needs more recovery to be consistent ORA-01110: data file 1: 'D:\ORACLE\ORADATA\ORACLE\SYSTEM01.DBF' 6、 使用ORACLE数据库的部分数据恢复方式。 它的主要做法就是不检查数据库的一致性,来打开数据库,虽然会造成数据的不准确和丢失, 但是还是可以保存在大部分数据的。 做法: 打开init.ora,添加一行文字: _allow_resetlogs_corruption=true 然后再进行以下操作: SVRMGR>shutdown abort; SVRMGR>startup mount; SVRMGR>recover database until cancel 此时数据库提示 SVRMGR> recover database until cancel; ORA-00279: change 3684318 generated at 12/30/2003 10:55:34 needed for thread 1 ORA-00289: suggestion : D:\ORACLE\ORA81\RDBMS\ARC00001.001 ORA-00280: change 3684318 for thread 1 is in sequence #1 Specify log: {<RET>=suggested | filename | AUTO | CANCEL} 输入 cancel,这时出现这样的信息: ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below ORA-01194: file 1 needs more recovery to be consistent ORA-01110: data file 1: 'D:\ORACLE\ORADATA\ORACLE\SYSTEM01.DBF' SVRMGR>alter database open noresetlogs; 提示: Statement processed. 这时,数据库已经起来了。 此时,要尽快把数据库导出来。 exp system/manager file=c:\oracle.dmp full=y ... 数据库一致性检查失败,oracle不能open。 机器异常断电,oracle不能正常启动,可以mount,不能open。数据库未备份过。 错误码: At startup, the database will mount, but gives the following errors at open: ORA-00312: "online log %s thread %s: '%s'" Cause: This message reports the filename for details of another message. Action: Other messages will accompany this message. See the associated messages for the appropriate action to take. ORA-00322: "log %s of thread %s is not current copy" Cause: Check of log file header at database open found that an online log appears to be an incorrectly restored backup. Action: Restore correct file or reset logs. 解决方法描述: 首先检查ORACLE_HOME 和ORACLE_SID在startup参数中是否正确,如果不正确重新startup。 Recover the loss of an inactive, online redo log group. SQL>ALTER DATABASE CLEAR LOGFILE 'filename'; If there is more than one LOGFILE in the redo log group then you must specify all the log files. For example, the following fails: SVRMGR> alter database clear logfile '/vobs/oracle/dbs/log3.log'; alter database clear logfile '/vobs/oracle/dbs/log3.log' * ORA-1514: error in log specification: no such log ORA-1517: log member: '/vobs/oracle/dbs/log3.log But, specifying all the log files in the group works: SVRMGR> ALTER DATABASE CLEAR LOGFILE ('/vobs/oracle/dbs/t4.log','/vobs/oracle/; Statement processed. 介绍一个意外情况,如果上面的方法不成功,数据库还是不能open,采用recover,restore都不成功,说明logfile可能已经损坏,数据库打开需要做一致性检查,所以不能正常打开。因为数据库未作过备份,为了尽可能地减少损失,采用打开数据库,然后立刻导出数据的方法。 oracle有一个不推荐的方法,可以使数据库在不进行一致性检查的方式下打开数据库。 做法: 1。为保险起见,将数据库的系统表空间,数据文件,控制文件均做一次备份:copy。 2。在初始化配置文件中(init.ora)加上: _allow_resetlogs_corruption=true _corrupted_rollback_segments=(将所有rollback_segments=(...)的内容加到这里) 将rollback_segments=(...)前加上# 3。startup mount recover database until cancel; cancel alter database open resetlogs; 此时数据库已经可以打开了,请立刻将数据export出来,然后重新安装oracle,重新建立database,再将数据import。 注意:这种方法属于数据库的不完全恢复,最后提交的sql可能会丢失,毕竟能够尽可能地减少损失,可以试试。 以上操作我均做过测试。 |