今天在检查数据库占用空间的时候,突然发现一个奇怪的现象。df与du的输出值差别很大。
df -h
Filesystem size used avail capacity Mounted on
......
/dev/vx/dsk/oracle_data_dg/OFS_DATA_2
963G 504G 430G 54% /oracle/data2
/dev/vx/dsk/oracle_data_dg/OFS_DATA_1
963G 527G 409G 57% /oracle/data1
.......
df显示/oracle/data1和/oracle/data2分别占用了500多G的空间。而du的输出如下:
du -sk *
84133352 arch
27686 crsdata
342248803 data1
380479470 data2
253124246 flash
4718674 redo1
4718674 redo2
425879 userdata
du显示data1和data2分别占用约300G空间。
再从数据库里检查一下:
SQL> select sum(TOTAL_M),sum(USED_M),sum(FREE_M) from
2 (SELECT tablespace_name,sum_m as total_m, (sum_m - free_m) as used_m,free_m,
3 to_char(100*(sum_m-free_m)/sum_m, '999.99') || '%' AS pct_used,
4 to_char(100*free_m/sum_m, '999.99') || '%' AS pct_free
5 FROM ( SELECT tablespace_name,sum(bytes)/1024/1024 AS sum_m FROM dba_data_files GROUP BY tablespace_name),
6 ( SELECT tablespace_name AS fs_ts_name,sum(bytes/1024/1024) AS free_m
7 FROM dba_free_space GROUP BY tablespace_name )
8 WHERE tablespace_name = fs_ts_name(+)
9 order by free_m);
SUM(TOTAL_M) SUM(USED_M) SUM(FREE_M)
------------ ----------- -----------
672953.75 416450.313 256503.438
数据库中得到的结果与du差不多。那么df多占用的400G空间是哪来的呢?
突然想到我们使用NBU备份数据库 snapshot,但一直不成功。会不会是NBU创建snapshot占用的空间呢?
于是检查一下storage chechpoint:
fsckptadm list /oracle/data2
/oracle/data2
NBU+2008.06.01.00h00m44s+27053:
ctime = Sun Jun 01 00:00:46 2008
mtime = Sun Jun 01 23:58:37 2008
flags = largefiles, removable
NBU+2008.05.25.14h16m29s+11962:
ctime = Sun May 25 14:16:34 2008
mtime = Sun Jun 01 23:58:37 2008
flags = largefiles, removable
NBU+2008.05.18.00h01m49s+17093:
ctime = Sun May 18 00:01:52 2008
mtime = Sun Jun 01 23:58:37 2008
flags = largefiles, removable
NBU+2008.05.07.16h19m51s+2701:
ctime = Wed May 07 16:19:53 2008
mtime = Sun Jun 01 23:58:37 2008
flags = largefiles, removable
....
可以看到有很多storage checkpoint. 删除这些checkpoint.
fsckptadm -vs remove NBU+2008.05.07.16h19m51s+2701 /oracle/data2
......
删除后df显示结果与du差不多:
df -h
Filesystem size used avail capacity Mounted on
......
/dev/vx/dsk/oracle_data_dg/OFS_DATA_2
963G 364G 561G 40% /oracle/data2
/dev/vx/dsk/oracle_data_dg/OFS_DATA_1
963G 341G 583G 37% /oracle/data1
......
分析一下原因,应该是在NBU备份时已经产生了storage checkpoint,但由于备份没有成功就退出了,NBU就没有自动删除这些storage checkpoint。结果时间一长,这些checkpoint占用的空间就越来越大,导致du与df的值相差很大。
看来如果NBU备份snapshot不成功的话,还要注意一下主机上的checkpoint,根据实际情况决定是否删除。
注:最常见的df和du输出结果不同的原因是:文件删除后空间没有释放。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/228190/viewspace-331029/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/228190/viewspace-331029/