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

本文记录了一次Oracle 8.1.7数据库恢复的过程,详细介绍了如何处理控制文件不一致、数据文件损坏及联机日志文件丢失等问题,并通过创建新的回滚段解决了系统无法正常启动的难题。

平台:windows xp

Oracle 817

非归档模式

时间:8月6日 周三下午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盘,这步非常重要,最大限度地保护现场,以备出错后从头再来。并且这个实例的所有数据文件,日期都是7月3号的,比较一致,比第一个实例情况要好。

    其次:由错误信息得知:控制文件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个联机日志文件日期仍然是7月3号的,决定先解决联机日志文件丢失的问题:

 

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,发现现有回滚段RBS0,RBS1,RBS2,RBS3,RBS4,RBS5,RBS6都是脱机状态。这次处理起来更为简单了,直接新建立了RBS10,RBS11,RBS12,RBS13,RBS14,RBS15,RBS16新的回滚段,按照系统原有的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);

 

    然后摘除RBS0,RBS1,RBS2,RBS3,RBS4,RBS5,RBS6等回滚段(已经是脱机状态),相应命令忘记了,我用的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=( RBS10,RBS11,RBS12,RBS13,RBS14,RBS15,RBS16),重新关闭数据库,打开数据库,O了。

 

 

 

 

 

 

 

 

 

 

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

转载于:http://blog.itpub.net/7177735/viewspace-1254060/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值