昨天在一个客户环境,由于空间紧张,删除了一个文件,遇到了文件句柄与空间释放的问题,记录一下。
在系统上,临时表空间扩展到了32G,我新建了一个临时表空间,并切换了数据库设置:[oracle@corde tdb]$ ls -sort
Aix上lsof的参考文档: http://www.ibm.com/developerworks/aix/library/au-lsof.html
-The End-
在系统上,临时表空间扩展到了32G,我新建了一个临时表空间,并切换了数据库设置:[oracle@corde tdb]$ ls -sort
total 35101212之前空间已经使用了88%:
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
/dev/sda3 80632188 66675432 9860584 88% /data1然后删除这个文件,发现空间并未释放:
[oracle@corder tdb]$ rm temp01.dbf这是由于Linux/Unix上,该文件可能仍被其他进程使用的缘故,文件句柄未完全释放,空间无法释放出来,属于常见问题,可以通过lsof工具来查看哪些进程锁定了该文件:
[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
[root@db]# lsof|grep temp我们可以看到虽然文件标记为删除(deleted),但是仍然被几个进程锁定:
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)
[root@XcorderDB xcrtdb]# ps -ef|grep 3894如果可以kill这些进程,句柄就可以释放出来,否则可以重启数据库,之后即会释放。
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
Aix上lsof的参考文档: http://www.ibm.com/developerworks/aix/library/au-lsof.html
-The End-
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




