接到客户请求,oracle数据库停机重启维护之后,无法正常启动,请求我们给予协助
数据库启动报ORA-00704 ORA-00604 ORA-00942错误
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for 32-bit Windows: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
SQL> startup open
ORACLE 例程已经启动。
Total System Global Area 1288949760 bytes
Fixed Size 1376520 bytes
Variable Size 377491192 bytes
Database Buffers 897581056 bytes
Redo Buffers 12500992 bytes
数据库装载完毕。
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00704: bootstrap process failure
ORA-00604: error occurred at recursive SQL level 1
ORA-00942: table or view does not exist
进程 ID: 2756
会话 ID: 5 序列号: 9
alert日志报错
SMON: enabling cache recovery
Errors in file d:\app\administrator\diag\rdbms\xff\xff\trace\xff_ora_2756.trc:
ORA-00704: 引导程序进程失败
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-00942: 表或视图不存在
Errors in file d:\app\administrator\diag\rdbms\xff\xff\trace\xff_ora_2756.trc:
ORA-00704: 引导程序进程失败
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-00942: 表或视图不存在
Error 704 happened during db open, shutting down database
USER (ospid: 2756): terminating the instance due to error 704
Instance terminated by USER, pid = 2756
ORA-1092 signalled during: ALTER DATABASE OPEN...
opiodr aborting process unknown ospid (2756) as a result of ORA-1092
Fri Nov 30 12:51:26 2018
ORA-1092 : opitsk aborting process
根据这些年的恢复经验,恢复过相关错误的主要有:
ORA-01092 ORA-00704 ORA-00942
Oracle 11g丢失access$恢复方法
11.1.0.7版本也会出现access$表丢失导致数据库无法启动
总结主要两类:1. 由于某种bug导致access$表丢失的故障,另外一种是由于坏块导致数据库核心基表损坏引起,对于这个库进行分析
dbv 检查坏块
D:\APP\ADMINISTRATOR\ORADATA\ORCL> dbv file=system01.dbf
DBVERIFY: Release 10.2.0.3.0 - Production on 星期五 11月 30 15:11:24 2018
Copyright (c) 1982, 2005, Oracle. All rights reserved.
DBVERIFY - 开始验证: FILE = system01.dbf
DBVERIFY - 验证完成
检查的页总数: 93440
处理的页总数 (数据): 61979
失败的页总数 (数据): 0
处理的页总数 (索引): 13560
失败的页总数 (索引): 0
处理的页总数 (其它): 3067
处理的总页数 (段) : 0
失败的总页数 (段) : 0
空的页总数: 14834
标记为损坏的总页数: 0
流入的页总数: 0
最高块 SCN : 659587683 (0.659587683)
通过dbv检查数据库,确定system没有坏块
10046跟踪数据库启动
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 1288949760 bytes
Fixed Size 1376520 bytes
Variable Size 377491192 bytes
Database Buffers 897581056 bytes
Redo Buffers 12500992 bytes
数据库装载完毕。
SQL> oradebug setmypid
已处理的语句
SQL> alter session set db_file_multiblocK_read_count=1;
会话已更改。
SQL> ALTER SESSION SET EVENTS '704 trace name errorstack level 3';
会话已更改。
SQL> oradebug EVENT 10046 TRACE NAME CONTEXT FOREVER, LEVEL 12
已处理的语句
SQL> oradebug TRACEFILE_NAME
d:\app\administrator\diag\rdbms\xff\xff\trace\xff_ora_1132.trc
--trace信息
PARSE ERROR #3:len=208 dep=1 uid=0 oct=9 lid=0 tim=5838844893 err=942
CREATE UNIQUE INDEX I_OBJ1 ON OBJ$(OBJ#,OWNER#,TYPE#) PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE ( INITIAL 64K NEXT 1024K MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 OBJNO 36 EXTENTS (FILE 1 BLOCK 336))
*** 2018-11-30 13:18:07.593
dbkedDefDump(): Starting a non-incident diagnostic dump (flags=0x0, level=3, mask=0x0)
----- Error Stack Dump -----
ORA-00704: 引导程序进程失败
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-00942: 表或视图不存在
通过这一步基本上可以判断是由于obj$表丢失导致数据库创建I_OBJ1 index不成功,从而使得数据库无法正常启动。通过一些技巧修复出来obj$表,尝试启动数据库
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00704: bootstrap process failure
ORA-00600: internal error code, arguments: [4000], [6], [], [], [], [], [], [],
[], [], [], []
进程 ID: 836
会话 ID: 355 序列号: 6027
alert日志报错
Fri Nov 30 15:33:47 2018
SMON: enabling cache recovery
Errors in file d:\app\administrator\diag\rdbms\xff\xff\trace\xff_ora_836.trc (incident=648694):
ORA-00600: 内部错误代码, 参数: [4000], [6], [], [], [], [], [], [], [], [], [], []
Incident details in: d:\app\administrator\diag\rdbms\xff\xff\incident\incdir_648694\xff_ora_836_i648694.trc
Errors in file d:\app\administrator\diag\rdbms\xff\xff\trace\xff_ora_836.trc:
ORA-00704: 引导程序进程失败
ORA-00600: 内部错误代码, 参数: [4000], [6], [], [], [], [], [], [], [], [], [], []
Errors in file d:\app\administrator\diag\rdbms\xff\xff\trace\xff_ora_836.trc:
ORA-00704: 引导程序进程失败
ORA-00600: 内部错误代码, 参数: [4000], [6], [], [], [], [], [], [], [], [], [], []
Error 704 happened during db open, shutting down database
USER (ospid: 836): terminating the instance due to error 704
Fri Nov 30 15:33:57 2018
Instance terminated by USER, pid = 836
ORA-1092 signalled during: alter database open...
opiodr aborting process unknown ospid (836) as a result of ORA-1092
发现数据库启动报ORA-00704和ORA-00600: internal error code, arguments: [4000], [6], [], [], [], [], [], [],错误,根据以往经验,该问题是由于回滚段异常导致
分析trace信息
Dump continued from file: d:\app\administrator\diag\rdbms\xff\xff\trace\xff_ora_2124.trc
ORA-00600: 内部错误代码, 参数: [4000], [6], [], [], [], [], [], [], [], [], [], []
========= Dump for incident 651102 (ORA 600 [4000]) ========
*** 2018-11-30 15:46:32.125
dbkedDefDump(): Starting incident default dumps (flags=0x2, level=3, mask=0x0)
----- Current SQL Statement for txff session (sql_id=6apq2rjyxmxpj) -----
select line#, sql_text from bootstrap$ where obj# != :1
----- Call Stack Trace -----
calling call entry argument values in hex
location type point (? means dubious value)
-------------------- -------- -------------------- ----------------------------
_skdstdst()+121 CALLrel _kgdsdst() E6B1614 2
_ksedst1()+93 CALLrel _skdstdst() E6B1614 0 1 436646 435BE2
436646
_ksedst()+49 CALLrel _ksedst1() 0 1
_dbkedDefDump()+367 CALLrel _ksedst() 0
2
_ksedmp()+44 CALLrel _dbkedDefDump() 3 2
_ksfdmp()+56 CALLrel _ksedmp() 3EB
_dbgexPhaseII()+164 CALLreg 00000000 C378A28 3EB
_dbgexProcessError( CALLrel _dbgexPhaseII() E2B0454 E2B6E50 E6B6078
)+2061
_dbgeExecuteForErro CALLrel _dbgexProcessError( E2B0454 E2B6E50 1 0 E2B0454
r()+43 ) E2B6E50
__VInfreq__dbgePost CALLrel _dbgeExecuteForErro E2B0454 E2B6E50 0 1 0
ErrorKGE()+260 r()
_dbkePostKGE_kgsf() CALLrel _dbgePostErrorKGE() C378A28 E2BD274 258
+56
_kgeade()+299 CALLreg 00000000 C378A28 E2BD274 258
_kgeriv_int()+79 CALLrel _kgeade() C378A28 C378B50 E2BD274 258 0
FA0 0 0 0 1 E6B68A8
_kgeriv()+22 CALLrel _kgeriv_int() C378A28 E2BD274 FA0 0 1
E6B68A8
_kgeasi()+107 CALLrel _kgeriv() C378A28 E2BD274 FA0 1 E6B68A8
__VInfreq__ktuGetUs CALLrel _kgeasi() C378A28 E2BD274 FA0 2 1 0 6 0
egDba()+123
_ktrgcm()+5147 CALLrel _ktuGetUsegDba() 6 E6B6E78 0 0 E6B6F48 0
_ktrget2()+596 CALLrel _ktrgcm() F9FCEAC
_kdst_fetch()+816 CALLrel _ktrget2() F9FCEAC F9FCE24 303 0
_kdstf11001010000km CALLrel _kdst_fetch() 1 F9FCEA8 E6B71C8
()+2806
_kdsttgr()+5944 CALLrel _kdstf11001010000km F9FCEA8 0 557B044C F9FCDF8
() 2F0C3A6 E6B7894
_qertbFetch()+767 CALLrel _kdsttgr() F9FCEA8 0 557B044C F9FCDF8
557B0498 2F0C3A6 E6B7894 1
_opifch2()+2729 CALLptr 00000000 E6E7228 0 0 2 26180001
_opifch()+53 CALLrel _opifch2() 89 5 E6B7A04
_opiodr()+1248 CALLreg 00000000 5 2 E6B81FC
_rpidrus()+186 CALLrel _opiodr() 5 2 E6B81FC 2
_rpidru()+90 CALLrel _rpidrus() E6B7D58
_rpiswu2()+557 CALLrel _rpidru() E6B813C
_rpidrv()+1242 CALLrel _rpiswu2() 6D9A295C 0 6D9A29A8 2 E6B8184
0 6D9A2A28 0 0 544632 5448D6
E6B813C 8
_rpifch()+43 CALLrel _rpidrv() 2 5 E6B81FC 8
_kqlbebs()+1213 CALLrel _rpifch() 2 2 2 F013232 FA0 1 0 E6B8634
0 0 0 0 0
_kqlblfc()+175 CALLrel _kqlbebs() 0 E6BBBD4
_adbdrv()+16992 CALLrel _kqlblfc() 0 E6BBBD4
_opiexe()+13594 CALLrel _adbdrv() 4A 6E6CBC48 6DDEDB6C E6BBD68
6D60697 6E6CBC48
_opiosq0()+6248 CALLrel _opiexe() 4 0 E6BC734
_kpooprx()+277 CALLrel _opiosq0() 3 E E6BC9A0 A4 0
_kpoal8()+632 CALLrel _kpooprx() E6BF0A4 E6BD420 1B 1 0 A4
_opiodr()+1248 CALLreg 00000000 5E 1C E6BF0A0
_ttcpip()+1051 CALLreg 00000000 5E 1C E6BF0A0 0
_opitsk()+1404 CALL??? 00000000 C3832A8 5E E6BF0A0 0 E6BED30
E6BF1CC 53E52E 0 E6BF1F8
_opiino()+980 CALLrel _opitsk() 0 0
_opiodr()+1248 CALLreg 00000000 3C 4 E6BFBF4
_opidrv()+1201 CALLrel _opiodr() 3C 4 E6BFBF4 0
_sou2o()+55 CALLrel _opidrv() 3C 4 E6BFBF4
_opimai_real()+124 CALLrel _sou2o() E6BFC04 3C 4 E6BFBF4
_opimai()+125 CALLrel _opimai_real() 2 E6BFC2C
_OracleThreadStart@ CALLrel _opimai() 2 E6BFF6C 7C9BA7F4 E6BFC34 0
4()+830 E6BFD04
7C82484C CALLreg 00000000 E5BFF9C 0 0 E5BFF9C 0 E6BFFC4
00000000 CALL??? 00000000
--------------------- Binary Stack Dump ---------------------
Block header dump: 0x0040020b
Object id on Block? Y
seg/obj: 0x3b csc: 0x00.27508136 itc: 1 flg: O typ: 1 - DATA
fsl: 0 fnx: 0x0 ver: 0x01
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x0006.015.0005e9e9 0x00c0052c.916f.10 --U- 1 fsc 0x0000.27508263
报错比较明显该block比较异常,通过bbed修改相关block信息,相关处理参考:
重现ORA-600 4000异常
通过bbed解决ORA-00600[4000]案例
记录一次ORA-600 4000数据库故障恢复
ORACLE 8.1.7 数据库ORA-600 4000故障恢复
处理之后数据库正常open
Fri Nov 30 15:57:34 2018
SMON: enabling cache recovery
Successfully onlined Undo Tablespace 2.
Verifying file header compatibility for 11g tablespace encryption..
Verifying 11g file header compatibility for tablespace encryption completed
SMON: enabling tx recovery
Database Characterset is ZHS16GBK
No Resource Manager plan active
replication_dependency_tracking turned off (no async multimaster replication found)
Fri Nov 30 15:57:38 2018
Starting background process QMNC
Fri Nov 30 15:57:38 2018
QMNC started with pid=23, OS id=1152
Completed: alter database open