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删除,此次故障应该是误删基表导致

相关推荐
l1t4 分钟前
DeepSeek总结的PostgreSQL 无需生产数据,即可获取生产查询计划
数据库·postgresql
m0_730115117 分钟前
用户认证与授权:使用JWT保护你的API
jvm·数据库·python
Irissgwe23 分钟前
Mysql数据库基础
数据库·c++·mysql·mysql数据库基础
qq_3349031527 分钟前
用Python实现自动化的Web测试(Selenium)
jvm·数据库·python
一只努力的微服务37 分钟前
【Calcite 系列】深入理解 Calcite 的 AggregateFilterTransposeRule
大数据·数据库·calcite·优化规则
m0_5180194839 分钟前
使用Python操作文件和目录(os, pathlib, shutil)
jvm·数据库·python
轩情吖40 分钟前
MySQL Connect
数据库·mysql·adb·select·连接·远程访问数据库
lifewange43 分钟前
SQL中的聚合函数有哪些
android·数据库·sql
阿贵---1 小时前
使用Python进行PDF文件的处理与操作
jvm·数据库·python
稻草猫.1 小时前
MyBatis-Plus高效开发全攻略
java·数据库·后端·spring·java-ee·mybatis·mybatis-plus