ORA-00600 [2662]和ORA-00600 [4194]的解决过程

数据库先大量出现:
Fri Nov 11 11:02:51 2005
SMON: enabling cache recovery
Fri Nov 11 11:02:51 2005
Undo Segment 1 Onlined
Undo Segment 2 Onlined
Undo Segment 3 Onlined
Undo Segment 4 Onlined
Undo Segment 5 Onlined
Undo Segment 6 Onlined
Undo Segment 7 Onlined
Undo Segment 8 Onlined
Undo Segment 9 Onlined
Undo Segment 10 Onlined
Successfully onlined Undo Tablespace 1.
Fri Nov 11 11:02:51 2005
SMON: enabling tx recovery
Fri Nov 11 11:02:52 2005
Database Characterset is ZHS16GBK
replication_dependency_tracking turned off (no async multimaster replication found)
Completed: ALTER DATABASE OPEN
Fri Nov 11 12:32:19 2005
Errors in file /export/home/oracle/admin/ora9/udump/ora9_ora_21921.trc:
ORA-00600: internal error code, arguments: [2662], [0], [160888492], [0], [161019926], [88094473], [], []
Fri Nov 11 12:32:23 2005
Errors in file /export/home/oracle/admin/ora9/udump/ora9_ora_21921.trc:
ORA-00600: internal error code, arguments: [2662], [0], [160888496], [0], [161019926], [88094473], [], []
Fri Nov 11 12:32:24 2005
Errors in file /export/home/oracle/admin/ora9/udump/ora9_ora_21973.trc:
ORA-00600: internal error code, arguments: [2662], [0], [160888501], [0], [161056639], [62915340], [], []
Fri Nov 11 12:32:25 2005
Errors in file /export/home/oracle/admin/ora9/udump/ora9_ora_21921.trc:
ORA-00600: internal error code, arguments: [2662], [0], [160888502], [0], [161019926], [88094473], [], []
Fri Nov 11 12:32:26 2005
Errors in file /export/home/oracle/admin/ora9/udump/ora9_ora_21973.trc:
ORA-00600: internal error code, arguments: [2662], [0], [160888503], [0], [161056639], [62915340], [], []
Fri Nov 11 12:32:26 2005
Errors in file /export/home/oracle/admin/ora9/udump/ora9_ora_21921.trc:
ORA-00600: internal error code, arguments: [2662], [0], [160888504], [0], [161019926], [88094473], [], []
Fri Nov 11 12:32:28 2005
Errors in file /export/home/oracle/admin/ora9/udump/ora9_ora_21921.trc:
ORA-00600: internal error code, arguments: [2662], [0], [160888506], [0], [161019926], [88094473], [], []
ORA-00600: internal error code, arguments: [2662], [0], [160888504], [0], [161019926], [88094473], [], []
Fri Nov 11 12:32:29 2005
Errors in file /export/home/oracle/admin/ora9/udump/ora9_ora_21973.trc:

 

那么解决的方法应该如下:产生这个问题的原因可能是: 硬件错误引起数据库没法写控制文件和重做日志文件

客户那边数据库突然出现一个current日志文件坏了,导致数据库crash了,然后现场工程师使用_ALLOW_RESETLOGS_CORRUPTION = TRUE这个隐含参数,做了不完全恢复后强行将数据库打开。可是打开数据库后发现只能用internal用户连接进去,别的用户连接都报错,错误信息如下:
ORA-00600: internal error code, arguments: [2662], [0], [431267936], [0], [431273216], [0], [], []
查询不了任何应用的表,应用也没法使用,于是想尝试全库的exp出来然后重新imp进去建库,结果发现exp数据也不成功,也是报同样的ORA-600的错误,用户当时数据没有任何的备份过,只能想办法尽量打开数据库,导出数据了。

处理过程:
先检查了600错误产生的trace文件:
*** SESSION ID 7.15) 2004.11.23.23.28.16.824
ksedmp: internal or fatal error
ORA-00600: internal error code, arguments: [2662], [0], [431267754], [0], [431272752], [0], [], []
Current SQL statement for this session:
SELECT * FROM "WHSB"."SB_BSBF"
得到的信息有限,只能看到是严重内部错误,剩下的都是内存堆栈的一堆信息,于是查找了一下这个错误的具体相关信息。
ORA-600 [2662] "Block SCN is ahead of Current SCN",说明当前数据库的数据块的SCN早于当前的SCN,主要是和存储在UGA变量中的dependent SCN进行比较,如果当前的SCN小于它,数据库就会产生这个ORA-600 [2662]的错误了。
 
这个错误一共有五个参数,分别代表不同的含义,
ORA-600 [2662] [a]
[c] [d] [e]
Arg [a] Current SCN WRAP
Arg
Current SCN BASE
Arg [c] dependent SCN WRAP
Arg [d] dependent SCN BASE
Arg [e] Where present this is the DBA where the dependent SCN came from.
我们分析错误中的提示,它的参数b=431267754,d=431272752,表明当前的SCN确实是小于dependent SCN,所以产生了这个600的错误。
通过查阅文档,发现这个错误的产生原因主要有以下几条:
 使用隐含参数_ALLOW_RESETLOGS_CORRUPTION后resetlogs打开数据库
 硬件错误引起数据库没法写控制文件和重做日志文件
错误的部分恢复数据库
恢复了控制文件但是没有使用recover database using backup controlfile进行恢复
数据库crash后设置了_DISABLE_LOGGING隐含参数
 在并行服务器环境中DLM存在问题
仔细对比了一下,发现问题可能是由于第一条产生的,由于设置了_ALLOW_RESETLOGS_CORRUPTION这个隐含参数后,虽然强制性的打开数据库,但是数据库本身存在了corruption,仍然存在严重的问题。
于是想到使用ADJUST_SCN事件来调整当前的SCN,使其大于dependent SCN,然后保证数据库可以全库的导出,然后重建数据库导入数据。
用internal用户登陆数据库后,连接别的用户,还是失败报错,执行:
alter session set events '10015 trace name adjust_scn level 1';
然后尝试连接别的用户,连接成功。
最后exp整个数据库,重建数据库后导入数据,整个数据库恢复成功!

通过这个实例,我们可以看到,尽量的不要去使用那些隐含参数,这些参数是oracle所不推荐使用的,也不是万能的!如果使用了可能会存在一些遗留的问题,如果非要使用,建议使用后一定要exp/imp重建建立数据库。
The ORA-600[4194] is signalled when the transaction table and the undo block is out of sync. Maybe your rollback segments corrupted.
A mismatch has been detected between Redo records and rollback (Undo) records.
This error may indicate a rollback segment corruption.This may require a recovery from a database backup depending on the situation.
既然是回滚段有问题,那么就解决(没有备份的情况下)
*._offline_rollback_segments=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)
或者:
*._corrupted_rollback_segments=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)
启动数据库,打开成功
重新建立回滚表空间

肯定是回滚段或者回滚表空间出问题600-[4000]到[5000]的错误都是和rollback 相关的。启动前加一个参数_offline_rollback_segments=(...),使数据库启动时只带动系统回滚段。数据库起来后重建rollback segment or rollback tablespace ,问题应该能得到解决。 重装ORACLE软件对数据库并没有什么影响。

 

通过这个故障我们应该及时的去发现ora产生的ora错误,及时的排除,还有就是日常的备份工作也很重要,这个数据库是没有备份的,所以才采取了这种方法,如果备份了,你可以用备份恢复数据库的回滚表空间的


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8102208/viewspace-628275/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/8102208/viewspace-628275/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值