空间为什么不回收呢?

[复制链接]
查看11 | 回复6 | 2009-1-4 14:52:28 | 显示全部楼层 |阅读模式
oracle 10.2.01 下 做如下操作;
CREATE TABLE tmp_a
AS
SELECT * FROM dba_objects;
SQL> exec show_space('TMP_A');

Unformatted Blocks .....................
0
FS1 Blocks (0-25).....................
0
FS2 Blocks (25-50) .....................
0
FS3 Blocks (50-75) .....................
0
FS4 Blocks (75-100).....................
684
Full Blocks.....................
0
Total Blocks............................
768
Total Bytes............................. 6,291,456
Total MBytes............................
6
Unused Blocks...........................
64
Unused Bytes............................ 524,288
Last Used Ext FileId....................
4
Last Used Ext BlockId...................
70,281
Last Used Block.........................
64

delete from tmp_a;
commit;
select count(*) from tmp_a;
COUNT(*)
----------
0
dump 数据块 查看到 Highwater::0x010112c9ext#: 20 blk#: 64 ext size: 128
ALTER TABLE table_name DEALLOCATE UNUSED keep 0;
为什么没有数据了, 使用该语句还是不能是Highwater 移回去? 回收空间?
回复

使用道具 举报

千问 | 2009-1-4 14:52:28 | 显示全部楼层
DEALLOCATE 回收HWM以上的空闲空间,不降HWM.
空间之所以没有回收,因为没有空闲空间可以被回收.
[ 本帖最后由 jlttt 于 2009-3-17 14:40 编辑 ]
回复

使用道具 举报

千问 | 2009-1-4 14:52:28 | 显示全部楼层
如果表很大 1亿数据,现在删除了 50%数据
如何 使HWM 回收呢?
表又不能truncate, 插入到新表也很浪费资源
回复

使用道具 举报

千问 | 2009-1-4 14:52:28 | 显示全部楼层
alter table table_name move tbs ,
index rebuild
回复

使用道具 举报

千问 | 2009-1-4 14:52:28 | 显示全部楼层
exp/imp
CATS
SHRINK SPACE(10G)
回复

使用道具 举报

千问 | 2009-1-4 14:52:28 | 显示全部楼层
最少也要一个extent,你直接就KEEP 0了呀,那你不如DROP
回复

使用道具 举报

千问 | 2009-1-4 14:52:28 | 显示全部楼层
ALTER TABLE table_name DEALLOCATE UNUSED keep 0;
不能移动HWmark,只是将HW mark以上的空间回收,对于你这种情况没有什么作用,不影响数据
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行