暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

access$表在数据库丢失的恢复

黄廷忠 2019-06-18
1041

问题描述

1,数据库版本

www.htz.pw > select * from v$version;
 
BANNER
——————————————————————————–
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 – 64bit Production
PL/SQL Release 11.2.0.3.0 – Production
CORE    11.2.0.3.0      Production
TNS for Linux: Version 11.2.0.3.0 – Production
NLSRTL Version 11.2.0.3.0 – Production

2,启动报错

www.htz.pw > startup force
ORACLE instance started.
 
Total System Global Area  237998080 bytes
Fixed Size                  2227216 bytes
Variable Size             197133296 bytes
Database Buffers           33554432 bytes
Redo Buffers                5083136 bytes
Database mounted.
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
Process ID: 5599
Session ID: 1 Serial number: 5
 
 
alert下面报这个错误
这里报递归的SQL出现错误,原因表不存在。下面alert中的日志内容
 
Completed redo scan
 read 90 KB redo, 65 data blocks need recovery
Started redo application at
 Thread 1: logseq 89, block 76381
Recovery of Online Redo Log: Thread 1 Group 2 Seq 89 Reading mem 0
  Mem# 0: /oracle/app/oracle/oradata/orcl1123/redo02.log
Completed redo application of 0.06MB
Completed crash recovery at
 Thread 1: logseq 89, block 76561, scn 3062096
 65 data blocks read, 65 data blocks written, 90 redo k-bytes read
Thread 1 advanced to log sequence 90 (thread open)
Thread 1 opened at log sequence 90
  Current log# 3 seq# 90 mem# 0: /oracle/app/oracle/oradata/orcl1123/redo03.log
Successful open of redo thread 1
MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set
SMON: enabling cache recovery
Errors in file /oracle/app/oracle/diag/rdbms/orcl1123/orcl1123/trace/orcl1123_ora_5599.trc:
ORA-00704: bootstrap process failure
ORA-00604: error occurred at recursive SQL level 1
ORA-00942: table or view does not exist
Errors in file /oracle/app/oracle/diag/rdbms/orcl1123/orcl1123/trace/orcl1123_ora_5599.trc:
ORA-00704: bootstrap process failure
ORA-00604: error occurred at recursive SQL level 1
ORA-00942: table or view does not exist
Error 704 happened during db open, shutting down database
USER (ospid: 5599): terminating the instance due to error 704
Instance terminated by USER, pid = 5599
ORA-1092 signalled during: ALTER DATABASE OPEN…
opiodr aborting process unknown ospid (5599) as a result of ORA-1092
Tue Jun 10 20:41:24 2014
ORA-1092 : opitsk aborting process
Tue Jun 10 20:41:39 2014
Starting ORACLE instance (normal)
 
下面通过10046的方法来实现具体在那条语句报错
[oracle@www.htz.pw sql]$sqlplus / as sysdba
 
SQL*Plus: Release 11.2.0.3.0 Production on Tue Jun 10 20:41:37 2014
 
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
 
Connected to an idle instance.
 
www.htz.pw > startup mount;
ORACLE instance started.
 
Total System Global Area  237998080 bytes
Fixed Size                  2227216 bytes
Variable Size             197133296 bytes
Database Buffers           33554432 bytes
Redo Buffers                5083136 bytes
Database mounted.
www.htz.pw > oradebug setmypid
Statement processed.
www.htz.pw > oradebug event 10046 trace name context forever,level 12;
Statement processed.
www.htz.pw > oradebug tracefile_name;
/oracle/app/oracle/diag/rdbms/orcl1123/orcl1123/trace/orcl1123_ora_5691.trc
www.htz.pw > alter database open;
alter database open
*
ERROR at line 1:
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
Process ID: 5691
Session ID: 1 Serial number: 5
 
 
这里可以看到是表access$表不存在
PARSE ERROR #182956478584:len=56 dep=1 uid=0 oct=3 lid=0 tim=1402404227784268 err=942
select order#,columns,types from access$ where d_obj#=:1
ORA-00704: bootstrap process failure
ORA-00604: error occurred at recursive SQL level 1
ORA-00942: table or view does not exist
ORA-00704: bootstrap process failure
ORA-00604: error occurred at recursive SQL level 1
ORA-00942: table or view does not exist
 
*** 2014-06-10 20:43:47.784
USER (ospid: 5691): terminating the instance due to error 704
EXEC #182936776088:c=152978,e=465517,p=58,cr=764,cu=0,mis=0,r=0,dep=0,og=1,plh=0,tim=1402404227824845
ERROR #182936776088:err=1092 tim=1402404227824898


专家解答

3,重建access$基表

建议的办法很简单,重启到数据库到upgrade模式,重建基表就可以了。

create table access$                                         /* access table */
( d_obj#        number not null,                  /* dependent object number */
  order#        number not null,                  /* dependency order number */
  columns       raw("M_BVCO"),                /* list of cols for this entry */
  types         number not null)                             /* access types */
  storage (initial 10k next 100k maxextents unlimited pctincrease 0)
/
 
 
 
create index i_access1 on
  access$(d_obj#, order#)
  storage (initial 10k next 100k maxextents unlimited pctincrease 0)
 
/
 
 
www.htz.pw > create table access$                                         /* access table */
  2  ( d_obj#        number not null,                  /* dependent object number */
  3    order#        number not null,                  /* dependency order number */
  4    columns       raw("M_BVCO"),                /* list of cols for this entry */
  5    types         number not null)                             /* access types */
  6    storage (initial 10k next 100k maxextents unlimited pctincrease 0)
  7  /
  columns       raw("M_BVCO"),                /* list of cols for this entry */
                    *
ERROR at line 4:
ORA-00910: specified length too long for its datatype
 
 
在其它相同的版本看到这个是126,但是不知道为什么从脚本弄出来的是一个字符串
 
SQL> desc access$;
 Name                                      Null?    Type
 —————————————– ——– —————————-
 D_OBJ#                                    NOT NULL NUMBER
 ORDER#                                    NOT NULL NUMBER
 COLUMNS                                            RAW(126)
 TYPES                                     NOT NULL NUMBER
 
create table access$                                         /* access table */
( d_obj#        number not null,                  /* dependent object number */
  order#        number not null,                  /* dependency order number */
  columns       raw(126),                /* list of cols for this entry */
  types         number not null)                             /* access types */
  storage (initial 10k next 100k maxextents unlimited pctincrease 0)
/
 
www.htz.pw > create table access$                                         /* access table */
  2  ( d_obj#        number not null,                  /* dependent object number */
  3    order#        number not null,                  /* dependency order number */
  4    columns       raw(126),                /* list of cols for this entry */
  5    types         number not null)                             /* access types */
  6    storage (initial 10k next 100k maxextents unlimited pctincrease 0)
  7  /
 
Table created.
 
www.htz.pw > create index i_access1 on
  2    access$(d_obj#, order#)
  3    storage (initial 10k next 100k maxextents unlimited pctincrease 0)
  4 
www.htz.pw > /
 
Index created.
 
 
www.htz.pw > startup force;
ORACLE instance started.
 
Total System Global Area  237998080 bytes
Fixed Size                  2227216 bytes
Variable Size             197133296 bytes
Database Buffers           33554432 bytes
Redo Buffers                5083136 bytes
Database mounted.
Database opened.


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论