oracle 删空间,oracle删除数据后,空间释放

Oracle 在删除数据后,因为高水位线的问题,并不会 自动释放空间。

所有的oracle段(segments,在此,为了理解方便,建议把segment作为表的一个同义词) 都有一个在段内容纳数据的上限,我们把这个上限称为”high water mark”或HWM。这个HWM是一个标记,用来说明已经有多少没有使用的数据块分配给这个segment。HWM通常增长的幅度为一次5个数据块,原则上HWM只会增大,不会缩小,即使将表中的数据全部删除,HWM还是为原值,由于这个特点,使HWM很象一个水库的历史最高水位,这也就是HWM的原始含义,当然不能说一个水库没水了,就说该水库的历史最高水位为0。但是如果我们在表上使用了truncate命令,则该表的HWM会被重新置为0。

--

--查看hwm

select file_name, ceil((nvl(hwm, 1) * 8192) / 1024 / 1024) as "HWM(MB)"

from dba_data_files a,

(select file_id, max(block_id + blocks - 1) hwm

from dba_extents

group by file_id) b

where a.file_id = b.file_id(+);

--查看hwm 信息全

SELECT *

FROM (SELECT /*+ ordered use_hash(a,b,c) */

a.file_id,

a.file_name,

a.filesize,

b.freesize,

(a.filesize - b.freesize) usedsize,

c.hwmsize,

c.hwmsize - (a.filesize - b.freesize) unsedsize_belowhwm,

a.filesize - c.hwmsize canshrinksize

FROM (SELECT file_id,

file_name,

round(bytes / 1024 / 1024) filesize

FROM dba_data_files) a,

(SELECT file_id, round(SUM(dfs.bytes) / 1024 / 1024) freesize

FROM dba_free_space dfs

GROUP BY file_id) b,

(SELECT file_id, round(MAX(block_id) * 8 / 1024) HWMsize

FROM dba_extents

GROUP BY file_id) c

WHERE a.file_id = b.file_id

AND a.file_id = c.file_id

ORDER BY unsedsize_belowhwm DESC)

WHERE file_id IN (SELECT file_id

FROM dba_data_files

WHERE tablespace_name = 'DMSB_01')

ORDER BY file_id;

--释放

alter database datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\D_TEST1' resize 600m;

高水位详解,引自:http://www.cnblogs.com/linjiqin/archive/2012/01/15/2323030.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值