数据库运行一段时间后,特别是长事务对数据库做大量的DML操作后,UNDO表空间可能会比较大,可以采用下面方式进行UNDO表空间收缩
1、查看UNDO表空间信息
show parameter undo
2、查看UNDO表空间对应的数据文件
select * from v$datafile;
3、创建新的UNDO表空间
create undo tablespace undo_newts datafile '....../undotb1.dbf' size 500m;
4、查看是否有活动的事务使用UNDO,若有事务正在活动,最好等没有活动事务进行操作,以防数据丢失
select s.sid,s.serial#,rm.name,s.terminal,s.program,s.username,s.status
from v$transaction t,v$rollstat t,v$rollname rm,v$session
where t.addr=s.taddr and t.xidusn=r.usn and rm.usn=r.usn;
有记录则说明有事务在用UNDO
5、切换UNDO表空间
alter system undo_tablespace=undo_newts scope=both;
6、删除原有表空间,删除后再去操作系统对应路径看原有的数据文件是否已经删除,若没有删除,可以采用手工删除
alter database datafile undo_file offline;
drop tablespace old_undo_tablespace including contents and datafiles;
7、重启数据库系统
shutdown immeidate;
startup;
8、查看新的UNDO表空间信息和数据文件状态
show parameter undo;
select * from v$datafile;