日期:2014-05-16 浏览次数:20454 次
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