共计 974 个字符,预计需要花费 3 分钟才能阅读完成。
今天例行 Oracle 数据库维护时,因为一个文件系统已经达到 82%,而且又要创建新的分区表空间,所以删掉了该分区表最前面两个分区,然后删掉对应的表空间及数据文件(约 15G),用下面语句:
alter table tm_bus_site_his drop partition p_site200806_a;
…
DROP TABLESPACE tm_index200805_a INCLUDING CONTENTS and datafiles cascade constraints;
…
删掉以后 发现该文件系统仍然是 82%,占用的存储空间仍旧没有释放,是什么原因呢?
从网上搜索到下面的解释:
一般说来不会出现 rm 掉不释放空间的情况
出现这样的情况一般是由于有进程在向文件中写数据或有进程正在访问文件
而此时 rm 文件则会出现不释放空间的情况。
理解这样的问题需要理解 rm 的操作内含
一个文件的存放有数据部分和指针部分,而指针位于文件系统的头
删除操作系统的一个文件与 oracle drop 表的实质有些相似
处理掉指针,文件数据部分占用的空间就可以写入新内容了
之所以出现 rm 不释放即为有进程在用这个文件而引起操作系统认为这个文件未实质释放,从而 df 或 bdf 空间统计不正确
这一类问题的解决方法一般说来可以重启操作系统,重新 umount 及 mount 那个文件系统
这并不是一个好方法
建议的操作方法如下:
1、下载一个 lsof 软件装上,google 上可以搜到
2、找到正在用被删文件的进程
lsof | grep deleted
3、kill 掉相应的进程空间就释放了
其它建议:
1、清理 alert.log listerner.log 这些日志文件时最好用 ”> 文件 ” 这样的操作方式,不要用 rm。
2、清理归档日志最好用 backup … delete input 这样的方式。
3、如果你的操作系统总出现 rm 不释放空间的问题, 该请 sa 好好查查系统问题了, 同时可以在 rm 前用 lsof 看一下有无进程在用这个文件。
4、解决问题的方法很多,最好不要用重启数据库或重启操作系统这样的方法。
更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-04/130312.htm