ITPub博客

首页 > 数据库 > Oracle > 某企业控制文件损坏 回滚数据文件损坏实例二恢复过程

某企业控制文件损坏 回滚数据文件损坏实例二恢复过程

原创 Oracle 作者:lucy_lxy 时间:2014-08-19 16:37:33 0 删除 编辑

平台:windows xp

Oracle 817

非归档模式

时间:86日 周三下午3点后,7日 周四一天

 

   实例2 错误和实例1类似,但是允许拷贝所有数据文件,而且有了实例1的经验,能少走点弯路,2个来小时搞定了:

 

    在发出alter database mount命令时候出现:

ERROR 位于第 1 :

ORA-00214: ???? 'E:\ORACLE\ORADATA\FGSJYC\CONTROL03.CTL' ?? 18867 ???

'E:\ORACLE\ORADATA\FGSJYC\CONTROL01.CTL' ?? 18861 ???

 

    首先:备份所有数据文件到D盘,这步非常重要,最大限度地保护现场,以备出错后从头再来。并且这个实例的所有数据文件,日期都是73号的,比较一致,比第一个实例情况要好。

    其次:由错误信息得知:控制文件CONTROL03.CTL显示的是18867字节,和控制文件CONTROL01.CTL' 18861字节数不一致,尽管从资源管理器中看3个文件仍然都是一样大小的。于是关闭数据库,用控制文件CONTROL03.CTL 代替控制文件CONTROL01.CTL,重新启动数据库:

SQL>shutdown immediate;

SQL>startup mount;

显示 控制文件02 也是18861字节,再次关闭数据库,用控制文件03 代替控制文件02,重新启动数据库到MOUNT状态,成功!

SQL>shutdown immediate;

SQL>startup mount;

ORACLE 例程已经启动。

Total System Global Area  396675100 bytes                                      

Fixed Size                    75804 bytes                                      

Variable Size             121360384 bytes                                      

Database Buffers          275161088 bytes                                       

Redo Buffers                  77824 bytes                                      

数据库装载完毕。

 

    接下来尝试打开数据库:

SQL> alter database open;

alter database open

*

ERROR 位于第 1 :

ORA-01113: ?? 4 ??????

ORA-01110: ???? 4: 'E:\ORACLE\ORADATA\FGSJYC\TEMP01.DBF'

恢复中经常会碰到ORA-1113错误,这是由于数据库没有恢复到一个一致性的时刻。 一般情况下,使用备份的控制文件恢复过程中缺少联机日志文件会造成这个问题:

按照错误提示依次恢复出错的数据文件:

SQL> recover datafile 'E:\ORACLE\ORADATA\FGSJYC\TEMP01.DBF';

完成介质恢复。

SQL> alter database open;

alter database open

*

ERROR 位于第 1 :

ORA-01113: ?? 5 ??????

ORA-01110: ???? 5: 'E:\ORACLE\ORADATA\FGSJYC\TOOLS01.DBF'

SQL> recover datafile 'E:\ORACLE\ORADATA\FGSJYC\TOOLS01.DBF';

完成介质恢复。

SQL> alter database open;

alter database open

*

ERROR 位于第 1 :

ORA-01113: ?? 6 ??????

ORA-01110: ???? 6: 'E:\ORACLE\ORADATA\FGSJYC\INDX01.DBF'

SQL> recover datafile 'E:\ORACLE\ORADATA\FGSJYC\INDX01.DBF';

完成介质恢复。

SQL> alter database open;

alter database open

*

ERROR 位于第 1 :

ORA-01113: ?? 7 ??????

ORA-01110: ???? 7: 'E:\ORACLE\ORADATA\FGSJYC\DR01.DBF'

SQL> recover datafile 'E:\ORACLE\ORADATA\FGSJYC\DR01.DBF';

完成介质恢复。

SQL> alter database open;

alter database open

*

ERROR 位于第 1 :

ORA-01172: ??1???????4587????2??

ORA-01151: ?????????????????????

SQL> recover datafile 'E:\ORACLE\ORADATA\FGSJYC\SYSTEM01.DBF';

完成介质恢复。

唯独恢复回滚表空间时候出现:

SQL> recover datafile 'E:\ORACLE\ORADATA\FGSJYC\RBS01.DBF';

ORA-00283: ??????????

ORA-00600: ??????????: [3020], [8393195], [1], [4683], [39], [56], [], []

SQL> select SEGMENT_NAME,OWNER,TABLESPACE_NAME, initial_extent,NEXT_EXTENT,MIN_EXTENTS,MAX_EXTENTS, PCT_INCREASE from dba_rollback_segs;                                                                                                              *

ERROR 位于第 1 :

