ORA-00600[2662]处理记录

2020年5月19日 1550点热度 0人点赞 1条评论

一、问题描述

1、数据库情况

版本11.2.0.4;未开启归档

2、问题详情

数据库down了,之后重启主机,并调整了系统时间,再次打开时报错如下。

Sat May 16 22:18:57 2020
SMON: enabling cache recovery
Errors in file E:\APP\ADMINROOT\diag\rdbms\wydb\wydb\trace\wydb_ora_1916.trc  (incident=195772):
ORA-00600: ??????, ??: [2662], [3881], [569269418], [3881], [576525885], [12583056], [], [], [], [], [], []
Incident details in: E:\APP\ADMINROOT\diag\rdbms\wydb\wydb\incident\incdir_195772\wydb_ora_1916_i195772.trc
Sat May 16 22:19:00 2020
Dumping diagnostic data in directory=[cdmp_20200516221900], requested by (instance=1, osid=1916), summary=[incident=195772].
Sat May 16 22:19:00 2020
Use ADRCI or Support Workbench to package the incident.
See Note 411.1 at My Oracle Support for error and packaging details.
Errors in file E:\APP\ADMINROOT\diag\rdbms\wydb\wydb\trace\wydb_ora_1916.trc:
ORA-00600: ??????, ??: [2662], [3881], [569269418], [3881], [576525885], [12583056], [], [], [], [], [], []
Errors in file E:\APP\ADMINROOT\diag\rdbms\wydb\wydb\trace\wydb_ora_1916.trc:
ORA-00600: ??????, ??: [2662], [3881], [569269418], [3881], [576525885], [12583056], [], [], [], [], [], []
Error 600 happened during db open, shutting down database
USER (ospid: 1916): terminating the instance due to error 600
Instance terminated by USER, pid = 1916
ORA-1092 signalled during: alter database open...
opiodr aborting process unknown ospid (1916) as a result of ORA-1092
Sat May 16 22:19:12 2020
ORA-1092 : opitsk aborting process

二、问题分析、处理思路

经过网搜,得知ORA-00600[2662]原因如下:
1)A data block SCN is ahead of the current SCN.(SCN不一致)
2)Bug 14351566 ORA-600 [kclchkblk_4] ORA-600 [2662] when doing flash back;
排除了Bug可能,错误基本定位在SCN不一致上面。
因为没有可用的日志、备份、归档等条件,只能采用重建控制文件,并通过设置Oracle内部隐含参数_allow_resetlogs_corruption=TRUE跳过一致性检查,强制open数据库。

三、处理步骤

1、参数文件加入_allow_resetlogs_corruption=TRUE

alter system set "_allow_resetlogs_corruption"=TRUE scope=spfile;
最后记得改回来
--alter system set "_allow_resetlogs_corruption" = false scope=spfile;

2、重建控制文件

CREATE>CREATE CONTROLFILE REUSE DATABASE "WYDB" RESETLOGS  NOARCHIVELOG
--  SET STANDBY TO MAXIMIZE PERFORMANCE
    MAXLOGFILES 10
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 1
    MAXLOGHISTORY 226
LOGFILE
  GROUP 4 'E:\APP\ADMINROOT\ORADATA\WYDB\REDO01.LOG'  SIZE 2000M, 
  GROUP 5 'E:\APP\ADMINROOT\ORADATA\WYDB\REDO02.LOG'  SIZE 2000M,
  GROUP 6 'E:\APP\ADMINROOT\ORADATA\WYDB\REDO03.LOG'  SIZE 2000M
-- STANDBY LOGFILE
DATAFILE
  'E:\APP\ADMINROOT\ORADATA\WYDB\SYSTEM01.DBF',
  'E:\APP\ADMINROOT\ORADATA\WYDB\SYSAUX01.DBF',
  'E:\APP\ADMINROOT\ORADATA\WYDB\UNDOTBS01.DBF',
  'E:\APP\ADMINROOT\ORADATA\WYDB\USERS01.DBF',
  'E:\APP\ADMINROOT\ORADATA\WYDB\PM_LTE_TBS.DBF',
  'E:\APP\ADMINROOT\ORADATA\WYDB\PM_GSM_TBS.DBF',
  'E:\APP\ADMINROOT\ORADATA\WYDB\SYSAUX02.DBF',
  'E:\APP\ADMINROOT\ORADATA\WYDB\SYSTEM02.DBF',
  'E:\APP\ADMINROOT\ORADATA\WYDB\AOT_TAB.DBF'
  ;

3、使用oradebug poke推进SCN

在实际这类工作中,我们实际应该是要认真计算好需要推进SCN的值,而不应图省事直接给一个很大的值。

ORA-00600:>ORA-00600: ??????, ??: [2662], [3881], [569269418], [3881], [576525885], [12583056], [], [], [], [], [], []
2662 后面 5个参数,用 A B C D E 表示
SCN推进的总结公式:C * power(2,32) + D {+ 可适当加一点但不要太大}
C代表:Arg [C] dependent SCN WRAP
D代表:Arg [D] dependent SCN BASE
此处D取值576527000,则:
select 3881*power(2,32)+576527000 scn from dual;
16669344602776
查看当前的scn:
select file#, checkpoint_change# scn from v$datafile;
16669337385202
基本可知,16669344602776已经是比较合理的scn推进数,不大不小。
开始操作:
oradebug setmypid
查看sga地址:
oradebug dumpvar sga kcsgscn_
kcslf kcsgscn_ [149876FA0, 149876FD0) = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 49876C30 00000001
得到149876FA0,基于这个地址往前推进scn:
oradebug poke 0x149876FA0 8 16669344602776
BEFORE: [149876FA0, 149876FA8) = 00000000 00000000
AFTER:  [149876FA0, 149876FA8) = 225D1A98 00000F29
查看确认:
oradebug dumpvar sga kcsgscn_
kcslf kcsgscn_ [149876FA0, 149876FD0) = 225D1A98 00000F29 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 49876C30 00000001
再次打开数据库:
alter database open resetlogs;

在以上过程中出现的其他一些错误的处理,都比较容易解决,在此不再赘述。
关键的是,此时出了ORA-600[4193]/[4194]错误,导致无法启动数据库,对于这个错误的处理,另文描述。
处理完4193/4194错误后,数据库就打开了。

liking

这个人很懒,什么都没留下

文章评论

  • liking

    可能数据库主机时间调整太大引发600内部错误,不完全确认,小的调整是可以的,大调整没试过,有空时可测试下

    2020年5月19日