ORACLE 回滚段表空间数据文件丢失或损坏处理方法(1)

原创 2003年08月03日 17:09:00

问题描述:
这是一个回滚段表空间数据文件丢失或损坏的情景,这时oracle不能识别相应的数据文件。当你试图startup数据文件时会报ORA-1157,ORA-1110,并且可能会伴随着标识操作系统级别的错误,比如ORA-7360。当你试图以shutdown normal或shutdown immediate模式关闭数据库时会导至ORA-1116,ORA-1110,并可能伴随标识操作系统级别的错误,比如ORA-7368,有时以正常方式shutdown数据库根本shutdown不下来。

警告:
文章中所提及的步骤是供oracle的全球技术支持使用的。特别是步骤6中的_corrupted_rollback_segments参数,使用后需要重建数据库,在使用这个参前请观察一下所有其它的选项。

解决方法解释:

如下的解决方法取于检测问题出现时数据库所处于状态:

I. 数据库是处于关闭状态的。
试图打开数据库时报ORA-1157和ORA-1110错误,这时的解决方法取于数据库是否是正常shutdown的(使用normal或immediate选项。

I.A.数据库是正常shutdown的

如果数据数据库是正常shutdown的,最简单的解决方法是以offline drop选项删除丢失或损坏的数据文件,以restriceted模式打个数据库,删除并重建这个数据文件所属的那个回滚表空间。如果数据库是以shutdown abort或自己崩溃掉的则不要遵循这个过程。

步骤如下:

1、确认数据库是正常shutdown的。可以检查alter.log这个文件,定位到最后几行看是否可以看到如下的信息:
  "alter database  dismount
   Completed: alter database  dismount"

这当然也包括以正常方式shutdown,接然试图启动数据库确失败的状况。如果最近一次你是以shutdown abort方式关闭数据库的或数据库是自己crashed掉的,你应用使用下面的I.B的方法。

2、在init<sid>.ora中把属于丢失数据文件的回滚段从ROLLBACK_SEGMENTS参数中去掉。如果你不能确信是哪个回滚段,可以简单的把ROLLBACK_SEGMENTS这个参数注释掉。

3、以restricted模式mount数据库
  STARTUP RESTRICT MOUNT;
 
4、Offline drop丢失或损坏的那个数据文件。
  ALTER DATABASE DATAFILE '<full_path_file_name>' OFFLINE DROP;
   
5、打开数据库
  ALTER DATABASE OPEN;
  如果返回"Statement processed"这条信息,转到第7步.
  如果得到ORA-604,ORA-376,和ORA-1110错误,转到第6步。

6、因为打开数据库失败,shutdown掉数据库并且编辑int<SID>.ora这个文件。注释掉ROLLBACK_SEGMENTS这个参数,并且在init<SID>.ora文件中加入如下一行:
  _corrupted_rollback_segments = (<rollback1>,...,<rollbackN>)
  这个参数应当包含ROLLBACK_SEGMENTS中所有的回滚段。

需要注意的是这个参数只能在指定的情况下或在oracle的全球持术支持的指导下才应使用,然后以restricted模式打开数据库:
 

  STARTUP RESTRICT
 
7、删除掉那个文件所属的回滚段表空间。
  DROP TABLESPACE <tablespace name> INCLUDING CONTENTS;
 
8、重建回滚段表空间及回滚段,创建完后使它们online.

9、使数据库所有用户都可用。
  ALTER SYSTEM DISABLE RESTRICTED SESSION;

10、在init<SID>.ora中把你重新创建的回滚段再一次包括进来,如果你使用了第6步则移除掉CORRUPTED_ROLLBACK_SEGMENTS这个参数。


I.B.数据库不是正常shutdown的

这种情况,数据库最近一次是用shutdown abort或crashed掉关闭,回滚段中几乎一定包含着活动的事务。因此,坏的那个数据文件不能脱机(offline)或是drop掉,你必需从备份恢复这个文件。如果数据为是处于非归档模式的,只有最近的一些事务日志还没有被重写掉的情况你才能成功恢复这个文件。如果这个文件的备份也是无效的,联系一下oracle的技术支持吧。

步骤如下:

1、从备份中恢复丢失的那个数据文件.

2、mount 上数据库

3、执行如下的查询:
  SELECT FILE#,NAME,STATUS FROM V$DATAFILE;
  如果数据文件的状态是offline的,你必需先把它联机了:
  ALTER DATABASE DATAFILE '<full_path_file_name>' ONLINE;
 
4、执行如下的查询:

  SELECT V1.GROUP#, MEMBER, SEQUENCE#, FIRST_CHANGE#
    FROM V$LOG V1, V$LOGFILE V2
   WHERE V1.GROUP# = V2.GROUP# ;
  
  这将列出所有的联机的重做日志和他们的序号及首次改变号(first change numbers).
 
5、如果这个数据库是非归档模式的,执行如下的查询: 
  SELECT FILE#, CHANGE# FROM V$RECOVER_FILE;
  如果其中的CHANG#比4中的最小的那个FIRST_CHANGE#大的话,用联机日志就可以完成恢复。
 
6、如果CHANG#比4中的最小的那个FIRST_CHANGE#小,则数据库是不能恢复的,可以联系一下oracle的技术支持。  

译者插入:如果你真是非归档方式且这个文件的备份也是无效的,如果你认为可以丢失回滚段中的那事务,你可以用I.A中从第6步的方法,这时可以打开数据库,应立即做一个备份,因为库中的数据有些不一致。

  RECOVER DATAFILE '<full_path_file_name>'

7、确认所有的日志都被恢复,只到你收到"Media recovery complete"信息。

8、打开数据库

待续

回滚段表空间中的一个数据文件丢失或者损坏的恢复方法的总结

回滚段表空间中的一个数据文件丢失或者损坏导致数据库无法识别它,在启动数据库的时候会出现ORA-1157, ORA-1110的错误,或者操作系统级别的错误,例如ORA-7360。在关闭数据库的时候(no...
  • annicybc
  • annicybc
  • 2007年02月26日 17:14
  • 1320

临时表空间数据文件损坏的解决

临时表空间数据文件丢失的恢复 临时表空间数据文件丢失数据库可以打开,可以通过重建一个临时表空间并设置为默认或者新建一个属于临时表空间的数据文件,并删除已经丢失的数据的方法来恢复。 1.丢失临时...
  • q947817003
  • q947817003
  • 2013年10月27日 18:25
  • 1451

ORACLE 回滚段表空间数据文件丢失或损坏处理方法(2)

续上文:http://www.csdn.net/Develop/read_article.asp?id=20220II. 数据库是启动着的如果你检测到丢失或损坏了回滚段表空间的数据文件,并且数据库是运...
  • hrb_qiuyb
  • hrb_qiuyb
  • 2003年08月03日 17:10
  • 1008

ORACLE回滚段表空间数据文件丢失或损坏处理方法(转)

问题描述:这是一个回滚段表空间数据文件丢失或损坏的情景,这时oracle不能识别相应的数据文件。当你试图startup数据文件时会报ORA-1157,ORA-1110,并且可能会伴随着标识操作系统级别...
  • chensheng913
  • chensheng913
  • 2005年07月07日 18:07
  • 5790

回滚段表空间数据文件损坏处理方法

回滚段表空间数据文件损坏处理方法问题描述: 当一个回滚段表空间数据文件丢失或损坏时,而且又指定了另外的回归段表空间,此时数据库可以正常打开,查询、插入、删除数据等都没有问题,当新增一个表时,会提示如下...
  • furtherchan
  • furtherchan
  • 2009年07月14日 14:19
  • 429

oracle 回滚段数据文件损坏修复

以下内容转自:http://lovexueer.itpub.net/post/5072/4924112月26日(星期一)  测试环境:OS :XPDB:9201 本测试测试了如下情况:a.正常关闭数据...
  • peihexian
  • peihexian
  • 2008年03月03日 15:58
  • 2523

sysaux在没有备份的情况下,数据块损坏,数据库启动不了处理

具体的思路:              1 考虑在控制文件中把sysaux表空间给剔除掉,启动数据库              2 在其他服务器上创建数据库              3 把数据导入新...
  • minwang593
  • minwang593
  • 2013年10月10日 11:27
  • 1252

system表空间的数据文件损坏是否能恢复

核心数据文件备份与恢复(system表空间数据文件) 关键性数据文件分为:SYSTEM表空间的数据文件 和 UNDO_TABLESPACE 撤销表空间的数据文件 undo_tablespa...
  • cuiyan1982
  • cuiyan1982
  • 2015年04月23日 13:30
  • 719

Oracle恢复实验(二):数据文件user01.dbf损坏,打开数据库情况下进行恢复。

环境:Oracle10g、Red Hat 4,Oracle运行在归档模式。  场景:数据文件user01.dbf损坏,打开数据库情况下进行恢复。  具体步骤:  1、删除user...
  • snakemyy
  • snakemyy
  • 2013年02月19日 12:04
  • 2495

重命名数据库表空间和数据文件

一、重命名数据库表空间名 使用alter tablespace… rename to命令,可以重命名一个永久或者临时表空间。例如,下面重命名users表空间: Alter tablespace t...
  • liqfyiyi
  • liqfyiyi
  • 2012年01月02日 19:12
  • 3030
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ORACLE 回滚段表空间数据文件丢失或损坏处理方法(1)
举报原因:
原因补充:

(最多只允许输入30个字)