ORA-01219: ??????: ???????/?????  (数据库未打开)

SQL> select SEGMENT_NAME,OWNER,TABLESPACE_NAME, initial_extent,NEXT_EXTENT,MIN_EXTENTS,MAX_EXTENTS, PCT_INCREASE from V$ROLLBACK_SEGS;                                                                                                                *

ERROR 位于第 1 :

ORA-01219: ??????: ???????/????? (数据库未打开)

SQL> shutdown immediate;

ORA-01109: ??????

已经卸载数据库。

ORACLE 例程已经关闭。

尝试在init.ora加入隐含参数,去除损坏或者含未决事务的回滚段:

  _corrupted_rollback_segments= rbs0, rbs1, rbs2, rbs3, rbs4, rbs5, rbs6

启动数据库:

SQL> startup mount;

ORACLE 例程已经启动。

Total System Global Area  396675100 bytes                                       

Fixed Size                    75804 bytes                                      

Variable Size             121360384 bytes                                      

Database Buffers          275161088 bytes                                      

Redo Buffers                  77824 bytes                                      

数据库装载完毕。

SQL> alter database open;

alter database open

*

ERROR 位于第 1 :

ORA-01172: ??1???????4587????2??

ORA-01151: ?????????????????????

再次尝试恢复数据库

SQL> recover database;

ORA-00283: ??????????

ORA-00600: ??????????: [3020], [8393195], [1], [4683], [39], [56], [], []

SQL> shutdown immediate;

ORA-01109: ??????

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup mount;

ORACLE 例程已经启动。

Total System Global Area  396675100 bytes                                       

Fixed Size                    75804 bytes                                      

Variable Size             121360384 bytes                                      

Database Buffers          275161088 bytes                                       

Redo Buffers                  77824 bytes                                      

数据库装载完毕。

SQL> alter database open;

alter database open

*

ERROR 位于第 1 :

ORA-01172: ??1???????4587????2??

ORA-01151: ?????????????????????

再次恢复回滚表空间数据文件:

SQL> recover datafile 2;

ORA-00283: ??????????

ORA-00600: ??????????: [3020], [8393195], [1], [4683], [39], [56], [], []

依然是同样的错误!

SQL> select * from v$rollname;

select * from v$rollname

              *

ERROR 位于第 1 :

ORA-01219: ??????: ???????/????? (数据库未打开)

SQL> shutdown immeidate;

SP2-0717: 非法的 SHUTDOWN 选项

SQL> shutdown immediate;

ORA-01109: ??????

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup mount;

ORACLE 例程已经启动。

Total System Global Area  396675100 bytes                                      

Fixed Size                    75804 bytes                                      

Variable Size             121360384 bytes                                      

Database Buffers          275161088 bytes                                      

Redo Buffers                  77824 bytes                                       

数据库装载完毕。

SQL> alter database open;

alter database open

*

ERROR 位于第 1 :

ORA-01172: ??1???????4587????2??

ORA-01151: ?????????????????????

SQL> shutdown immediate;

ORA-01109: ??????

已经卸载数据库。

ORACLE 例程已经关闭。

仍然不行!此时查看数据文件目录,发现3个联机日志文件日期仍然是73号的,决定先解决联机日志文件丢失的问题:

 

SQL> startup mount pfile='e:\oracle\admin\fgsjyc\pfile\init.ora'

ORACLE 例程已经启动。

Total System Global Area  396675100 bytes                                      

Fixed Size                    75804 bytes                                      

Variable Size             121360384 bytes                                      

Database Buffers          275161088 bytes                                      

Redo Buffers                  77824 bytes                                      

数据库装载完毕。

SQL> alter database open;

alter database open

*

ERROR 位于第 1 :

ORA-01172: ??1???????4587????2??

ORA-01151: ?????????????????????

 

(查询了下ORA-01172: 线程1的恢复停止在块253011(在文件2中)

        ORA-01151: 如果需要,请使用媒体恢复以恢复块和恢复备份)

 

SQL> select * from v$logfile;

    GROUP# STATUS    MEMBER                                                                         

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

         1 STALE  E:\ORACLE\ORADATA\FGSJYC\REDO01.LOG                                            

         2 STALE  E:\ORACLE\ORADATA\FGSJYC\REDO02.LOG                                             

         3       E:\ORACLE\ORADATA\FGSJYC\REDO03.LOG                                            

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS              

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

FIRST_CHANGE# FIRST_TIME                                                       

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

         1          1       4681    1048576          1 NO  INACTIVE            

   1.0798E+13 03-7?  -14                                                       

         2          1       4682    1048576          1 NO  INACTIVE            

   1.0798E+13 03-7?  -14                                                        

         3          1       4683    1048576          1 NO  CURRENT             

   1.0798E+13 04-7?  -14 

