oracle undo表空间的清理

找出UNDO表空间的路径及大小
SQL>  select file_name,bytes/1024/1024 from dba_data_files where tablespace_name like 'UNDOTBS1';


检查UNDO Segment状态
SQL> select usn,xacts,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks from v$rollstat order by rssize;


创建新的临时UNDO表空间
可以在其它的磁盘空间临时创建还原表空间
SQL>create undo tablespace undotbs2 datafile '+DATA/orcl/datafile/undotbs2' size 10M autoextend on;


切换UNDO表空间为新的UNDO表空间
SQL> alter system set undo_tablespace=undotbs2 scope=both;


验证当前数据库的还原表空间
SQL> 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表空间
SQL> drop tablespace undotbs1 including contents and datafiles;






如果需要规范数据库的表空间和路径,还原表空间名称undotbs1和路径不能改变,
可以安装刚才的步骤进行切换回来。
1、创建新的原来的UNDO表空间
可以在其它的磁盘空间临时创建还原表空间
SQL>create undo tablespace undotbs1 datafile '+DATA/orcl/datafile/undotbs1' size 10M autoextend on maxsize 3G;


2、切换UNDO表空间为新的UNDO表空间
SQL> alter system set undo_tablespace=undotbs1 scope=both;


3、验证当前数据库的还原表空间
SQL> show parameter undo


4、等待原UNDO表空间所有UNDO SEGMENT OFFLINE
select t.segment_name,t.tablespace_name,t.segment_id,t.status from dba_rollback_segs t;


5、删除UNDO2表空间
SQL> drop tablespace undotbs2 including contents and datafiles;


产生问题的原因主要以下两点:
1. 有较大的事务量让Oracle Undo自动扩展,产生过度占用磁盘空间的情况;
2. 有较大事务没有收缩或者没有提交所导制;
说明:本问题在ORACLE系统管理中属于比较正常的一现象,日常维护多注意对磁盘空间的监控。


UNDO表空间介绍
UNDO表空间用于存放UNDO数据,当执行DML操作(INSERT,UPDATE和DELETE)时,oracle会将这些操作的旧数据写入到UNDO段,在oracle9i之前,管理UNDO数据时使用(Rollback Segment)完成的.从oracle9i开始,管理UNDO数据不仅可以使用回滚段,还可以使用UNDO表空间.因为规划和管理回滚段比较复杂,所有oracle database 10g已经完全丢弃用回滚段.并且使用UNDO表空间来管理UNDO数据。

你可能感兴趣的:(ORACLE实验)