某企业控制文件损坏 回滚 临时表空间数据文件损坏实例一恢复过程

平台:windows xp

Oracle 817

非归档模式

时间:8月6日 周三下午3点后,至 7日 周四一天

 

实例1:ORCL的恢复:

 

打开数据库时提示信息,两个控制文件不一致(从外面看两个文件的大小和日期还是一样的),但实际显示的字节数不同。

 

    首先,试图备份整个数据文件目录,但总不成功,显示检验和,或者循环冗余之类的错误。只好备份能备份的文件,继续下一步。

    同事没有记住2个控制文件的字节差别,应该用大的那个去替代别的控制文件,貌似我用其中一个,可能是小的control02.ctl替代了其他2个控制文件,接下来又提示,说控制文件和数据文件不一致:控制文件比数据文件旧。控制文件是当天的,但数据文件有7月3号的(一个月前的),也有当天日期但比控制文件新的,3个联机日志文件都是7月3号的。查询网上,这类型情形只能重建控制文件。生成建立控制文件的脚本,装载数据库,备份控制文件,创建成功。

 

--创建控制文件的脚本(/***r database backup controlfile to ‘E:\trace\ctl.bak’;*/)

alter database backup controlfile to trace

Completed: alter database backup controlfile to trace

Wed Jul 30 17:00:48 2014

 

然后开始重建控制文件:

SQL>shutdown immediate;

SQL>STARTUP NOMOUNT;

SQL>CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  NOARCHIVELOG

    MAXLOGFILES 16

    MAXLOGMEMBERS 3

    MAXDATAFILES 100

    MAXINSTANCES 8

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1 'E:\oracle\oradata\orcl\redo01.log'  SIZE 50M BLOCKSIZE 512,

  GROUP 2 'E:\oracle\oradata\orcl\redo02.log'  SIZE 50M BLOCKSIZE 512,

  GROUP 3 'E:\oracle\oradata\orcl\redo03.log'  SIZE 50M BLOCKSIZE 512

-- STANDBY LOGFILE

DATAFILE

  'E:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF',

  'E:\ORACLE\ORADATA\ORCL\RBS01.DBF',

  'E:\ORACLE\ORADATA\ORCL\USERS01.DBF',

  'E:\ORACLE\ORADATA\ORCL\TEMP01.DBF',

  'E:\ORACLE\ORADATA\ORCL\TOOLS01.DBF',

  'E:\ORACLE\ORADATA\ORCL\INDX01.DBF',

  'E:\ORACLE\ORADATA\ORCL\DR01.DBF'

CHARACTER SET ZHS16GBK

;

Completed: CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLO

Wed Jul 30 17:04:31 2014

SQL>alter database mount;

出现错误 ORA-1100 signalled during: alter database mount,无法装载数据库

 

尝试恢复数据库:Wed Jul 30 17:06:24 2014

SQL〉RECOVER DATABASE

Wed Jul 30 17:04:44 2014

ALTER DATABASE RECOVER  database 

Wed Jul 30 17:04:44 2014

Media Recovery Start

Media Recovery Log

Recovery of Online Redo Log: Thread 1 Group 2 Seq 7253 Reading mem 0

  Mem# 0 errs 0: E:\ORACLE\ORADATA\ORCL\REDO02.LOG

Media Recovery failed with error 1115

ORA-283 signalled during: ALTER DATABASE RECOVER  database  ...

Wed Jul 30 17:06:24 2014

alter database mount

 

Wed Jul 30 17:06:24 2014

ORA-1100 signalled during: alter database mount

...

Wed Jul 30 17:06:31 2014

alter database open

 

ORA-1113 signalled during: alter database open

出现错误ORA-01110 ORA-0113,于是依次恢复出错的数据文件

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

完成介质恢复。

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

