暂无图片
Oracle 用 delete from table where xxx=xxx 删除大量记录后 表空间使用率未降低。是否只能使用 alter table xxx shrink space 来释放空间?
我来答
分享
暂无图片 匿名用户
Oracle 用 delete from table where xxx=xxx 删除大量记录后 表空间使用率未降低。是否只能使用 alter table xxx shrink space 来释放空间?

Oracle 用 delete from table where xxx=xxx 删除大量记录后 表空间使用率未降低。是否只能使用 alter table xxx shrink space 来释放空间?

我来答
添加附件
收藏
分享
问题补充
4条回答
默认
最新
刘贵宾

Delete操作并不会释放占用的空间,释放空间说白了就是降低高水位线,delete 删除时有高水位线的问题,需要降低高水位线。

而释放表的高水位通常有如下几种办法:

(1)对表进行MOVE操作:ALTER TABLE TABLE_NAME MOVE;。若表上存在索引,则记得重建索引。

(2)对表进行SHRINK SPACE操作:ALTER TABLE TABLE_NAME SHRINK SPACE;,注意,在执行该指令之前必须开启行移动:ALTER TABLE TABLE_NAME ENABLE ROW MOVEMENT;。该方法的优点是:在碎片整理结束后,表上相关的索引仍然有效,缺点是会产生大量的UNDO和REDO。

(3)create table xxx as select * from xxx 重建表,复制要保留的数据到临时表T,DROP原表,然后RENAME临时表T为原表。

(4)exp/imp或expdp/impdp重构表。

(5)若表中没有数据则直接使用TRUNCATE来释放高水位。

暂无图片 评论
暂无图片 有用 0
张sir

如果没有停机窗口,或者停机窗口比较短,可以使用在线重定义。

暂无图片 评论
暂无图片 有用 0
布衣
暂无图片

我们这边一般操作是在线重定义,然后索引rebuid online 来释放空间

暂无图片 评论
暂无图片 有用 0
Thomas

感觉这和当初设计有关,比如一个大表,频繁访问更新的,却和静态的LOOKUP表放在一个TBS下。如果现在发现问题了,还是想法子把不同特点的表分别存到不同表空间上,后续再处理就方便很多。

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