今天發現一個測試數據庫磁盤空間快滿了,准備將幾個不再用的表空間刪除。通過以下命令刪除表空間內容及數據文件。
drop tablespace tablespace_name including contents and datafiles;
刪除之后通過df -h查看磁盤空間,沒有減少,反而增加了,很是奇怪。去存放數據文件的目錄查看,相關表空間的文件也已經被刪除了。
百度了一下,發現了遇到相同情況的一個帖子,具體見這里。
處理過程如下:
1、通過lsof命令查看是否有進程正在占用這幾個表空間數據文件
lsof | grep delete
2、結果中可以看到有兩個進程占用着需要刪除文件
3、通過操作系統進程(可見這篇文章)查看oracle的session,查看到一台機器有客戶端連接着數據庫,實際上是pl/sql developer
4、到這台機器上關掉pl/sql developer,文件被真正刪除,df -h顯示空間正常
原因:
1、雖然通過rm -rf刪除了文件,但是有進程正在連接着這個文件,所以實際上這個文件是沒有被徹底刪除的,直到連接的進程被kill掉才會徹底刪除這個文件;
2、du是通過文件名統計使用空間的,rm -rf之后文件對於文件系統來說就已經沒有了,所以du查看空間正確,而df是查看的實際硬盤使用空間。