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