今天在检查oracle备份结果时,观察到磁盘空间严重不足(本来磁盘空间就紧张,
公司服务器不肯升级硬件:L),
查看库的表空间使用情况,发现UNDO表空间的使用到15G
于是,决定将切换一个新的UNDO表空间
如下步骤首先查看系统参数查看正在使用的表空间是哪个
SQL> show parameter undo;
NAME TYPE VALUE
-------------------------------- --------- -------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string undotbs1
新建UNDO表空间
create undo tablespace undotbs2 datafile
'/opt/app/oracle/oradata/prod/undotbs02.dbf'
size 1024m autoextend on max size 8192M;
切换操作:
alter system set undo_tablespace='undotbs2' scope=both;
这时候可以将原来的表空间OFFLINE然后DROP掉:
在做之前先看看是否有大的事物在执行:
SQL> select count(*) from v$transaction;
COUNT(*)
----------
0
在系统很空闲的时候做事很好的:
alter tablespace undotbs1 offline;
drop tablespace undotbs1;
然后手工删除物理数据文件。(腾出了10多G的空间O(∩_∩)O哈哈:victory:~)
如果不ofline的话,是删除不掉的,虽然数据字典里面被删除了,但是系统进程还在访问UNDOTBS1数据文件
所以资源没有释放当你查看磁盘空间(df -TH)的时候并没有释放空间。
在次确认切换完成结果:
SQL> show parameter undo;
NAME TYPE VALUE
------------------------- ----------- -------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string undotbs2
SQL> select segment_name,tablespace_name from dba_undo_extents;
SEGMENT_NAME TABLESPACE_NAME
------------------------------ ------------------------
_SYSSMU20$ UNDOTBS2
_SYSSMU20$ UNDOTBS2
_SYSSMU19$ UNDOTBS2
_SYSSMU19$ UNDOTBS2
_SYSSMU18$ UNDOTBS2
_SYSSMU18$ UNDOTBS2
_SYSSMU17$ UNDOTBS2
_SYSSMU17$ UNDOTBS2
_SYSSMU17$ UNDOTBS2
_SYSSMU16$ UNDOTBS2
_SYSSMU16$ UNDOTBS2
_SYSSMU15$ UNDOTBS2
_SYSSMU15$ UNDOTBS2
_SYSSMU14$ UNDOTBS2
_SYSSMU14$ UNDOTBS2
_SYSSMU13$ UNDOTBS2
_SYSSMU13$ UNDOTBS2
_SYSSMU12$ UNDOTBS2
_SYSSMU12$ UNDOTBS2