Oracle UNDO表空间文件误删除故障恢复

Oracle UNDO表空间文件误删除故障恢复

本篇针对Oracle数据库UNDO表空间数据文件误删除后的两类典型故障场景


故障场景一:数据库未关闭,执行shutdown immediate报错

故障现象

UNDO表空间文件误删除后,数据库仍处于运行状态,执行正常关闭命令触发文件打开失败报错,核心报错信息如下:

Plain 复制代码
SQL> shutdown immediate;
ORA-01116: error in opening database file 3
ORA-01110: data file 3: '/u01/app/oracle/oradata/orcl/datafile/undotbs1.258.1218675403'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory

恢复前提

数据库进程未终止,系统仍保留误删除文件的进程句柄,可通过进程fd目录找回文件。

实际操作命令

  1. 查找误删除文件的进程句柄
    执行命令筛选已删除的UNDO文件关联进程,精准定位文件描述符编号与对应进程PID,为后续文件还原做准备。
  • 通用查询:筛选所有已删除文件关联进程

    lsof | grep deleted

  • 精准查询:直接定位目标误删UNDO文件

    lsof | grep undotbs1.258.1218675403

  1. 进入对应进程文件描述符目录
    将命令中的PID替换为上一步查询到的数据库进程号,查看目录下文件描述符详情。

    cd /proc/13412/fd
    ll

  1. 复制句柄文件还原至原路径
    替换命令中的文件描述符编号和UNDO文件原路径。
shell 复制代码
cp 257 /u01/app/oracle/oradata/orcl/datafile/undotbs1.258.1218675403
  1. 正常关闭并启动数据库,完成文件恢复
    文件还原后,执行数据库关闭、启动及数据文件恢复命令,最终正常打开数据库。

    shutdown immediate;

启动数据库至mount状态

复制代码
startup mount;

恢复指定UNDO数据文件

复制代码
recover datafile 3;

正常打开数据库

复制代码
alter database open;

故障场景二:文件误删除后,数据库正常关闭无报错,重启后开库失败

故障现象

UNDO文件误删除后,数据库正常关闭未触发报错,重启后ALTER日志报错,启动数据库提示无法识别锁定数据文件,核心报错:

Plain 复制代码
ORA-01157: cannot identify/lock data file 3 - see DBWR trace file
ORA-01110: data file 3: '/u01/app/oracle/oradata/orcl/datafile/undotbs1.258.1218675403'

实际操作命令

  • 尝试切换UNDO管理模式为手动

    alter system set undo_management=MANUAL SCOPE=SPFILE;

  • 将undotbs1.258.1218675403下线后重启

    alter database datafile '/u01/app/oracle/oradata/orcl/datafile/undotbs1.258.1218675403' offline;
    shutdown immediate;
    startup;

  • 设置UNDO为新的UNDO 并且将控制文件中的表空间信息删除

    create undo tablespace undotbs3 DATAFILE '/u01/app/oracle/oradata/orcl/datafile/undotbs3.dbf' size 70M ;

    alter system set undo_tablespace='undotbs3' SCOPE=SPFILE;

  • 重启数据库

    startup;

  • 删除表空间文件

    DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;


实践附加故障及解决方案

故障1:文件一致性恢复报错

报错信息

复制代码
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: /u01/app/oracle/oradata/orcl/datafile/system.256.1218675401

解决步骤

  1. 设置隐含参数,允许重置日志修复数据文件一致性损坏,修改参数至spfile文件。

    alter system set _allow_resetlogs_corruption= TRUE SCOPE=SPFILE;

  2. 重启数据库,重新执行不完全恢复及resetlogs开库操作,完成修复。

    shutdown;
    immediate;
    startup mount;
    recover database using backup controlfile until cancel;
    ALTER DATABASE OPEN RESETLOGS;

故障2:数据字典缺失系统表空间文件报错

报错信息

复制代码
ORA-01173: data dictionary indicates missing data file from system tablespace

解决步骤

  1. 提取系统数据文件中的回滚段信息,导出至临时日志文件,方便后续整理。

    strings /u01/app/oracle/oradata/orcl/datafile/system.256.1218675401 |grep _SYSSMU /tmp/systemSMU.log

  2. 整理导出的日志文件,对回滚段名称去重,剔除格式异常、无效的条目,保留标准_SYSSMU开头的回滚段名称。

  3. 修改数据库参数文件pfile,添加手动UNDO管理参数,同时配置损坏回滚段屏蔽参数,将整理后的所有有效回滚段填入参数内。

    *.undo_management=manual;

    *._CORRUPTED_ROLLBACK_SEGMENTS=(_SYSSMU4_1254879796,_SYSSMU3_1723003836,其余去重后回滚段名称)

  4. 使用修改后的pfile手动启动数据库,重新执行控制文件重建、不完全恢复流程,完成最终修复。

    startup pfile=/u01/app/oracle/product/11g/db/dbs/initorcl.ora;
    nomount;

后续重复执行控制文件重建、恢复、开库步骤


相关推荐
广州灵眸科技有限公司7 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
Cloud云卷云舒9 小时前
云卷云舒:从Oracle/MySQL迁移到HaishanDB:迁移评估工具核心技术拆解
mysql·oracle·ai-native·haishandb·信创数据库替换
憧憬成为web高手9 小时前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
段一凡-华北理工大学10 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
oradh11 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
z1234567898612 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD12 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
java_logo13 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程
TlSfoward13 小时前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php
数智化管理手记14 小时前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