ORA-00942: table or view does not exist实例无法启动问题

一线提出数据库实例(Oracle 19c)无法启动,也不存在dest状态的共享内存,查看alert日志,报错如下:

发现在open阶段校验失败,系统表缺失,backup validate datafile 1,3系统数据文件也没有数据坏块。

1、开10046 trace确认哪张表缺失

mount数据库

oradebug setmypid

oradebug tracefile_name

oradebug event 10046 trace name context forever,level 12;

alter database open;

查看trace文件,发现access$表缺失

2、在同版本的数据库中查到access表的定义以及其索引
sql 复制代码
set lines 400 pages 9999 long 9999;
select dbms_metadata.get_ddl('TABLE','ACCESS$','SYS') from dual;

SELECT OWNER,INDEX_NAME FROM DBA_INDEXES WHERE TABLE_NAME='ACCESS$';

select dbms_metadata.get_ddl('INDEX','I_ACCESS1','SYS') from dual;
3、尝试将数据库启动并创建access$表

startup upgrade --可能较慢,需要等会

upgrade模式启动数据库只允许sysdba用户登录,允许数据字典表缺失

sql 复制代码
CREATE TABLE "SYS"."ACCESS$" 
   (    "D_OBJ#" NUMBER NOT NULL ENABLE,
        "ORDER#" NUMBER NOT NULL ENABLE,
        "COLUMNS" RAW(126),
        "TYPES" NUMBER NOT NULL ENABLE
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
  TABLESPACE "SYSTEM";
  
CREATE INDEX "SYS"."I_ACCESS1" ON "SYS"."ACCESS$" ("D_OBJ#", "ORDER#")  TABLESPACE "SYSTEM";
4、normal模式重启数据库

由于startup upgrade的限制,需要normal模式重启数据库

shutdown immediate

startup

此时不再报错,及时将数据库备份恢复到其他正常库

5、复盘

access$表是一个系统表,存储library cache中的对象,此基表可被sysdba删除,此次故障应该是误删基表导致

相关推荐
BearHan4 分钟前
Sqlsugar调用Oracle的存储过程
oracle·存储过程·orm
superman超哥19 分钟前
04 深入 Oracle 并发世界:MVCC、锁、闩锁、事务隔离与并发性能优化的探索
数据库·oracle·性能优化·dba
engchina1 小时前
Neo4j 和 Python 初学者指南:如何使用可选关系匹配优化 Cypher 查询
数据库·python·neo4j
engchina1 小时前
使用 Cypher 查询语言在 Neo4j 中查找最短路径
数据库·neo4j
尘浮生1 小时前
Java项目实战II基于Spring Boot的光影视频平台(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·maven·intellij-idea
威哥爱编程1 小时前
SQL Server 数据太多如何优化
数据库·sql·sqlserver
小华同学ai1 小时前
AJ-Report:一款开源且非常强大的数据可视化大屏和报表工具
数据库·信息可视化·开源
Acrelhuang2 小时前
安科瑞5G基站直流叠光监控系统-安科瑞黄安南
大数据·数据库·数据仓库·物联网
Mephisto.java2 小时前
【大数据学习 | kafka高级部分】kafka的kraft集群
大数据·sql·oracle·kafka·json·hbase
Mephisto.java2 小时前
【大数据学习 | kafka高级部分】kafka的文件存储原理
大数据·sql·oracle·kafka·json