在linux建立一个9i数据库,9i数据库的回滚段一般由系统自动管理。
因为经常做一些大量的写操作,而在程序中没有很好做控制,导致了回滚段自动扩展到20G。
但是由于是自动管理,无法进行删除。
查询回滚段信息:
SQL>select segment_name, owner, tablespace_name, status from dba_rollback_segs;
SEGMENT_NAME OWNER TABLESPACE_NAME STATUS
------------------------------ ------ ------------------------------ ----------------
SYSTEM SYS SYSTEM ONLINE
_SYSSMU1$ PUBLIC UNDOTBS1 ONLINE
_SYSSMU2$ PUBLIC UNDOTBS1 ONLINE
_SYSSMU3$ PUBLIC UNDOTBS1 ONLINE
_SYSSMU4$ PUBLIC UNDOTBS1 ONLINE
_SYSSMU5$ PUBLIC UNDOTBS1 ONLINE
_SYSSMU6$ PUBLIC UNDOTBS1 ONLINE
_SYSSMU7$ PUBLIC UNDOTBS1 ONLINE
_SYSSMU8$ PUBLIC UNDOTBS1 ONLINE
_SYSSMU9$ PUBLIC UNDOTBS1 ONLINE
_SYSSMU10$ PUBLIC UNDOTBS1 ONLINE
11 rows selected.
创建一个新的回滚段:
SQL>CREATE UNDO TABLESPACE 'UNDOTBS2' DATAFILE '/oracle/oradata/oradev/UNDOTBS2.dbf' SIZE 50M
切换回滚段:
SQL> alter system set undo_tablespace=undotbs2 scope=both;
等30分钟或者直接关闭数据库后重启,即可删除原来的回滚段:
SQL> drop rollback segment undotbs1;
即可删除原来高达22G的回滚段及其数据文件,释放空间。
但是对回滚段的大小,还是需要从程序或语句上进行修改,不再出现大数据量的操作而没有出现commit的情况。
----------------------------------------
后记
调小了回滚段后,在imp导入数据时,提示回滚段无法扩展的错误
解决方法:在imp时,加入参数 commit=y,直接提交,避免占用大回滚段