暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【Oracle】服务器满了,那就快速删除重建UNDO表空间吧

IT技术佳肴 2018-11-26
886

事件起源


某开发找到我说,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)

文章转载自IT技术佳肴,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论