由于没有准备充分的磁盘空间也没看清imp的参数,导致在导入数据过程中出现undo表空间不足而进程死锁。杀死进程后想删除undo表空间,发现undo表空间仍 有online状态,再细查
SELECT SEGMENT_NAME,OWNER,TABLESPACE_NAME,SEGMENT_ID,FILE_ID,STATUS FROM DBA_ROLLBACK_SEGS
发现有几个属于undotbs1的系统回滚段(_SYSSMU2$)状态是online的,所以无法drop掉undotbs1空间。
系统回滚段无法用ALTER ROLLBACK SEGMENT 名字 offline停掉。
上网一查,原来还是有办法的。
处理过程
1 create undo tablespace undotBS2 datafile '/..../...../UNDODOTBS2.DBF' size 100m;
alter system set undo_tablespace=undotBS2;
drop tablespace undotbs1 including contents;(进行这部操作的时候会报下面的错):
ORA-01548: 已找到活动回退段'_SYSSMU1$',终止删除表空间
2 修改文件/opt/..../admin/pfile/init.ora.162007221035,如下:
undo_management=manual
undo_retention=10800
undo_tablespace=undotBS2
_CORRUPTED_ROLLBACK_SEGMENTS =(_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)
3 重启服务
shutdown immediate
startup pfile='/opt/..../admin/pfile/init.ora.421200715439'
4 删除表空间
drop tablespace undotbs1 including contents and datafiles;
create undo tablespace undotBS1 datafile ......................
5 修改init.ora.162007221035恢复原状即可
6重启服务
shutdown immediate
startup
7alter system set undo_tablespace=undotBS1