Oracle(ORA-00214)-undo表空间文件损坏

现象描述

数据库所在机器异常断电导致启动失败,系统显示如下错误信息:

bash 复制代码
ORA-00214: control file '/opt/oracle/db/oradata/iptvmdn/lv_control2tbs' version
117553 inconsistent with file '/opt/oracle/db/oradata/iptvmdn/lv_control1tbs'

可能原因

异常断电导使undo表空间文件损坏,数据库启动失败。
处理步骤

  1. 以oracle用户登录数据库所在机器。
  2. 以sysdba用户连接数据库。
bash 复制代码
% sqlplus / as sysdba
  1. 通过spfile文件创建一个临时的pfile文件。
bash 复制代码
SQL> create pfile='$ORACLE_HOME/dbs/temp_pfile_ora' from spfile;
  1. 退出sqlplus
bash 复制代码
SQL> quit
  1. 在该pfile文件最后添加*.undo_management='MANUAL'。
bash 复制代码
% vi $ORACLE_HOME/dbs/temp_pfile_ora

在此文件最后添加*.undo_management='MANUAL'。

注:在MANUAL模式无法切换undo表空间。

  1. 以sysdba用户连接数据库。
bash 复制代码
% sqlplus / as sysdba
  1. 使用临时pfile文件启动数据库。
bash 复制代码
SQL> startup pfile=$ORACLE_HOME/dbs/temp_pfile_ora;

如果还是无法启动数据库,可以将表空间文件offline。

数据库启动成功,显示如下信息。

bash 复制代码
ORACLE instance started.

Total System Global Area 4142166016 bytes
Fixed Size                  2166208 bytes
Variable Size            2214593088 bytes
Database Buffers         1912602624 bytes
Redo Buffers               12804096 bytes
Database mounted.
Database opened.
  1. 查看并记录回滚段信息。
bash 复制代码
SQL> select SEGMENT_NAME from dba_rollback_segs;
  1. 关闭数据库。
bash 复制代码
SQL> shutdown immediate;
  1. 修改临时pfile文件。
    a.删除"*.undo_management='MANUAL'"。
    b. 添加如下内容。
bash 复制代码
_corrupted_rollback_segments=(_SYSSMU1_1192403689$,_SYSSMU2_1192403689$,_SYSSMU3_1192403689$,_SYSSMU4_1192403689$,_SYSSMU5_1192403689$,_SYSSMU6_1192403689$,_SYSSMU7_1192403689$,_SYSSMU8_1192403689$,_SYSSMU9_1192403689$,_SYSSMU10_1192403689$)

括号中的内容为8中的查询结果。

  1. 使用临时pfile文件启动数据库。
bash 复制代码
SQL> startup pfile=$ORACLE_HOME/dbs/temp_pfile_ora;

启动成功,系统显示如下信息:

bash 复制代码
ORACLE instance started.

Total System Global Area 4142166016 bytes
Fixed Size                  2166208 bytes
Variable Size            2214593088 bytes
Database Buffers         1912602624 bytes
Redo Buffers               12804096 bytes
Database mounted.
Database opened.
  1. 重建undo表空间。
bash 复制代码
SQL> CREATE UNDO TABLESPACE undotbs02 DATAFILE '/var/tmp/cssd_mdn/myundo.dbf' SIZE 2G;

SQL> alter system set undo_tablespace = undotbs2;

SQL> drop tablespace UNDOTBS1 including contents cascade constraints;

SQL> CREATE UNDO TABLESPACE undotbs01 DATAFILE '/dev/oramdn_dg/lv_undotbs' size 9G;

SQL> autoextentd off;

SQL> alter system set undo_tablespace = UNDOTBS1;
  1. 关闭数据库。
bash 复制代码
SQL> shutdown immediate;
  1. 重启数据库。
bash 复制代码
SQL> startup

启动成功,系统显示如下信息:

bash 复制代码
OORACLE instance started.

Total System Global Area 4142166016 bytes
Fixed Size                  2166208 bytes
Variable Size            2214593088 bytes
Database Buffers         1912602624 bytes
Redo Buffers               12804096 bytes
Database mounted.
Database opened.

建议与总结

Oralce数据库尽量不要强行断电。控制文件、参数文件一定要做好备份。

相关推荐
明月醉窗台31 分钟前
qt使用笔记二:main.cpp详解
数据库·笔记·qt
沉到海底去吧Go1 小时前
【图片自动识别改名】识别图片中的文字并批量改名的工具,根据文字对图片批量改名,基于QT和腾讯OCR识别的实现方案
数据库·qt·ocr·图片识别自动改名·图片区域识别改名·pdf识别改名
老纪的技术唠嗑局1 小时前
重剑无锋,大巧不工 —— OceanBase 中的 Nest Loop Join 使用技巧分享
数据库·sql
未来之窗软件服务2 小时前
JAVASCRIPT 前端数据库-V6--仙盟数据库架构-—-—仙盟创梦IDE
数据库·数据库架构·仙盟创梦ide·东方仙盟·东方仙盟数据库
一只爱撸猫的程序猿3 小时前
构建一个简单的智能文档问答系统实例
数据库·spring boot·aigc
nanzhuhe3 小时前
sql中group by使用场景
数据库·sql·数据挖掘
消失在人海中4 小时前
oracle sql 语句 优化方法
数据库·sql·oracle
Clang's Blog4 小时前
一键搭建 WordPress + MySQL + phpMyAdmin 环境(支持 PHP 版本选择 & 自定义配置)
数据库·mysql·php·wordpr
zzc9214 小时前
MATLAB仿真生成无线通信网络拓扑推理数据集
开发语言·网络·数据库·人工智能·python·深度学习·matlab
未来之窗软件服务4 小时前
JAVASCRIPT 前端数据库-V1--仙盟数据库架构-—-—仙盟创梦IDE
数据库·数据库架构·仙盟创梦ide·东方仙盟数据库