oracle undo表空间爆满处理
产生问题的原因主要以下两点:
- 有较大的事务量让Oracle Undo自动扩展,产生过度占用磁盘空间的情况
- 有较大事务没有收缩或者没有提交所导制; 说明:本问题在ORACLE系统管理中属于比较正常的一现象,日常维护多注意对磁盘空间的监控。
UNDO表空间介绍
UNDO表空间用于存放UNDO数据,当执行DML操作(INSERT,UPDATE和DELETE)时,oracle会将这些操作的旧数据写入到UNDO段。
在oracle9i之前,管理UNDO数据时使用(Rollback Segment)完成的。
从oracle9i开始,管理UNDO数据不仅可以使用回滚段,还可以使用UNDO表空间.因为规划和管理回滚段比较复杂。
所有oracle database 10g已经完全丢弃用回滚段.并且使用UNDO表空间来管理UNDO数据。
具体处理流程:
- 找出UNDO表空间的路径及大小
select file_name,bytes/1024/1024 from dba_data_files where tablespace_name like 'UNDOTBS1';
- 检查UNDO Segment状态
select usn,xacts,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks from v$rollstat order by rssize;
- 创建新的临时UNDO表空间
create undo tablespace undotbs2 datafile '+DATA/orcl/datafile/undotbs2' size 10M autoextend on;
- 切换UNDO表空间为新的UNDO表空间
alter system set undo_tablespace=undotbs2 scope=both;
- 验证当前数据库的还原表空间
show parameter undo
- 等待原UNDO表空间所有UNDO SEGMENT OFFLINE
select t.segment_name,t.tablespace_name,t.segment_id,t.status from dba_rollback_segs t;
- 删除原UNDO表空间
drop tablespace undotbs1 including contents and datafiles;