Oracle数据库一般在高并发写入的业务系统中,例如一些流水账单或日志写入业务,若程出现意外断电,将会破坏数据文件的一致性,从而导致数据库无法启动,如这个时候,客户本身没有开启RMAN数据库备份或逻辑备份,并且数据库处于非归档状态,将会很被动,下面将通过非常规的方法来恢复数据库,用该方法恢复后,由于破坏了数据库本身的一致性,应通过导出导入操作来重建实例。
数据库意外断电或系统崩溃,如果没有有效RMAN全备份,数据库无法打开,报以下错误:
SQL> alter database open resetlogs;
alter database open resetlogs
*
第 1 行出现错误:
ORA-01194: 文件 1 需要更多的恢复来保持一致性
ORA-01110: 数据文件 1: 'D:\ORACLE\PRODUCT\10.1.0\ORADATA\MYORACLE\SYSTEM01.DBF'
由于无RMAN备份,无法进行recover等传统操作,这种时候只能在recover database until cancel后,用open resetlogs尝试打开,但此时由于数据不一致,无法打开!
这种情况,可通过隐含参数_allow_resetlogs_corruption=TRUE强制打开
SQL> alter system set "_allow_resetlogs_corruption"=true scope=spfile;
系统已更改。
SQL> shutdown immediate;
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 524288000 bytes
Fixed Size 789692 bytes
Variable Size 497808196 bytes
Database Buffers 25165824 bytes
Redo Buffers 524288 bytes
数据库装载完毕。
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
SQL> alter database open resetlogs;
alter database open resetlogs
*
第 1 行出现错误:
ORA-03113: 通信通道的文件结束
遭遇ORA-00600: 内部错误代码, 参数: [2662]错误
查看日志:
MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set
Thu Jun 10 11:43:44 2010
SMON: enabling cache recovery
Thu Jun 10 11:43:45 2010
Errors in file d:\oracle\product\10.1.0\admin\myoracle\udump\myoracle_ora_90368.trc:
ORA-00600: 内部错误代码, 参数: [2662], [0], [52373651], [0], [52377759], [29360137], [], []
Thu Jun 10 11:43:48 2010
Errors in file d:\oracle\product\10.1.0\admin\myoracle\udump\myoracle_ora_90368.trc:
ORA-00600: 内部错误代码, 参数: [2662], [0], [52373651], [0], [52377759], [29360137], [], []
Thu Jun 10 11:43:48 2010
Error 600 happened during db open, shutting down database
USER: terminating instance due to error 600
Thu Jun 10 11:43:48 2010
Errors in file d:\oracle\product\10.1.0\admin\myoracle\bdump\myoracle_pmon_88840.trc:
ORA-00600: internal error code, arguments: [], [], [], [], [], [], [], []
在数据库Open过程中,Oracle会跳过某些一致性检查,从而使数据库可能跳过不一致状态,Open打开,如果不幸运的话会得到如上【2662】的错误
ORA-00600 2662号错误,这个错误的含义是:
data block SCN is ahead of the current SCN.
The ORA-600 [2662] occurs when an SCN is compared to the dependent SCN
stored in a UGA variable.
If the SCN is less than the dependent SCN then we signal the ORA-600 [2662]
internal error.
在ORA-00600很多时候使用隐含参数_ALLOW_RESETLOGS_CORRUPTION后resetlogs打开数据库,我们可能会由于SCN不一致而遭遇到ORA-00600 2662号错误,这里给出一个完整的解决过程。
通过正常方式启动数据库时,从alert文件中,我们可以看到ora-00600 2662号错误。
Sun Dec 11 18:02:25 2015
Errors in file /opt/oracle/admin/conner/udump/conner_ora_13349.trc:
ORA-00600: internal error code, arguments: [2662], [0], [547743994], [0], [898092653], [8388617], [], []
Sun Dec 11 18:02:27 2015
Errors in file /opt/oracle/admin/conner/udump/conner_ora_13349.trc:
ORA-00600: internal error code, arguments: [2662], [0], [547743994], [0], [898092653], [8388617], [], []
Sun Dec 11 18:02:27 2015
Error 600 happened during db open, shutting down database
USER: terminating instance due to error 600
此时我们可以通过Oracle的内部事件来调整SCN:
增进SCN有两种常用方法:
1.通过immediate trace name方式(在数据库Open状态下)
alter session set events 'IMMEDIATE trace name ADJUST_SCN level x';
2.通过10015事件(在数据库无法打开,mount状态下)
alter session set events '10015 trace name adjust_scn level x';
注:level 1为增进SCN 10亿 (1 billion) (102410241024),通常Level 1已经足够。也可以根据实际情况适当调整。
本例由于数据库无法打开,只能使用的二种方法。
[oracle@jumper dbs]$ sqlplus "/ as sysdba"
SQL*Plus: Release 11.2.0.4.0 - Production on Sun Dec 11 18:26:18 2015
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to an idle instance.
SQL> startup mount pfile=initconner.ora
ORACLE instance started.
Total System Global Area 97588504 bytes
Fixed Size 451864 bytes
Variable Size 33554432 bytes
Database Buffers 62914560 bytes
Redo Buffers 667648 bytes
Database mounted.
SQL> alter session set events '10015 trace name adjust_scn level 10';
Session altered.
SQL> alter database open;
Database altered.
此时数据库有可能可以打开,但大部分情况下,仍然会报【2662】错误,数据库依然无法打开,从alert文件中我们可以看到[2662]报错依然出现!
此时可用下面方法解决(多次亲测有效):
天凯科技-数据库技术支持
7*24小时提供数据库运维与优化服务,十年DBA实战经验,长期服务于国内关键行业,深受好评!
服务热线/微信:13926108245
本企业定期分享DBA实战处理经验,同时分享精品视频教程,更多资源请点击访问"天凯运维资讯"获得!
发表评论 取消回复