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

Linux / Unix 下文件删除、句柄 与空间释放问题

原创 eygle 2009-10-21
653
昨天在一个客户环境,由于空间紧张,删除了一个文件,遇到了文件句柄与空间释放的问题,记录一下。
在系统上,临时表空间扩展到了32G,我新建了一个临时表空间,并切换了数据库设置:[oracle@corde tdb]$ ls -sort
total 35101212
   51264 -rw-r-----  1 oracle    52429312 Oct 20 08:58 redo02.log
   51264 -rw-r-----  1 oracle    52429312 Oct 20 10:24 redo03.log
    5144 -rw-r-----  1 oracle     5251072 Oct 20 10:29 users01.dbf
32943240 -rw-r-----  1 oracle 34358697984 Oct 20 10:35 temp01.dbf
 1035268 -rw-r-----  1 oracle  1059069952 Oct 20 10:39 undotbs01.dbf
  430516 -rw-r-----  1 oracle   440410112 Oct 20 10:39 sysaux01.dbf
  512516 -rw-r-----  1 oracle   524296192 Oct 20 10:40 system01.dbf
   51264 -rw-r-----  1 oracle    52429312 Oct 20 10:40 redo01.log
    6912 -rw-r-----  1 oracle     7061504 Oct 20 10:40 control03.ctl
    6912 -rw-r-----  1 oracle     7061504 Oct 20 10:40 control02.ctl
    6912 -rw-r-----  1 oracle     7061504 Oct 20 10:40 control01.ctl
之前空间已经使用了88%:
/dev/sda3             80632188  66675432   9860584  88% /data1
然后删除这个文件,发现空间并未释放:
[oracle@corder tdb]$ rm temp01.dbf
[oracle@corder tdb]$ df -k
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                       5611984    160272   5166632   4% /
/dev/sda1               101086     12495     83372  14% /boot
/dev/sda3             80632188  66675432   9860584  88% /data1
这是由于Linux/Unix上,该文件可能仍被其他进程使用的缘故,文件句柄未完全释放,空间无法释放出来,属于常见问题,可以通过lsof工具来查看哪些进程锁定了该文件:
[root@db]# lsof|grep temp
oracle     3167 oracle   38uW     REG        8,2  1048584192    4497986 /data3/oradata/temp01.dbf
oracle     3173 oracle   35u      REG        8,2  1048584192    4497986 /data3/oradata/temp01.dbf
oracle     3894 oracle   22u      REG        8,3 34358697984    3808524 /data1/xcrtdb/temp01.dbf (deleted)
oracle     3894 oracle   25u      REG        8,2  1048584192    4497986 /data3/oradata/temp01.dbf
oracle    12576 oracle   15u      REG        8,3 34358697984    3808524 /data1/xcrtdb/temp01.dbf (deleted)
oracle    24544 oracle   11u      REG        8,3 34358697984    3808524 /data1/xcrtdb/temp01.dbf (deleted)
我们可以看到虽然文件标记为删除(deleted),但是仍然被几个进程锁定:
[root@XcorderDB xcrtdb]# ps -ef|grep 3894
oracle    3894     1 10 07:35 ?        00:19:38 ora_j000_xcrtdb
root     18974 16849  0 10:49 pts/3    00:00:00 grep 3894
[root@XcorderDB xcrtdb]# ps -ef|grep 12576
oracle   12576     1  0 Oct19 ?        00:00:24 oraclexcrtdb (LOCAL=NO)
root     18992 16849  0 10:49 pts/3    00:00:00 grep 12576
[root@XcorderDB xcrtdb]# ps -ef|grep 24544
oracle   24544     1  0 Oct19 ?        00:00:19 oraclexcrtdb (LOCAL=NO)
root     19018 16849  0 10:49 pts/3    00:00:00 grep 24544
如果可以kill这些进程,句柄就可以释放出来,否则可以重启数据库,之后即会释放。

Aix上lsof的参考文档: http://www.ibm.com/developerworks/aix/library/au-lsof.html

-The End-



「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论