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数据库尽量不要强行断电。控制文件、参数文件一定要做好备份。

相关推荐
许彰午几秒前
01-Oracle数据库简介与版本选择
数据库·oracle
菜鸟~noob23315 分钟前
【电子战】第三季预告—波武器与电子系统强力毁伤
开发语言·数据库·matlab·电子战
Seraphina362 小时前
SQL注入(二)盲注
网络·数据库·经验分享·笔记·sql
盟接之桥3 小时前
AI助手:你的7×24小时智能管家——让异常预警无处不在
大数据·网络·数据库·人工智能·制造·ai编程
waoooqwe3 小时前
问卷样本真实吗
大数据·数据库·算法·数据分析
可乐ea4 小时前
Agent 评测换判据:用终态数据库状态判定任务是否完成
数据库·ui·oracle·mcp工具·agent评测·终态断言·智能体可靠性
l1t4 小时前
DeepSeek总结的一个不含数据的 DuckDB 数据库
服务器·数据库·duckdb
PaperData5 小时前
2007-2020年税收调查面板数据
数据库
程序员清风5 小时前
CSV、Excel 与数据库数据读取实践
数据库·oracle·excel
GEO实战经验分享6 小时前
GEO技术与工具全景:从监测仪表盘到Schema的实战指南
数据库