3号文件为当前日志。                                                     

SQL> alter database clear unarchived logfile group 1;

数据库已更改。

SQL> alter database clear unarchived logfile group 2;

数据库已更改。

运行命令:

SQL> recover database until cancel;

ORA-00279: ?? 10797851961887 (? 07/04/2014 08:26:41 ??) ???? 1 ????

ORA-00289: ??: E:\ORACLE\ORA81\RDBMS\ARC04683.001

ORA-00280: ?? 10797851961887 ???? 1 ???? # 4683 ???

指定日志: {=suggested | filename | AUTO | CANCEL}

此处输入:auto

ORA-00308: ???????? 'E:\ORACLE\ORA81\RDBMS\ARC04683.001'

ORA-27041: ??????

OSD-04002: N^7(4r?*ND<~

O/S-Error: (OS 2) O5M3UR2;5=V86(5DND<~!#

ORA-01547: ??: RECOVER ??? OPEN RESETLOGS ???????

ORA-01152: ?? 1 ????????????

ORA-01110: ???? 1: 'E:\ORACLE\ORADATA\FGSJYC\SYSTEM01.DBF'

再次运行命令:

SQL> recover database until cancel;

ORA-00279: ?? 10797851961887 (? 07/04/2014 08:26:41 ??) ???? 1 ????

ORA-00289: ??: E:\ORACLE\ORA81\RDBMS\ARC04683.001

ORA-00280: ?? 10797851961887 ???? 1 ???? # 4683 ???

指定日志: {=suggested | filename | AUTO | CANCEL}

此处输入:cancel

ORA-01547: ??: RECOVER ??? OPEN RESETLOGS ???????

ORA-01152: ?? 1 ????????????

ORA-01110: ???? 1: 'E:\ORACLE\ORADATA\FGSJYC\SYSTEM01.DBF'

ORA-01112: ???????

忽略出现的错误,尝试打开数据库

SQL> alter database open resetlogs;

alter database open resetlogs

*

ERROR 位于第 1 :

ORA-01152: ?? 1 ????????????

ORA-01110: ???? 1: 'E:\ORACLE\ORADATA\FGSJYC\SYSTEM01.DBF'

尝试恢复1号数据文件:

SQL> recover datafile 1;

ORA-00283: ??????????

ORA-00264: ?????

恢复数据库:

SQL> RECOVER DATABASE;

ORA-00283: ??????????

ORA-00600: ??????????: [3020], [8393195], [1], [4683], [39], [56], [], []

出现ORA-00600的错误,查询了下有说系统SCN的问题,有说回滚段的问题。

SQL> shutdown immediate;

ORA-01109: ??????

已经卸载数据库。

ORACLE 例程已经关闭。

增加隐含参数到INIT.ORA文件中:

_allow_resetlogs_corruption = true

 

SQL> startup;

ORACLE 例程已经启动。

Total System Global Area  396675100 bytes                                      

Fixed Size                    75804 bytes                                      

Variable Size             121360384 bytes                                       

Database Buffers          275161088 bytes                                      

Redo Buffers                  77824 bytes                                      

数据库装载完毕。

ORA-01172: ??1???????4587????2??

ORA-01151: ?????????????????????

再次运行命令:

SQL> recover database until cancel;

ORA-00279: ?? 10797851961887 (? 07/04/2014 08:26:41 ??) ???? 1 ????

ORA-00289: ??: E:\ORACLE\ORA81\RDBMS\ARC04683.001

ORA-00280: ?? 10797851961887 ???? 1 ???? # 4683 ???

指定日志: {=suggested | filename | AUTO | CANCEL}

此处输入:auto

ORA-00308: ???????? 'E:\ORACLE\ORA81\RDBMS\ARC04683.001'

ORA-27041: ??????

OSD-04002: N^7(4r?*ND<~

O/S-Error: (OS 2) O5M3UR2;5=V86(5DND<~!#

ORA-01547: ??: RECOVER ??? OPEN RESETLOGS ???????

ORA-01152: ?? 1 ????????????

ORA-01110: ???? 1: 'E:\ORACLE\ORADATA\FGSJYC\SYSTEM01.DBF'

运行命令:

SQL> recover database until cancel;

ORA-00279: ?? 10797851961887 (? 07/04/2014 08:26:41 ??) ???? 1 ????

ORA-00289: ??: E:\ORACLE\ORA81\RDBMS\ARC04683.001

ORA-00280: ?? 10797851961887 ???? 1 ???? # 4683 ???

指定日志: {=suggested | filename | AUTO | CANCEL}

此处输入:cancel

ORA-01547: ??: RECOVER ??? OPEN RESETLOGS ???????

ORA-01152: ?? 1 ????????????

ORA-01110: ???? 1: 'E:\ORACLE\ORADATA\FGSJYC\SYSTEM01.DBF'

ORA-01112: ???????

SQL> alter database open resetlogs;

alter database open resetlogs

*

ERROR 位于第 1 :

ORA-00604: ?? SQL ? 1 ????

ORA-01555: ????: ????  ???? "" ??

SQL> alter database open;

alter database open

*

ERROR 位于第 1 :

ORA-03113: end-of-file on communication channel

SQL> shutdown immediate;

ORA-24323: 不允许此值

ORA-01012: not logged on

SQL> shutdown immediate;

ORA-24323: 不允许此值

ORA-01012: not logged on

SQL> conn / as sysdba;

ERROR

ORA-01092: ORACLE instance terminated. Disconnection forced

SQL> exit

 

   将该实例相关的服务停开几次,注意观察ALERT文件,检查相应的错误,后来成功了!Yeah

 

    打开数据库后,发现和实例1一样,也出现TEMP无法使用回滚段的问题,于是进入DBA STUDIO,发现现有回滚段RBS0RBS1RBS2RBS3RBS4RBS5RBS6都是脱机状态。这次处理起来更为简单了,直接新建立了RBS10RBS11RBS12RBS13RBS14RBS15RBS16新的回滚段,按照系统原有的RBS0等回滚段的参数:初始大小512  NEXT SIZE 512  MAXEXTENTS :4096进行,也可以直接用命令执行:

CREATE ROLLBACK SEGMENT "RBS10"

    TABLESPACE "RBS"

    STORAGE ( INITIAL 512K NEXT 512K MAXEXTENTS 4096);

ALTER ROLLBACK SEGMENT "RBS10" ONLINE;

 

CREATE ROLLBACK SEGMENT "RBS11"

    TABLESPACE "RBS"

    STORAGE ( INITIAL 512K NEXT 512K MAXEXTENTS 4096);

ALTER ROLLBACK SEGMENT "RBS11" ONLINE;

 

CREATE ROLLBACK SEGMENT "RBS12"

    TABLESPACE "RBS"

    STORAGE ( INITIAL 512K NEXT 512K MAXEXTENTS 4096);

ALTER ROLLBACK SEGMENT "RBS12" ONLINE;

 

CREATE ROLLBACK SEGMENT "RBS13"

    TABLESPACE "RBS"

    STORAGE ( INITIAL 512K NEXT 512K MAXEXTENTS 4096);

ALTER ROLLBACK SEGMENT "RBS13" ONLINE;

 

CREATE ROLLBACK SEGMENT "RBS14"

    TABLESPACE "RBS"

    STORAGE ( INITIAL 512K NEXT 512K MAXEXTENTS 4096);

ALTER ROLLBACK SEGMENT "RBS14" ONLINE;

 

CREATE ROLLBACK SEGMENT "RBS15"

    TABLESPACE "RBS"

    STORAGE ( INITIAL 512K NEXT 512K MAXEXTENTS 4096);

ALTER ROLLBACK SEGMENT "RBS15" ONLINE;

 

CREATE ROLLBACK SEGMENT "RBS16"

    TABLESPACE "RBS"

    STORAGE ( INITIAL 512K NEXT 512K MAXEXTENTS 4096);

 

    然后摘除RBS0RBS1RBS2RBS3RBS4RBS5RBS6等回滚段(已经是脱机状态),相应命令忘记了,我用的DBA STUTIO

--ALTER ROLLBACK SEGMENT "RBS0" OFFLINE;

drop rollback segment "RBS0";

 

/*

ALTER ROLLBACK SEGMENT "RBS1" OFFLINE;

ALTER ROLLBACK SEGMENT "RBS2" OFFLINE;

ALTER ROLLBACK SEGMENT "RBS3" OFFLINE;

ALTER ROLLBACK SEGMENT "RBS4" OFFLINE;

ALTER ROLLBACK SEGMENT "RBS5" OFFLINE;

ALTER ROLLBACK SEGMENT "RBS6" OFFLINE;

drop rollback segment "RBS1";

drop rollback segment "RBS2";

drop rollback segment "RBS3";

drop rollback segment "RBS4";

drop rollback segment "RBS5";

drop rollback segment "RBS6";

*/

 

后续工作:

修改init.ora文件,将参数rollback_Segments=( RBS10RBS11RBS12RBS13RBS14RBS15RBS16),重新关闭数据库,打开数据库,O了。

 

 

 

 

 

 

 

 

 

 

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

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

注册时间:2010-09-27

  • 博文量
    124
  • 访问量
    348946