事件起源
某开发找到我说,XXX数据库服务器好像满了,expdp备份东西备份不了,看看吧。怎么办呢,先看看再说吧,一看,原来数据库有个特别大的undo表空间,貌似需要清理下。
准备工作
准备工作的目的是新建一个undo表空间,将Oracle默认的undo表空间进行切换,随后删除原先的undo表空间。
具体操作步骤参考如下:
1.找到所有的表空间文件,这里主要是找到计划删除undo表空间
select * from dba_data_files;
2.新建一个 undo 表空间,表空间名字和物理文件名字都换一个,自拓展的参数自行调整
create undo tablespace UNDOTBS3 datafile 'xxx.dbf' size 100M autoextend on next 100M maxsize unlimited;
3.修改系统的 undo 表空间为新创建的 undo 表空间
alter system set undo_tablespace=UNDOTBS3;
4.查看当前的UNDO表空间,可以看到,undo表空间已经是新建的表空间了

到这里,准备工作就做完了。
问题说明
5.此时直接删除原 undo 表空间和表空间文件,遇到 ORA-01548 的错误。

看问题字面的意思,是说原先的undo表空间中存在着活动的回滚段。这里又该如何处理呢?
实操方案
6.因为本次操作的环境是测试环境,所以选择了一个最简单快速的方法,表空间offline+drop。如果担心数据损坏,建议做一个expdp/exp逻辑备份。

注:如果不着急的话,可以将数据库的默认undo表空间修改之后运行一段时间,查看dba_rollback_segs 表,等到原undo表空间中只剩下“offline”状态的segment时( 如果有事务未提交,可以执行commit force命令强制提交 ),可以顺利删除。
7.完事检查是否已经成功删除

至此,磁盘空间完美释放。
参考方案
| Master Note: Troubleshooting ORA-1548 error (文档 ID 1577988.1) |





