在开发环境的oracle库中,发现undo表空间已经占用了20G,导致磁盘空间不足,需要收缩表空间。
采用新建undo表空间的方式可以实现。
1)
确认当前undo表空间
SQL> show parameter undo
2) 新建表空间
SQL> create undo tablespace UNDO02 datafile '/oradata/ora10g/undo02.dbf' size 5G;
Tablespace created.
3) 切换数据库默认undo表空间为UNDO02
SQL> alter system set undo_tablespace=UNDO02;
SQL> show parameter undo_tablespace
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_tablespace string UNDO02
4)检查UNDO Segment状态
select * from V$rollstat;
主要看segments的status,都offline了,就可以删除原来的表空间啦,如果是开发环境就不用管这么多啦。
5) 删除原有undo表空间UNDO01
SQL> drop tablespace UNDO01 including contents and datafiles;
Tablespace dropped.
--------------------------------------------------
转移数据文件的位置的方法
1. alter tablespace users offline;
2. 把users的所有数据文件,oradata目录下相关的dbf文件移动到新的地方去。
3. 然后alter tablespace rename datafile '原数据文件名(带全路径)' to '新数据文件名(带全路径);
4. alter tablespace users online;