很精辟的oracle高水位线,终于知道DELETE和TRUNCATE为什么不一样了 建议把segment作为表的一个同义词)都有一个在段内容纳数据的上限,我们把这个上限称为\"high water mark\"或HWM。这个HWM是一个标记,用来说明已经有多少没有使用的数据块分配给这个segment。HWM通常增长的幅度为一次5个数据块,原则上HWM只会增大,不会缩小,即使将表中的数据全部删除,HWM还是为原值,由于这个特点,使HWM很象一个水库的历史最高水位,这也就是HWM的原始含义,当然不能说一个水库没水了,就说该水库的历史最高水位为0。
如何降低Oracle表的高水位 1.执行表重建指令 alter table table_name move(验证不可行,不降低水位线,但可释放表空间)当你创建了一个对象如表以后,不管你有没有插入数据,它都会占用一些块,ORACLE也会给它分配必要的空间.同样,用ALTER TABLE MOVE释放自由空间后,还是保留了一些空间给这个表.ALTER TABLE.MOVE 后面不跟参数也行,不跟参数表还是在原来的表空间,Move后记住重建索引.查询失效索引语句:select index_name,table_name,tablespace_name,status From dba_indexes Where owner='HNUNICOM' And status<;>;'VALID';重建索引语句:alter index INDEX_NAME rebuild tablespace TABLESPACE_NAME;如果以后还要继续向这个表增加数据,没有必要move,只是释放出来的空间,只能这个表用,其他的表或者segment无法使用该空间。2.执行alter table table_name shrink space;(已经验证成功,推荐使用,可释放数据库和磁盘空间空间,大表可同时降低表自身和表空间的高水位线,小表则只可以降低表自身的高水位线,原因不详)注意,此命令为Oracle 10g新增功能,执行该指令之前必须允许行移动 alter table table_name enable row movement;3.复制要保留的数据到临时表t,drop原表,然后rename。
很精辟的oracle高水位线,终于知道DELETE和TRUNCATE为什么不一样 两个操作都是删除表数据的但是实际却又很大的不同delete只是单纯的删掉表里的数据,他可以添加删除条件,但是不会将空间回收,删除的时候有记录日志,方便恢复,但是速度比较慢truncate table是全表清空的操作,回收空间,无日志,基本上是不可恢复的