第 1 行出现错误:
ORA-00283: 恢复会话因错误而取消
ORA-01115: 从文件 2读取块时出现 IO 错误 (块 # 31####)
ORA-01110: 数据文件 2: ' E:\ORACLE\ORADATA\ORCL\RBS01.DBF '
ORA-27069: skgfdisp: 尝试在文件范围外执行 I/O
OSD-04026: 传递的参数无效。 (OS 3145977)

ALERT文件显示:

ALTER DATABASE RECOVER  datafile 'e:\oracle\oradata\orcl\rbs01.dbf' 

Wed Jul 30 17:09:28 2014

Media Recovery Datafile: 'e:\oracle\oradata\orcl\rbs01.dbf'

Media Recovery Start

Media Recovery Log

Recovery of Online Redo Log: Thread 1 Group 2 Seq 7253 Reading mem 0

  Mem# 0 errs 0: E:\ORACLE\ORADATA\ORCL\REDO02.LOG

Media Recovery failed with error 1115

ORA-283 signalled during: ALTER DATABASE RECOVER  datafile 'e:\oracle\oradat...

Thu Jul 31 09:14:48 2014

继续恢复TEMP01.DBF 文件:

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

出错:

ALTER DATABASE RECOVER  datafile 'E:\ORACLE\ORADATA\ORCL\TEMP01.DBF' 

Thu Jul 31 09:15:13 2014

Media Recovery Datafile: 'E:\ORACLE\ORADATA\ORCL\TEMP01.DBF'

Media Recovery Start

Media Recovery Log

Recovery of Online Redo Log: Thread 1 Group 2 Seq 7253 Reading mem 0

  Mem# 0 errs 0: E:\ORACLE\ORADATA\ORCL\REDO02.LOG

Media recovery buffers written to disk due to log corruption.媒介损坏

Some changes at scn 13114573485700 may be on disk

Media Recovery failed with error 355

ORA-283 signalled during: ALTER DATABASE RECOVER  datafile 'E:\ORACLE\ORADAT...

Thu Jul 31 09:16:12 2014

 

SQL>recover datafile 'E:\ORACLE\ORADATA\ORCL\USERS01.DBF';

完成介质恢复。

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

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

完成介质恢复。

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

完成介质恢复。

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

发现恢复TOOLS01.DBF';提示也有坏块

ALTER DATABASE RECOVER  datafile 'E:\ORACLE\ORADATA\ORCL\TOOLS01.DBF' 

Thu Jul 31 09:16:12 2014

Media Recovery Datafile: 'E:\ORACLE\ORADATA\ORCL\TOOLS01.DBF'

Media Recovery Start

Media Recovery Log

Recovery of Online Redo Log: Thread 1 Group 2 Seq 7253 Reading mem 0

  Mem# 0 errs 0: E:\ORACLE\ORADATA\ORCL\REDO02.LOG

Media recovery buffers written to disk due to log corruption.

Some changes at scn 13114573485700 may be on disk

Media Recovery failed with error 355

ORA-283 signalled during: ALTER DATABASE RECOVER  datafile 'E:\ORACLE\ORADAT...

Thu Jul 31 09:16:37 2014

 

于是干脆摘除该文件:

SQL> alter database datafile 'E:\ORACLE\ORADATA\ORCL\TOOLS01.DBF' offline drop;

再次尝试打开数据库,使用和不用resetlogs选项:

SQL> alter database open resetlogs;

Thu Jul 31 09:31:12 2014

ORA-1139 signalled during: alter database open resetlogs

...

Thu Jul 31 09:31:24 2014

alter database open

Thu Jul 31 09:31:24 2014

ORA-1113 signalled during: alter database open

 

还是不行,于是接下来处理联机日志的问题,按照联机日志文件都丢掉处理:

SQL>Select * from v$logfile;

SQL>Select * from v$log; --2号日志为当前日志

SQL> select * from v$log;

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

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

         1          1          0    1048576          1 YES UNUSED                       0                              

         2          1          1    1048576          1 NO  CURRENT             1.3115E+13 31-7?  -14                   

         3          1          0    1048576          1 YES UNUSED                       0      

清除 1 和3号日志:

SQL> alter database clear unarchived logfile group 3;

数据库已更改。

SQL> alter database clear unarchived logfile group 1;

数据库已更改。

SQL> recover database until cancel;

ORA-00279: 更改 13114573465651 (在 07/03/2014 16:40:00 生成) 对于线程 1 是必需的

ORA-00289: 建议: E:\ORACLE\ORA81\RDBMS\ARC07253.001

ORA-00280: 更改 13114573465651 对于线程 1 是按序列 # 7253 进行的

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

此处输入:auto

ORA-00308: 无法打开存档日志 'E:\ORACLE\ORA81\RDBMS\ARC07253.001'

ORA-27041: 无法打开文件

OSD-04002: 无法打开文件

O/S-Error: (OS 2) 系统找不到指定的文件。

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

ORA-01152: 文件 1 没有从完备的旧备份中恢复

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

SQL> recover database until cancel;

ORA-00279: 更改 13114573465651 (在 07/03/2014 16:40:00 生成) 对于线程 1 是必需的

ORA-00289: 建议: E:\ORACLE\ORA81\RDBMS\ARC07253.001

ORA-00280: 更改 13114573465651 对于线程 1 是按序列 # 7253 进行的

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

此处输入:cancel

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

ORA-01152: 文件 1 没有从完备的旧备份中恢复

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

ORA-01112: 未启动媒体恢复

SQL> alter database open resetlogs;

alter database open resetlogs

*

ERROR 位于第 1 行:

ORA-01152: 文件 1 没有从完备的旧备份中恢复

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

SQL> shutdown immediate;

ORA-01109: 数据库未打开

已经卸载数据库。

ORACLE 例程已经关闭。

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

_allow_resetlogs_corrupton = true

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

重启数据库:

SQL> startup mount;

ORACLE 例程已经启动。

Total System Global Area  237856796 bytes                                                                              

Fixed Size                    75804 bytes                                                                               

Variable Size              80416768 bytes                                                                              

Database Buffers          157286400 bytes                                                                               

Redo Buffers                  77824 bytes                                                                              

数据库装载完毕。

SQL> alter database open;

alter database open

*

ERROR 位于第 1 行:

ORA-01589: ??????????? RESETLOGS ? NORESETLOGS ??

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

SQL> alter database open reserlogs;

alter database open reserlogs

                    *

ERROR 位于第 1 行:

ORA-02288: ??? OPEN ??

SQL> alter database open resetlogs;

alter database open resetlogs

*

ERROR 位于第 1 行:

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

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

                       

SQL> shutdown immediate;

ORA-01109: ??????

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup mount;

ORACLE 例程已经启动。

Total System Global Area  237856796 bytes                                                                              

Fixed Size                    75804 bytes                                                                               

Variable Size              80416768 bytes                                                                              

Database Buffers          157286400 bytes                                                                               

Redo Buffers                  77824 bytes                                                                              

数据库装载完毕。

SQL> alter database open resetlogs;

alter database open resetlogs

*

ERROR 位于第 1 行:

ORA-01139: RESETLOGS ???????????????

SQL> alter database open;

alter database open

*

ERROR 位于第 1 行:

ORA-00600: ??????????: [3668], [1], [2], [12057], [12057], [4], [], []

把ORCL服务重新启动几次,再次运行命令:

SQL> recover database;

完成介质恢复。

SQL> alter database open;

数据库已更改。

查看ALERT文件,终于打开数据库了:

Thu Jul 31 09:58:55 2014

RESETLOGS is being done without consistancy checks. This may result

in a corrupted database. The database should be recreated.

RESETLOGS after incomplete recovery UNTIL CHANGE 13114573465651

Thu Jul 31 09:58:56 2014

Thread 1 opened at log sequence 1

  Current log# 2 seq# 1 mem# 0: E:\ORACLE\ORADATA\ORCL\REDO02.LOG

Successful open of redo thread 1.

Thu Jul 31 09:58:56 2014

SMON: enabling cache recovery

SMON: disabling cache recovery

Thu Jul 31 09:58:56 2014

ORA-604 signalled during: alter database open resetlogs

...

Thu Jul 31 10:01:00 2014

Shutting down instance (immediate)

SQL> conn test/test;

已连接。

SQL>

 

    数据库能够打开后,赶紧备份数据,但是发现应用进去后,没有任何操作菜单显示出来,联系应用的人,跟踪下应用,并把相应的错误信息显示出来,才发现是TEMP无法使用回滚段的错误。

    将上述两个隐含参数去掉,重新启动数据库,用DBA  STUDIO,忘记TEMP表空间的数据文件是否脱机了。重建了一个类似的临时表空间TEMP2,摘除原有的TEMP 表空间。但是select * from v$tempfile;显示未选定行,在DBA  STUDIO中可正常显示相应的数据文件。

    我开始给TEMP 表空间新增了一个数据文件TEMP02.DBF,然后尝试去摘除原来的数据文件TEMP01。DBF,出错!

    接着发现现有回滚段RBS0,RBS1,RBS2,RBS3,RBS4,RBS5,RBS6都是脱机状态,于是重建RBS10,RBS11,RBS12,RBS13,RBS14,RBS15,RBS16新的回滚段,按照系统原有的RBS0等回滚段的参数,512  512  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";

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),原来为rollback_Segments=( RBS0,RBS1,RBS2,RBS3,RBS4,RBS5,RBS6)

重新关闭数据库,打开数据库,O了。

 

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值