UNDO表空间损坏处理案例(ORA-01110)

原创 2011年10月13日 16:03:08

     最近处理一起因UNDO表空间的数据文件损坏,而导致数据库服务无法启动的情况。

     按理说,undo表空间数据文件的损坏,是不会影响到已提交的数据的,所以,该数据库能在没有备份的情况下恢复,并且不损失已提交的数据。

     以下是实验过程:

     1、破坏undotbs01.dbf(用ultraEdit编辑,将头部删除),然后启动数据库,报:

           SQL> startup
           ORACLE 例程已经启动。

           Total System Global Area  612368384 bytes
           Fixed Size                  1250428 bytes
           Variable Size             171969412 bytes
           Database Buffers          432013312 bytes
           Redo Buffers                7135232 bytes
           数据库装载完毕。
           ORA-01157: 无法标识/锁定数据文件 2 - 请参阅 DBWR 跟踪文件
           ORA-01110: 数据文件 2: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF'

       2、将UNDOTBS离线:

           SQL>ALTER DATABASE DATAFILE ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF' OFFLINE DROP;

           数据库已更改

       3、创建pfile:

            SQL> create pfile='d:\init.ora' from spfile;

            文件已创建

       4、修改pfile,添加参数:

           *.undo_management='MANUAL'
            _corrupted_rollback_segments=(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)

       5、用pfile重启数据库:      

             SQL> shutdown immediate
             ORA-01109: 数据库未打开
             已经卸载数据库。
             ORACLE 例程已经关闭。

             SQL> startup pfile='D:\init.ora'
             ORACLE 例程已经启动。

             Total System Global Area  612368384 bytes
             Fixed Size                  1250428 bytes
             Variable Size             171969412 bytes
             Database Buffers          432013312 bytes
             Redo Buffers                7135232 bytes
             数据库装载完毕。
             数据库已经打开。

      6、删除回退段:

            SQL> select segment_name,owner,tablespace_name,status from dba_rollback_segs;
           
            SEGMENT_NAME                   OWNER  TABLESPACE_NAME
            ------------------------------ ------ ------------------------------
            STATUS
            ----------------
            SYSTEM                         SYS    SYSTEM
            ONLINE
           
            _SYSSMU10$                     PUBLIC UNDOTBS1
            OFFLINE
           
            _SYSSMU9$                      PUBLIC UNDOTBS1
            OFFLINE
           
           
            SEGMENT_NAME                   OWNER  TABLESPACE_NAME
            ------------------------------ ------ ------------------------------
            STATUS
            ----------------
            _SYSSMU8$                      PUBLIC UNDOTBS1
            OFFLINE
           
            _SYSSMU7$                      PUBLIC UNDOTBS1
            OFFLINE
           
            _SYSSMU6$                      PUBLIC UNDOTBS1
            OFFLINE
           
           
            SEGMENT_NAME                   OWNER  TABLESPACE_NAME
            ------------------------------ ------ ------------------------------
            STATUS
            ----------------
            _SYSSMU5$                      PUBLIC UNDOTBS1
            OFFLINE
           
            _SYSSMU4$                      PUBLIC UNDOTBS1
            OFFLINE
           
            _SYSSMU3$                      PUBLIC UNDOTBS1
            OFFLINE
           
           
            SEGMENT_NAME                   OWNER  TABLESPACE_NAME
            ------------------------------ ------ ------------------------------
            STATUS
            ----------------
            _SYSSMU2$                      PUBLIC UNDOTBS1
            OFFLINE
           
            _SYSSMU1$                      PUBLIC UNDOTBS1
            OFFLINE
           
           
            已选择11行。
           
            SQL> drop rollback segment "_SYSSMU1$";
           
            回退段已删除。
           
            SQL> drop rollback segment "_SYSSMU2$";
           
            回退段已删除。
           
            SQL> drop rollback segment "_SYSSMU3$";
           
            回退段已删除。
           
            SQL> drop rollback segment "_SYSSMU4$";
           
            回退段已删除。
           
            SQL> drop rollback segment "_SYSSMU5$";
           
            回退段已删除。
           
            SQL> drop rollback segment "_SYSSMU6$";
           
            回退段已删除。
           
            SQL> drop rollback segment "_SYSSMU7$";
           
            回退段已删除。
           
            SQL> drop rollback segment "_SYSSMU8$";
           
            回退段已删除。
           
            SQL> drop rollback segment "_SYSSMU9$";
           
            回退段已删除。
           
            SQL> drop rollback segment "_SYSSMU10$";
           
            回退段已删除。
     7、删除和重新创建表空间:

           SQL> drop tablespace undotbs1 including contents and datafiles;

           表空间已删除。

           SQL> create undo tablespace undotbs1 datafile 'D:\oracle\product\10.2.0\oradata\orcl\undotbs01.dbf' size 100m;

           表空间已创建。

      8、重启数据库:

            SQL> shutdown immediate
           数据库已经关闭。
           已经卸载数据库。
           ORACLE 例程已经关闭。
           SQL> startup
           ORACLE 例程已经启动。
          
           Total System Global Area  612368384 bytes
           Fixed Size                  1250428 bytes
           Variable Size             171969412 bytes
           Database Buffers          432013312 bytes
           Redo Buffers                7135232 bytes
           数据库装载完毕。
           数据库已经打开。

