17,086
社区成员
使用DROP TABLE后删除了表,但是发现服务器的.dbf占用空间很大,使用以下语句查询数据文件使用情况
1 select /*+ ordered use_hash(a,b,c) */
2 a.file_id,a.file_name,a.filesize, b.freesize,
3 (a.filesize-b.freesize) usedsize,
4 c.hwmsize,
5 c.hwmsize - (a.filesize-b.freesize) unsedsize_belowhwm,
6 a.filesize - c.hwmsize canshrinksize
7 from
8 (
9 select file_id,file_name,round(bytes/1024/1024) filesize from dba_data_files
10 ) a,
11 (
12 select file_id,round(sum(dfs.bytes)/1024/1024) freesize from dba_free_space dfs
13 group by file_id
14 ) b,
15 (
16 select file_id,round(max(block_id)*8/1024) HWMsize from dba_extents
17 group by file_id) c
18 where a.file_id = b.file_id
19 and a.file_id = c.file_id
20 order by unsedsize_belowhwm desc
其中:
File_id : 文件编号
File_name: 文件名称
File_size: 数据文件占用磁盘空间大小
Freesize:文件中被标记为free的空间大小
Usedsize: 使用的空间大小。
Hwmsize: 已经分配出去的空间大小,如果希望通过alter database datafile … resize integerM回收空间,将需要这个值作为参考,不能回收到这个值之下,否则会报错。
Freee_belowhwm_size: 在HWM(高水位标记线之下的空闲空间数),这个是理论上的可以回收的空间大小。
Curr_can_shrink: 这个是实际大小与HWM标记之间的差,就是还没有分配出去的空间大小。
显示File_size为24GB,Freesize为9GB,Usedsize为15GB,Hwmsize为23GB,Freee_belowhwm_size为8GB,Curr_can_shrink为1GB
也就是说我的Hwm大小为23GB,而理论上为可以缩小8GB,但是根据实际大小与HWM的差,我只能缩小1GB。
根据网上的说法(https://bbs.csdn.net/topics/310046810)是我需要先降低HWM,请问这个该如何降低HWM?