UNDO 表空间数据块损坏 ORA-01578 & ORA-01110

    技术2022-05-20  57

    UNDO 表空间数据块损坏 ORA-01578 & ORA-01110

    前两天搭了某测试数据库,最近被告之删除数据时报错。

     

    alert .log

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

    Thu Apr 14 01:58:49 2011

    Errors in file D:/oracle/admin/MRC/bdump/mrcSMON.TRC:

    ORA-01595: error freeing extent (2) of rollback segment (1))

    ORA-01578: ORACLE data block corrupted (file # 2, block # 3)

    ORA-01110: data file 2: 'E:/ORADATA/UNDOTBS01.DBF'

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

     

     

    是程序员执行delete 语句时报错,工具toad 。 

    Oracle version :9205

    delete from mrc_ext_detail_really

    报:

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

    ORA-01578: ORACLE 数据块损坏(文件号2,块号3)

    ORA-01110: 数据文件 2: 'E:/ORADATA/UNDOTBS01.DBF'

    我查了这张表一下。大概300W数据,并且该表建了很恶心的索引。3个索引。

    好吧。首先直接删这表会怎样呢?可想而知..慢的要死,要么机器死,要么人阵亡。

     

    如果要直接删除所有数据,那么truncate 好了。

     

    回到主题:

    由于测试DB的这张表是需要删除所有数据的。因此不用导出导入table中的数据。

     

     

    因此.....

    SQL> conn sys/sys8 as sysdba 已連線. SQL> show parameter undo_tablespace; //查看当前UNDO表空间 NAME TYPE ------------------------------------ --------------------- VALUE ------------------------------ undo_tablespace string UNDOTBS SQL> select file_name from dba_data_files 2 where tablespace_name = 'UNDOTBS'; FILE_NAME --------------------------------------------------- E:/ORADATA/UNDOTBS01.DBF //因为就是该UNDO表空间出的问题。 SQL> select * from v$transaction;//查看是否有未提交的事务。 沒有任何資料列被選取 //创建新的UNDO表空间 SQL> create undo tablespace UNDOTBS2 2 datafile 'E:/ORADATA/UNDOTBS02.DBF' 3 size 600M autoextend on maxsize 1024M; SQL> alter system set undo_tablespace=UNDOTBS2 scope=both; 已更改系統. SQL> show parameter spfile; NAME TYPE ------------------------------------ ---------------------- VALUE ------------------------------ spfile string %ORACLE_HOME%/DATABASE/SPFILE% ORACLE_SID%.ORA SQL> create pfile from spfile; 已建立檔案. //查看initmrc.ora中的*.undo_tablespace='UNDOTBS2' 切换成功!! SQL> show parameter undo_tablespace; NAME TYPE ------------------------------------ ---------------------- VALUE ------------------------------ undo_tablespace string UNDOTBS2 SQL> drop tablespace UNDOTBS including contents and datafiles; 已廢棄表格空間.  

     

    如果正式数据库上可要小心操作哦。也可以用一临时UNDO表空间来做切换,以达到删除重建原来的UNDO表空间的目的。

     

     

     

     

     

     

     

     

     


    最新回复(0)