图4.1.1
如果在alter table ... deallocate unused语句中使用了keep关键字,则可以在hwm之后保留指定大小的空闲空间,比如:
alter table t1 deallocate unused keep 10k;
回收后t1的存储示意如图4.1.2
图4.1.2
4.2删减表
根据3.2.1可以得到hwm以下块的使用情况。如何p大于时,对全表扫描性能会产生影响,同时也会耗用空间。
如果能够确认应用有良好的索引几乎不会用到全表扫描,那么high water mark以下的空块,尽管耗费了空间,不会对访问产生影响。如果不能确定,那么就需要考虑删减表。
删减表的操作将删除表中所有的记录,并且重置hwm标记。表在删减之后将成为一个空表。
在oracle中删减表只有如下的两种办法:
1.使用drop语句
先使用drop语句删除整个表,然后再重建这个表。在删除-重建的过程中,与表相关的所有索引、完整性约束以及触发器都会丢失,并且所有依赖于该表的对象都会变为invalid状态,同时原来争对表的授权也会失效。因此采用这种方式删除表中的记录代价太大。
2.使用truncate语句
truncate语句属于ddl语句,不会产生任何回退信息,并且被立即自动提交。在执行truncate语句时不会影响到与被删减表相关的任何数据库对象与授权,也不会触发表中所定义的触发器。此外,在对标进行删减时,hwm将重置,已经为表分配的存储空间将被回收。