平台WIN7,ORACLE版本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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7177735/viewspace-1394392/