Undo表空间的状态(STATUS)有三种取值------- ACTIVE, EXPIRED, UNEXPIRED, 他们的含义是:
ACTIVE: 正在使用的undo表空间区域, 例如: 正在执行的没有commit的dml涉及的数据所占用的区域. 状态为ACTIVE的区域不可以被新数据覆盖
EXPIRED: 过期数据, 这个状态说明该区域的数据可以被新数据覆盖,可以理解为空闲区域
UNEXPIRED: 是介于前两者的中间状态, 如果undo表空间的空闲区域和EXPIRED区域都已经消耗光了,则oracle会将新数据覆盖到这个区域, 但是有可能引起某些sql错误,例如快照过旧
SELECT tablespace_name, status, SUM (bytes) / 1024 / 1024 "Bytes(M)" FROM dba_undo_extents GROUP BY tablespace_name, status;


解决,建立新的UNDOTBS表空间,然后让系统默认使用这个表空间,等到切换完毕,删除老的UNDOTBS表空间即可。
1.查找数据库的UNDO表空间名,确定当前例程正在使用的UNDO表空间:Show parameter undo_tablespace。

2.检查数据库UNDO表空间占用空间情况以及数据文件存放位置;
SQL>select file_name,bytes/1024/1024 from dba_data_files where tablespace_name like 'UNDOTBS1%';

3. 查看回滚段的使用情况,哪个用户正在使用回滚段的资源,如果有用户最好更换时间(特别是生产环境)。
SQL> select s.username, u.name from v$transaction t,v$rollstat r, v$rollname u,v$session s
where s.taddr=t.addr and t.xidusn=r.usn and r.usn=u.usn order by s.username;
4.检查UNDO Segment状态; 还原表空间中还存在11个回滚的对象
SQL> select usn,xacts,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks from v$rollstat order by rssize;

5.创建新的UNDO表空间,并设置自动扩展参数;
create undo tablespace undotbs2 datafile '/home/oracle/oradata/uatdb/undotbs10.dbf' size 100m reuse autoextend on next 50m maxsize 32000m;
6.切换UNDO表空间为新的UNDO表空间 , 动态更改spfile配置文件;
alter system set undo_tablespace=undotbs2 scope=both;

7.验证当前数据库的 UNDO表空间 SQL> show parameter undo

8.等待原UNDO表空间所有UNDO SEGMENT OFFLINE;
select usn,xacts,status,rssize/1024/1024,hwmsize/1024/1024, shrinks from v$rollstat order by rssize; select t.segment_name,t.tablespace_name,t.segment_id,t.status from dba_rollback_segs t;
上面对应的UNDOTBS1还原表空间所对应的回滚段均为OFFLINE
9.到$ORACLE_HOME/dbs/init$ORACLE_SID.ora如下内容是否发生变更: (或者show parameter undo)
cat /u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfileuatdb.ora

如果没有发生变更请执行如下语句: SQL> create pfile from spfile;
10.删除原有的UNDO表空间;
SQL> drop tablespace undotbs1 including contents;
最后需要在重启数据库或者重启计算机后到存储数据文件的路径下删除数据文件(为什么要手动删除呢:以上步骤只是删除了ORACLE中undo表空间的逻辑关系,即删除了数据文件在数据字典中的关联,不会自动删除项关联的数据文件)。
drop tablespace undotbs1 including contents and datafiles;
浙公网安备 33010602011771号