歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux服務器

Linux / Unix 下文件刪除、句柄 與空間釋放問題

昨天在一個客戶環境,由於空間緊張,刪除了一個文件,遇到了文件句柄與空間釋放的問題,記錄一下。
在系統上,臨時表空間擴展到了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&nb

sp;    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

Copyright © Linux教程網 All Rights Reserved