delete 能不能释放表空间

[复制链接]
查看11 | 回复9 | 2008-7-24 09:05:26 | 显示全部楼层 |阅读模式
测试表空间demo_01(20M)上只建有一个表logon_table,
logon_table里有20多万笔记录。
SQL> select count(*) from logon_table;
COUNT(*)
----------
260007

此时查询表空间的占用率:空余空间是1.9M
SQL> SELECT D.TABLESPACE_NAME "Name", D.STATUS "Status",TO_CHAR((A.BYTES / 1024 / 1024), '99,990.9') "Size (M)",TO_CHAR(((A.BYTES - DECODE(F.BYTES, NULL, 0, F.BYTES)) / 1024 / 1024),'99,990.9') "Used (M)", TO_CHAR((DECODE(F.BYTES, NULL, 0, F.BYTES) / 1024 / 1024),'99,990.9') "Free (M)" FROM SYS.DBA_TABLESPACES D, SYS.SM$TS_AVAIL A, SYS.SM$TS_FREE F WHERE D.TABLESPACE_NAME = A.TABLESPACE_NAME AND F.TABLESPACE_NAME (+) = D.TABLESPACE_NAME;
Name
Status
Size (M)
------------------------------------------------------------------------------------------ --------------------------- ---------------------------
Used (M)
Free (M)
--------------------------- ---------------------------
DEMO_01
ONLINE
20.0
18.1
1.9

SQL> delete from logon_table;
260007 rows deleted.

SQL> commit;
Commit complete.
查询表空间的占用率:空余空间还是1.9M
SQL> SELECT D.TABLESPACE_NAME "Name", D.STATUS "Status",TO_CHAR((A.BYTES / 1024 / 1024), '99,990.9') "Size (M)",TO_CHAR(((A.BYTES - DECODE(F.BYTES, NULL, 0, F.BYTES)) / 1024 / 1024),'99,990.9') "Used (M)", TO_CHAR((DECODE(F.BYTES, NULL, 0, F.BYTES) / 1024 / 1024),'99,990.9') "Free (M)" FROM SYS.DBA_TABLESPACES D, SYS.SM$TS_AVAIL A, SYS.SM$TS_FREE F WHERE D.TABLESPACE_NAME = A.TABLESPACE_NAME AND F.TABLESPACE_NAME (+) = D.TABLESPACE_NAME;
Name
Status
Size (M)
------------------------------------------------------------------------------------------ --------------------------- ---------------------------
Used (M)
Free (M)
--------------------------- ---------------------------
DEMO_01
ONLINE
20.0
18.1
1.9

这样的话,好象没办法释放表空间,请解释下原因么,
那么是不是重启数据库后,表占用的空间能释放,
还是一直是这样?
回复

使用道具 举报

千问 | 2008-7-24 09:05:26 | 显示全部楼层
这个问题问的次数太多了,GOOGLE一下吧
回复

使用道具 举报

千问 | 2008-7-24 09:05:26 | 显示全部楼层
delete 不会释放高水位标志的
要truncate 才可以
回复

使用道具 举报

千问 | 2008-7-24 09:05:26 | 显示全部楼层
delete 不会释放高水位标志的
可以shink一下
回复

使用道具 举报

千问 | 2008-7-24 09:05:26 | 显示全部楼层
delete不会降低HWM,不会释放空间,要使用truncate
10g可以使用shrink来降低HWM来释放空间
回复

使用道具 举报

千问 | 2008-7-24 09:05:26 | 显示全部楼层
可以去看看delete/truncate的区别
回复

使用道具 举报

千问 | 2008-7-24 09:05:26 | 显示全部楼层
虽然没有释放,但可以利用,相当于释放了。
回复

使用道具 举报

千问 | 2008-7-24 09:05:26 | 显示全部楼层
alter tablelogon_table move compress;压一下也是可以的,
回复

使用道具 举报

千问 | 2008-7-24 09:05:26 | 显示全部楼层
高水位没变,但空间标识为可用
回复

使用道具 举报

千问 | 2008-7-24 09:05:26 | 显示全部楼层
同意
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行