自此,问题解决,该实验参考文档:http://space.itpub.net/?uid-4227-action-viewspace-itemid-198238

 

 

深入理解MySQL中的Redo、Undo、MVCC

讲解数据库中Undo,Redo作用。MySQL中MVCC实现方式。数据库中两种Checkpoint实现方式及Redo日志是逻辑还是物理的。
  • 2016年12月22日 14:32

UNDO表空间的ORA-01110错误解决(二)

前一段时间解决了一个ORA-1122错误,正好本机的数据库环境由于Windows的自动重起,导致数据库无法打开,出现错误信息也是ORA-1122。 这次出现错误的表空间是UNDO表空间。 ...
  • wanglipo
  • wanglipo
  • 2012-04-06 10:51:50
  • 2893

UNDO表空间损坏导致数据库无法OPEN

表空间损坏的解决方法
  • u012456926
  • u012456926
  • 2014-11-01 22:42:15
  • 921

UNDO表空间数据文件损坏处理方法

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

Oracle的临时表空间和UNDO表空间对应的文件丢失后的处理

数据库的临时文件和undo文件不需要做备份,丢失后可以恢复,数据不会有丢失. 一,临时表空间的文件丢失后,在数据库启动后自动创建,不需要做干预. 模拟:在数据库shutdown后将临时文件删除...
  • kkdelta
  • kkdelta
  • 2012-01-17 13:05:32
  • 3678

UNDO表空间的ORA-01110错误解决(一)

前一段时间解决了一个ORA-1122错误,正好本机的数据库环境由于Windows的自动重起,导致数据库无法打开,出现错误信息也是ORA-1122。 这次出现错误的表空间是UNDO表空间。 ...
  • wanglipo
  • wanglipo
  • 2012-04-06 10:51:09
  • 1112

【Oracle】undo损坏,无备份非常规恢复

客户的一个测试环境,主机异常断电,启动后发现undo文件损坏,无法启动,在open阶段报错如下: Errors in file /u01/app/oracle/diag/rdbms/cdrdb/CDR...
  • badly9
  • badly9
  • 2016-05-06 15:00:17
  • 1311

Oracle数据库表空间文件被删除[ora-01033|ORA-01110]

今天用本地数据库做分区表测试,完事了清理测试数据。 不小心在删除表空间前删除了表空间文件,造成ORA-01033错误,数据库无法登陆。 ora-01033:oracle initializatio...
  • authorzhh
  • authorzhh
  • 2012-10-23 16:27:04
  • 10726

undo 表空间使用案例分析(使用率100%,enq:US-contention,释放undo)

原文转自:http://space.itpub.net/21601207/viewspace-708878 问题描述: 近几天发现Oracle10.2.0.4数据库undo tablesp...
  • changyanmanman
  • changyanmanman
  • 2012-12-18 11:00:09
  • 5166

undo 表空间满了的处理方法

在插入数据或者update时,有时会报ora_30036错误,导致数据插入失败,其原因是数据库的undo表空间不足所致,解决undo表空间间满的方法有两种 方法一: 添加undo 表空间的数据...
  • haoxiaoyan
  • haoxiaoyan
  • 2014-03-19 15:12:16
  • 1691
收藏助手
不良信息举报
您举报文章:UNDO表空间损坏处理案例(ORA-01110)
举报原因:
原因补充:

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