日期:2014-05-16  浏览次数:20395 次

UNDO表空间(三)无备份块损坏

 show parameter undo 查看undo表空间的几本信息

第一,查看undo表空间使用的是第几个文件

select tablespace_name,file_name from dba_data_files;

TABLESPACE_NAME FILE_NAME
--------------- ---------------------------------------------
USERS  /u01/oracle/oradata/ora10g/users01.dbf
SYSAUX  /u01/oracle/oradata/ora10g/sysaux01.dbf
UNDOTBS1 /u01/oracle/oradata/ora10g/undotbs01.dbf
SYSTEM  /u01/oracle/oradata/ora10g/system01.dbf
MYTBS  /u01/oracle/oradata/ora10g/mytbs01.dbf

我们开始做交易

update scott.emp set sal=sal+1 where deptno=30;

然后查看事物的存在

select XIDUSN,XIDSLOT,XIDSQN from v$transaction;

 XIDUSN    XIDSLOT   XIDSQN
---------- ---------- ----------
  5    27      344

---介绍

XIDUSN:就是事务的回滚段号
XIDSLOT:就是ITL(interesting  transaction  list)列表中,slot的号
XIDSQN:就是表示这个slot被重复使用的次数

查看使用的回滚段

select segment_name,tablespace_name,file_id from dba_rollback_segs where segment_id=2;

SEGMENT_NAME    TABLESPACE_NAME    FILE_ID
------------------------- --------------- ----------
_SYSSMU2$    UNDOTBS1     2

这里看到2号被使用 

第二,开始破坏回滚段

!cp /etc/passwd /u01/oracle/oradata/ora10g/undotbs01.dbf

再次查看

SQL> SELECT FILE#, STATUS,RECOVER, NAME,error FROM V$DATAFILE_HEADER ;

     FILE#    STATUS     REC      NAME                                                                         ERROR
----------       ----------       ---        --------------------------------------------------                          --------------------
       1          ONLINE     NO      /u01/oracle/oradata/ora10g/system01.dbf
       2          ONLINE                /u01/oracle/oradata/ora10g/undotbs01.dbf      CANNOT READ HEADER
       3          ONLINE     NO     /u01/oracle/oradata/ora10g/sysaux01.dbf
       4          ONLINE     NO     /u01/oracle/oradata/ora10g/users01.dbf
       5          ONLINE     NO     /u01/oracle/oradata/ora10g/mytbs01.dbf

这里显示的    需要回复的REC 2号文件时空说明需要恢复  ERROR  2号文件出现了错误,由于回滚段是存放交易之前的信息的 所以这时候就找不到之前的信息了。

因为没有备份 所以我们建立一个新的undo表空间来取缔之前的undo表空间

第三,

drop tablespace undotbs1

drop tablespace undotbs1
*
ERROR at line 1:
ORA-30013: undo tablespace 'UNDOTBS1' is currently in use

报错:因为坏块上面的事物还存在,在内存里。

select tablespace_name,segment_name,status from dba_rollback_segs where tablespace_name='UNDOTBS1'

TABLESPACE_NA