ITPub博客

首页 > 数据库 > Oracle > 某石化企业控制文件不一致的处理过程

某石化企业控制文件不一致的处理过程

原创 Oracle 作者:lucy_lxy 时间:2015-01-08 11:39:10 0 删除 编辑
 

平台WIN7ORACLE版本10.2.03

某日用户启动应用的时候报错,连接上去后发现监听有问题。配置完监听后,启动数据库出现错误,提示控制文件不一致:

C:\Users\lenovo>sqlplus /nolog

SQL*Plus: Release 10.2.0.3.0 - Production on 星期一 1 5 09:26:49 2015

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

SQL> conn / as sysdba;

已连接。

SQL> startup mount;

ORACLE 例程已经启动。

Total System Global Area 1241513984 bytes

Fixed Size                  1292108 bytes

Variable Size             318769332 bytes

Database Buffers          914358272 bytes

Redo Buffers                7094272 bytes

ORA-00214: ???? ''C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL02.CTL'' ?? 2123

??? ''C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL01.CTL'' ?? 2120 ???

在资源管理器中查看,3个控制文件的大小是完全一致的,时间也没什么区别。于是根据错误提示着手开始恢复,首先关闭数据库:

SQL> shutdown immediate;

ORA-01507: ??????

ORACLE 例程已经关闭。

使用spfile创建PFILE

SQL> create pfile from spfile;

文件已创建。

接下来用稍大的控制文件C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL02.CTL'替代CONTROL01.CTL,重新启动数据库

SQL> startup mount;

ORACLE 例程已经启动。

Total System Global Area 1241513984 bytes

Fixed Size                  1292108 bytes

Variable Size             318769332 bytes

Database Buffers          914358272 bytes

Redo Buffers                7094272 bytes

ORA-00214: ???? ''C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL01.CTL'' ?? 2123

??? ''C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL03.CTL'' ?? 2120 ???

看来仍然还是控制文件不一致。用控制文件CONTROL02.CTL替代CONTROL03.CTL,重新启动数据库:

SQL> shutdown immediate;

ORA-01507: ??????

ORACLE 例程已经关闭。

SQL> startup mount;

ORACLE 例程已经启动。

Total System Global Area 1241513984 bytes

Fixed Size                  1292108 bytes

Variable Size             318769332 bytes

Database Buffers          914358272 bytes

Redo Buffers                7094272 bytes

数据库装载完毕。

控制文件已同步,已完成装载。接下来尝试打开数据库:

SQL> alter database open;

alter database open

*

1 行出现错误:

ORA-00322: 日志 1 (用于线程 1) 不是当前副本

ORA-00312: 联机日志 1 线程 1:

'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG'

进入资源管理器,看到几个日志文件还是去年12月份的日期。使用选项resetlogs打开也不成功:

SQL> alter database open resetlogs;

alter database open resetlogs

*

1 行出现错误:

ORA-01139: RESETLOGS 选项仅在不完全数据库恢复后有效

按照日志文件丢失来处理,首先查看系统视图:

SQL> select * from v$logfile;

 GROUP# STATUS  TYPE  MEMBER   IS_

----------  -------   -------   ------------------------------------------------------------              ---

  3     STALE   ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO03.LOG  NO

  2     STALE   ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO02.LOG  NO

  1     STALE   ONLINE C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\REDO01.LOG  NO

SQL> select * from v$log;

GROUP#  THREAD#  SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME

---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------------

 1          1         95   52428800          1 NO  CURRENT 3933539 29-12-14

 3          1         94   52428800          1 NO  INACTIVE 3892940 26-12-14

 2          1          0   52428800          1 NO  UNUSED  0 25-12-14           

通过查询,可以看到当前在用日志文件是第一组,于是清除余下的2组日志

SQL> alter database clear unarchived logfile group 2;

数据库已更改。

SQL> alter database clear unarchived logfile group 3;

数据库已更改。

继续恢复数据库:

SQL> recover database until cancel;

ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误

ORA-01194: 文件 1 需要更多的恢复来保持一致性

ORA-01110: 数据文件 1: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF'

SQL> alter database open resetlogs;

alter database open resetlogs

*

1 行出现错误:

ORA-01194: 文件 1 需要更多的恢复来保持一致性

ORA-01110: 数据文件 1: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF'

尝试恢复数据文件:

SQL> recover datafile  'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF';

ORA-00283: 恢复会话因错误而取消

ORA-00264: 不要求恢复

SQL> alter database open resetlogs;

alter database open resetlogs

*

1 行出现错误:

ORA-01194: 文件 1 需要更多的恢复来保持一致性

ORA-01110: 数据文件 1: 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF'

使用写字板编辑新的pfile 文件:C:\ORACLE\PRODUCT\10.2.0\DB_1\DBS\INITORCL.ORA

添加隐含参数:_allow_resetlogs_corruption=TRUE

SQL> select * from v$log;

GROUP#  THREAD#  SEQUENCE#  BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME

---------- ---------- ---------- ---------- ---------- --- ------------------ ----------- --------------

 1          1         95   52428800          1 NO  CURRENT 3933539 29-12-14

 3          1          0   52428800          1 NO  UNUSED 3892940 26-12-14

 2          1          0   52428800          1 NO  UNUSED 0 25-12-14

           

SQL> shutdown immediate;

ORA-01109: 数据库未打开

已经卸载数据库。

ORACLE 例程已经关闭。

创建新的SPFILE,然后重启数据库:

SQL> create spfile from pfile;

文件已创建。

SQL> startup;

ORACLE 例程已经启动。

Total System Global Area 1241513984 bytes

Fixed Size                  1292108 bytes

Variable Size             318769332 bytes

Database Buffers          914358272 bytes

Redo Buffers                7094272 bytes

数库装载完毕。

ORA-01589: 要打开数据库则必须使用 RESETLOGS NORESETLOGS 选项

再次尝试打开数据库:

SQL> alter database open resetlogs;

数据库已更改。

SQL>

OK,恢复完毕。备份数据后,编辑PFILE,去除隐含参数_allow_resetlogs_corruption后,再次关闭数据库,创建新的SPFILE,然后启动数据库。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7177735/viewspace-1394392/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2010-09-27

  • 博文量
    124
  • 访问量
    349031