一、问题描述
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错误后,数据库就打开了。
文章评论
可能数据库主机时间调整太大引发600内部错误,不完全确认,小的调整是可以的,大调整没试过,有空时可测试下