断电后Oracle数据库就open不了,报了:
ORA-00600: 内部错误代码,参数: [kcratr_nab_less_than_odr],[1],[44437],[17323],[18486],[
recover database using backup controlfile until cancel;
ORA-00448: normal completion of background process
Slave exiting with ORA-283 exception
实例起不来,只能强制的将数据库启动,设置隐藏参数
在mounted下执行:alter system set "_allow_resetlogs_corruption"=true scope=spfile;
设置好后,alter database open;时,又报了以下错误:
ORA-00600: internal error code,arguments: [2662],[3600],[2803761690],
[3600],[2803771391],[12583040],[],[]
结合以前处理过的600错误的经验,这个2662是scn不一致导致的错误,此时只能跳跃的人为干预将scn提高到一个值,其实
也只能是提高,应该没办法降低,在没有备份的情况下。
以为我数据库实例崩溃了,不能打开数据库,只能到mounted状态下,所以只能按照以下方式来提升SCN:
通过10015事件,在mount状态下
alter session set events '10015 trace name adjust_scn level 1';
其中的1是增加1亿,没记错的话,当然这个不是非常重要。
如果数据库可能打开的话,那么按照以下处理:
alter session set events 'IMMEDIATE trace name adjustT_scn level 1';
我记得有一次采用这个方式,提高的scn值很有限,因为一个是SCN相差非常大,第二是因为11g时默认不让你快速提高scn值得,
此时只能:
设置隐含参数_minimum_giga_scn 快速递增CURRENT SCN。
注:2012年1月后的PSU中包含隐含参数_external_scnrejection_threshold_hours,此时隐含参数和10015事件会失效。
调整好后执行 alter database open resetlogs;
conn ti/ti
ERROR:
ORA-00600: internal error code,arguments: [4193],
[],[]
这个是因为undo表空间坏掉了,处理方式:
alter system set undo_management = manual scope=spfile;
sql> alter system set undo_tablespace='' scope=spfile;
sql>shutdown immediate
sql>startup
sql>create undo tablespace undotbs2 datafile 'E:\orcl_data\orcl\undotbs2.dbf' size 100M;
----设置undo管理方式为 ’自动‘
sql> alter system set undo_management =auto scope=spfile;
----设置undotbs 为新建的undotbs2
sql> alter system set undo_tablespace = undotbs2 scope=spfile;
----删除原来损坏的undo表空间
sql> drop tablespace UNDOTBS1 including contents and datafiles;
sql>shutdown immediate
sql>startup
此时数据库能打开,就正常了。
此后最好将数据库备份下,有些坏了的表最好重新做一下,肯定会有并发比较高的表不一致的。