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

相关推荐
点灯小铭4 分钟前
基于单片机的四沟道步进电机玉米补种机设计与实现
数据库·单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
清风66666614 分钟前
基于单片机的双机串口通信与数字串存储系统设计
数据库·单片机·mongodb·毕业设计·课程设计·期末大作业
数据库知识分享者小北23 分钟前
AI Agent越用越笨?阿里云AnalyticDB「AI上下文工程」一招破解!
数据库
一匹电信狗1 小时前
【MySQL】数据库表的操作
linux·运维·服务器·数据库·mysql·ubuntu·小程序
api_180079054601 小时前
性能优化揭秘:将淘宝商品 API 响应时间从 500ms 优化到 50ms 的技术实践
大数据·数据库·性能优化·数据挖掘
白衣鸽子1 小时前
MySQL 时间类型深度解析:精度、时区陷阱与版本兼容
数据库·后端·mysql
冲上云霄的Jayden1 小时前
MySQL InnoDB 状态(SHOW ENGINE INNODB STATUS)深度分析与性能优化建议
数据库·mysql·性能优化·innodb
元闰子2 小时前
怎么让程序更高效地连起来?
数据库·redis·mysql
洲覆2 小时前
Redis 内存淘汰策略
开发语言·数据库·redis·缓存
胖头鱼的鱼缸(尹海文)3 小时前
数据库管理-第376期 Oracle AI DB 23.26新特性一览(20251016)
数据库·人工智能·oracle