操作系统时间被修改引发数据库ORA-00600内部错误:
ERROR1:
$ sqlplus /nolog
SQL*Plus: Release 11.1.0.7.0 - Production on Fri Mar 10 09:40:55 2000
Copyright (c) 1982, 2008, Oracle. All rights reserved.
SQL> connect /as sysdba
ERROR:
ORA-01075: you are currently logged on <<<<此时已经无法连接至数据库
ERROR2:
SQL> connect user/password
ERROR:
ORA-00600: internal error code, arguments: [2252], [3156], [2060352899], [],
[], [], [], [], [], [], [], []
<<<<<ORA-00600[2252]是由于操作系统时间被修改并且跨度太大而引起的,SCN依赖于操作系统的时间,同时内部包含scn_to_timestamp和timestamp_to_scn两个函数用于SCN和时间戳的转换,如果时间跨度太大而导致数据库异常也很好被理解。
将smon后台进程kill掉,重启数据库依然报ORA-00600[2252],查看以下信息:
SQL> select a.FILE#,a.checkpoint_change#,b.CHECKPOINT_CHANGE# from v$datafile a join v$datafile_header b on a.FILE#=b.FILE#;
FILE# CHECKPOINT_CHANGE# CHECKPOINT_CHANGE#
---------- ----------------------------- -----------------------------
1 13556623902483 13556623902483
2 13556623902483 13556623902483
3 13556623902483 13556623902483
4 13556623902483 13556623902483
5 13556623902483 13556623902483
6 13556623902483 13556623902483
7 13556623902483 13556623902483
8 13556623902483 13556623902483
9 13556623902483 13556623902483
10 13556623902483 13556623902483
11 13556623902483 13556623902483
12 13556623902483 13556623902483
13 13556623902483 13556623902483
14 13556623902483 13556623902483
15 13556623902483 13556623902483
16 13556623902483 13556623902483
17 13556623902483 13556623902483
18 13556623902483 13556623902483
19 13556623902483 13556623902483
20 13556623902483 13556623902483
21 13556623902483 13556623902483
22 13556623902483 13556623902483
23 13556623902483 13556623902483
24 13556623902483 13556623902483
25 13556623902483 13556623902483
26 13556623902483 13556623902483
27 13556623902483 13556623902483
28 13556623902483 13556623902483
29 13556623902483 13556623902483
30 13556623902483 13556623902483
31 13556623902483 13556623902483
32 13556623902483 13556623902483
33 13556623902483 13556623902483
34 13556623902483 13556623902483
35 13556623902483 13556623902483
36 13556623902483 13556623902483
37 13556623902483 13556623902483
38 13556623902483 13556623902483
39 13556623902483 13556623902483
40 13556623902483 13556623902483
41 13556623902483 13556623902483
42 13556623902483 13556623902483
43 13556623902483 13556623902483
44 13556623902483 13556623902483
45 13556623902483 13556623902483
46 13556623902483 13556623902483
47 13556623902483 13556623902483
48 13556623902483 13556623902483
49 13556623902483 13556623902483
50 13556623902483 13556623902483
51 13556623902483 13556623902483
52 13556623902483 13556623902483
53 13556623902483 13556623902483
54 13556623902483 13556623902483
55 13556623902483 13556623902483
56 13556623902483 13556623902483
57 13556623902483 13556623902483
58 13556623902483 13556623902483
59 13556623902483 13556623902483
60 13556623902483 13556623902483
61 13556623902483 13556623902483
62 13556623902483 13556623902483
63 13556623902483 13556623902483
64 13556623902483 13556623902483
65 13556623902483 13556623902483
66 13556623902483 13556623902483
67 13556623902483 13556623902483
68 13556623902483 13556623902483
69 13556623902483 13556623902483
70 13556623902483 13556623902483
71 13556623902483 13556623902483
72 13556623902483 13556623902483
73 13556623902483 13556623902483
74 13556623902483 13556623902483
75 13556623902483 13556623902483
76 13556623902483 13556623902483
77 13556623902483 13556623902483
78 13556623902483 13556623902483
79 13556623902483 13556623902483
80 13556623902483 13556623902483
81 13556623902483 13556623902483
82 13556623902483 13556623902483
83 13556623902483 13556623902483
84 13556623902483 13556623902483
85 13556623902483 13556623902483
86 13556623902483 13556623902483
87 13556623902483 13556623902483
88 13556623902483 13556623902483
89 13556623902483 13556623902483
90 13556623902483 13556623902483
91 13556623902483 13556623902483
92 13556623902483 13556623902483
93 13556623902483 13556623902483
94 13556623902483 13556623902483
95 13556623902483 13556623902483
96 13556623902483 13556623902483
97 13556623902483 13556623902483
98 13556623902483 13556623902483
99 13556623902483 13556623902483
99 rows selected.
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ----------------------- ---------
1 1 193 5368709120 1 NO CURRENT 13556623783577 09-MAR-15
4 1 192 5368709120 1 NO INACTIVE 13556623778112 09-MAR-15
3 1 191 5368709120 1 NO INACTIVE 13556623772751 09-MAR-15
2 1 190 5368709120 1 NO INACTIVE 13556623763532 09-MAR-15
同时对控制文件做了dump:
***************************************************************************
DATABASE ENTRY
***************************************************************************
(size = 316, compat size = 316, section max = 1, section in-use = 1,
last-recid= 0, old-recno = 0, last-recno = 0)
(extent = 1, blkno = 1, numrecs = 1)
01/12/2015 18:49:02
DB Name "ODSPTDB"
Database flags = 0x00404000 0x00001000
Controlfile Creation Timestamp 01/12/2015 18:49:02
Incmplt recovery scn: 0x0000.00000000
Resetlogs scn: 0x0000.00000001 Resetlogs Timestamp 01/12/2015 18:49:02
Prior resetlogs scn: 0x0000.00000000 Prior resetlogs Timestamp 01/01/1988 00:00:00
Redo Version: compatible=0xb100000
#Data files = 99, #Online files = 99
Database checkpoint: Thread=1 scn: 0x0c54.65c08713
Threads: #Enabled=1, #Open=0, Head=0, Tail=0
--------------------------
SQL> select to_number('0c5465c08713','xxxxxxxxxxxxxxxxxxxxxxxxx') abc_scn from dual;
ABC_SCN
-----------------------------
13556623902483
--------------------------
***************************************************************************
CHECKPOINT PROGRESS RECORDS
***************************************************************************
(size = 8180, compat size = 8180, section max = 11, section in-use = 0,
last-recid= 0, old-recno = 0, last-recno = 0)
(extent = 1, blkno = 2, numrecs = 11)
THREAD #1 - status:0x2 flags:0x0 dirty:3
low cache rba:(0xc1.6b5346.0) on disk rba:(0xc1.6b5349.0)
on disk scn: 0x0c54.65c038f3 03/10/2000 10:16:58
resetlogs scn: 0x0000.00000001 01/12/2015 18:49:02
***************************************************************************
REDO THREAD RECORDS
***************************************************************************
(size = 256, compat size = 256, section max = 8, section in-use = 1,
last-recid= 0, old-recno = 0, last-recno = 0)
(extent = 1, blkno = 9, numrecs = 8)
THREAD #1 - status:0xe thread links forward:0 back:0
#logs:4 first:1 last:4 current:1 last used seq#:0xc1
enabled at scn: 0x0000.00000001 01/12/2015 18:50:33
disabled at scn: 0x0000.00000000 01/01/1988 00:00:00
opened at 01/13/2015 09:39:34 by instance odsptdb
Checkpointed at scn: 0x0c54.65c08713 03/10/2000 10:16:58
thread:1 rba:(0xc1.6b5349.10)
***************************************************************************
LOG FILE RECORDS
***************************************************************************
(size = 72, compat size = 72, section max = 16, section in-use = 4,
last-recid= 4, old-recno = 0, last-recno = 0)
(extent = 1, blkno = 10, numrecs = 16)
LOG FILE #1:
(name #1) /oradata/odsptdb/odsptdb/redo01.log
Thread 1 redo log links: forward: 2 backward: 0
siz: 0xa00000 seq: 0x000000c1 hws: 0x2 bsz: 512 nab: 0x6b5349 flg: 0xa dup: 1
Archive links: fwrd: 0 back: 0 Prev scn: 0x0c54.65bea140
Low scn: 0x0c54.65beb699 03/09/2015 21:08:01
Next scn: 0xffff.ffffffff 01/01/1988 00:00:00
<<<<<<<<<<<<<
databasescn: 0x0c54.65c08713 <<<< 控制文件的SCN
on disk scn: 0x0c54.65c038f3 <<<< 实例恢复的目标SCN,却明显小于控制文件的SCN
redo low scn: 0x0c54.65beb699
<<<<<<<<<<<<<
鉴于控制文件里的SCN和数据文件头部SCN都一致,所以尝试resetlogs方式打开数据库
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01139: RESETLOGS option only valid after an incomplete database recovery
SQL> recover database until cancel;
Media recovery complete.
SQL> alter database open ;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-00600: internal error code, arguments: [2252], [3156], [1707116310], [], [], [], [], [], [], [], [], []
SQL> select a.FILE#,a.checkpoint_change#,b.CHECKPOINT_CHANGE# from v$datafile a join v$datafile_header b on a.FILE#=b.FILE#;
FILE# CHECKPOINT_CHANGE# CHECKPOINT_CHANGE#
---------- ----------------------------- -----------------------------
1 13556623902484 13556623902484
2 13556623902484 13556623902484
3 13556623902484 13556623902484
4 13556623902484 13556623902484
5 13556623902484 13556623902484
6 13556623902484 13556623902484
7 13556623902484 13556623902484
8 13556623902484 13556623902484
9 13556623902484 13556623902484
10 13556623902484 13556623902484
11 13556623902484 13556623902484
12 13556623902484 13556623902484
13 13556623902484 13556623902484
14 13556623902484 13556623902484
15 13556623902484 13556623902484
16 13556623902484 13556623902484
17 13556623902484 13556623902484
18 13556623902484 13556623902484
19 13556623902484 13556623902484
20 13556623902484 13556623902484
21 13556623902484 13556623902484
22 13556623902484 13556623902484
23 13556623902484 13556623902484
24 13556623902484 13556623902484
25 13556623902484 13556623902484
26 13556623902484 13556623902484
27 13556623902484 13556623902484
28 13556623902484 13556623902484
29 13556623902484 13556623902484
30 13556623902484 13556623902484
31 13556623902484 13556623902484
32 13556623902484 13556623902484
33 13556623902484 13556623902484
34 13556623902484 13556623902484
35 13556623902484 13556623902484
36 13556623902484 13556623902484
37 13556623902484 13556623902484
38 13556623902484 13556623902484
39 13556623902484 13556623902484
40 13556623902484 13556623902484
41 13556623902484 13556623902484
42 13556623902484 13556623902484
43 13556623902484 13556623902484
44 13556623902484 13556623902484
45 13556623902484 13556623902484
46 13556623902484 13556623902484
47 13556623902484 13556623902484
48 13556623902484 13556623902484
49 13556623902484 13556623902484
50 13556623902484 13556623902484
51 13556623902484 13556623902484
52 13556623902484 13556623902484
53 13556623902484 13556623902484
54 13556623902484 13556623902484
55 13556623902484 13556623902484
56 13556623902484 13556623902484
57 13556623902484 13556623902484
58 13556623902484 13556623902484
59 13556623902484 13556623902484
60 13556623902484 13556623902484
61 13556623902484 13556623902484
62 13556623902484 13556623902484
63 13556623902484 13556623902484
64 13556623902484 13556623902484
65 13556623902484 13556623902484
66 13556623902484 13556623902484
67 13556623902484 13556623902484
68 13556623902484 13556623902484
69 13556623902484 13556623902484
70 13556623902484 13556623902484
71 13556623902484 13556623902484
72 13556623902484 13556623902484
73 13556623902484 13556623902484
74 13556623902484 13556623902484
75 13556623902484 13556623902484
76 13556623902484 13556623902484
77 13556623902484 13556623902484
78 13556623902484 13556623902484
79 13556623902484 13556623902484
80 13556623902484 13556623902484
81 13556623902484 13556623902484
82 13556623902484 13556623902484
83 13556623902484 13556623902484
84 13556623902484 13556623902484
85 13556623902484 13556623902484
86 13556623902484 13556623902484
87 13556623902484 13556623902484
88 13556623902484 13556623902484
89 13556623902484 13556623902484
90 13556623902484 13556623902484
91 13556623902484 13556623902484
92 13556623902484 13556623902484
93 13556623902484 13556623902484
94 13556623902484 13556623902484
95 13556623902484 13556623902484
96 13556623902484 13556623902484
97 13556623902484 13556623902484
98 13556623902484 13556623902484
99 13556623902484 13556623902484
99 rows selected.
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ----------------------- ---------
1 1 1 5368709120 1 NO CURRENT 13556623902484 10-MAR-00 <<<<<<<<<<<<<注意这里的时间是2000年!!
4 1 0 5368709120 1 YES UNUSED 0
3 1 0 5368709120 1 YES UNUSED 0
2 1 0 5368709120 1 YES UNUSED 0
这个时间按理应该能够顺利将数据库打开的...此时注意到以上的时间年份为2000年
SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YY
-------------------
2000-03-10 11:42:22
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
$ date
Fri Mar 10 11:42:25 CST 2000
时间跨度整整15年...此时将时间改为2015年,数据库就能顺利打开.
后来了解到他们调整时间的原因是:操作系统使用了"夏令时"时区,前几天发现时间提前了1小时,修改时间的命令格式不正确,将时间误调整为2000年.
反观整个恢复过程,其实可以先通过还原操作系统时间而避开一系列繁琐的操作,其实当自己发现在线日志的SCN小于控制文件的SCN时,曾想过增进SCN来解决,但发现控制文件和数据文件头部的SCN一致,所以才想通过RESETLOGS方式去启库。另外要提醒大家,避免使用夏令时时区,以免时间自动发生变化而引起不必要的麻烦.
---------------------------------------------------
道行尚浅,欢迎拍砖。
转载请注明出处.