数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

oracle数据库UNDO表空间释放


发布日期:2019年06月17日
 
oracle数据库UNDO表空间释放

今天早上在检查数据库文件的磁盘使用空间时发现undo表空间在这个周末居然用了G之多达到 了G!

按照平常的事物量不会增长这么快现在磁盘还剩几个G有点危险了于是决定对undo表空间进行清理

首先使用sys 用户创建一个undo表空间 undotbs

初始大小为G 自动扩展属性关闭磁盘空间只剩G多

sql>create undo tablespace undotbs datafile /usr/oracle/oradata/db/undotbsdbf size m autoextend off;

然后激活新的表空间

sql> alter system set undo_tablespace=undotbs;

系统已经更改!

查看是否有事物回滚

select count(*) from v$transaction

没有结果说明当前没有事物回滚

可以删除原来的undo表空间

于是

sql>drop tablespace undotbs including contents and datafiles ;

表空间已经删除!

兴奋的去看看磁盘空间应该有几G

当执行操作系统命令时候我心凉了!

怎么一点没有释放空间?

这可咋整没释放还搭进去了很多!!

查看log 没错误啊?

没办法了去找google 吧

找到了原因原来是有进程在访问undotbsdbf这个文件

将访问该文件的进程kill掉就可以了

那怎么查找那个进程呢?

lsof这个命令可以列出当前系统打开的文件被那些进程访问

lsof |grep delete

就可以找出那个进程

kill 进程ID

就可以了!

操作系统认为这个文件还存在所以没有释放磁盘空间

难道是我有操作错误? 为什么还有进程在访问呢? 查看日志undotbs已经offline了奇怪!

总算解决了获得了多G的空间

正常的切换undo是不会出现这种情况的还得多学习!

上一篇:oracle中Where子句顺序是否对SQL性能有影响

下一篇:深入分析关于Oracle的备份策略