ORA-00214 控制文件版本不一致恢复过程

来源:互联网 发布:百鸡问题的最简单算法 编辑:程序博客网 时间:2024/05/21 18:40

ORA-00214 控制文件版本不一致恢复过程

       早上上班,一个测试的10G数据库宕掉了,据开发的说,周末的时候曾经断电了,故障原因和解决过程如下:


[oracle@spreader oracle]$ sqlplus /nolog
[uniread] Loaded history (2158 lines)

SQL*Plus: Release 10.1.0.2.0 - Production on Mon Feb 27 11:37:09 2006

Copyright (c) 1982, 2004, Oracle.  All rights reserved.

SQL> connect / as sysdba
Connected.
SQL> startup
ORA-01081: cannot start already-running ORACLE - shut it down first
SQL> shutdown immediate
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area  188743680 bytes
Fixed Size                   778036 bytes
Variable Size             162275532 bytes
Database Buffers           25165824 bytes
Redo Buffers                 524288 bytes
ORA-00214: controlfile '/home/oracle/oradata/item/control01.ctl' version 10232896 inconsistent with file
'/home/oracle/oradata/item/control02.ctl' version 9190433

Disconnected from Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
With the Partitioning and Data Mining options
[uniread] Saved history (2163 lines)

SQL> create pfile='/home/oracle/init.ora' from spfile;

File created.

编辑init.ora,把'/home/oracle/oradata/item/control02.ctl'去掉,然后再重启数据库

[oracle@spreader oracle]$ sqlplus /nolog
SQL> connect / as sysdba
Connected to an idle instance.
SQL> create spfile from pfile='/home/oracle/init.ora';
ERROR:
ORA-01034: ORACLE not available
File created.
SQL> shutdown immediate
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> startup nomount
ORACLE instance started.

Total System Global Area  188743680 bytes
Fixed Size                   778036 bytes
Variable Size             162275532 bytes
Database Buffers           25165824 bytes
Redo Buffers                 524288 bytes
SQL> alter database mount;
alter database mount
*
ERROR at line 1:
ORA-00214: controlfile '/home/oracle/oradata/item/control01.ctl' version 10232896 inconsistent with file
'/home/oracle/oradata/item/control03.ctl' version 9190433

再编辑init.ora,把'/home/oracle/oradata/item/control03.ctl'去掉,然后再按照上面步骤重启数据库

SQL> startup nomount;
ORACLE instance started.

Total System Global Area  188743680 bytes
Fixed Size                   778036 bytes
Variable Size             162275532 bytes
Database Buffers           25165824 bytes
Redo Buffers                 524288 bytes
SQL> alter database mount;
alter database mount
*
ERROR at line 1:
ORA-00227: corrupt block detected in controlfile: (block 175, # blocks 1)
ORA-00202: controlfile: '/home/oracle/oradata/item/control01.ctl'

SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01507: database not mounted

唯一的控制文件都有问题了,FT,重新编辑init.ora文件,去掉控制文件一,而留下控制文件二和三,然后再重启数据库

SQL> startup nomount;
ORACLE instance started.

Total System Global Area  188743680 bytes
Fixed Size                   778036 bytes
Variable Size             162275532 bytes
Database Buffers           25165824 bytes
Redo Buffers                 524288 bytes
SQL> alter database mount;

Database altered.

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-16038: log 2 sequence# 2136 cannot be archived
ORA-19809: limit exceeded for recovery files
ORA-00312: online log 2 thread 1: '/home/oracle/oradata/item/redo02.log'

这下可以MOUNT起来了,但是出现ORA-19809,这个简单,就是recovery files空间满了引起的,再整理下这个空间,然后alter database open 就行了。

步骤:

1 首先删除掉没必要的备份,例如归档日志

2 进入RMAN整理空间

[oracle@spreader oracle]$ rman
RMAN> connect target /
RMAN> crosscheck archivelog all;
RMAN> delete expired archivelog all;

from:http://blog.itpub.net/post/6336/55862