联机 shrink 命令是一个用于回收浪费的空间和重置 HWM 的强大的特性。我把后者(重置 HWM)看作该命令最有用的结果,因为它改进了全表扫描的性能。
找到收缩合适选择
在执行联机收缩前,用户可能想通过确定能够进行最完全压缩的段,以找出最大的回报。只需简单地使用 dbms_space 包中的内置函数 verify_shrink_candidate。如果段可以收缩到 1,300,000 字节,则可以使用下面的 PL/SQL 代码进行测试:
begin
if (dbms_space.verify_shrink_candidate
('ARUP','BOOKINGS','TABLE',1300000)
then
:x := 'T';
else
:x := 'F';
end if;
end;
/ |
PL/SQL 过程成功完成。
SQL> print x
X
--------------------------------
T
如果目标收缩使用了一个较小的数,如 3,000:
begin
if (dbms_space.verify_shrink_candidate
('ARUP','BOOKINGS','TABLE',30000)
then
:x := 'T';
else
:x := 'F';
end if;
end; |
变量 x 的值被设置成 'F',意味着表无法收缩到 3,000 字节。现在假定您将着手在一个表上,或者也许是一组表上创建一个索引的任务。除了普通的结构元素,如列和单值性外,您将不得不考虑的最重要的事情是索引的预期大小 — 必须确保表空间有足够的空间来存放新索引。
在 Oracle 数据库 9i 及其以前的版本中,许多 DBA 使用了大量的工具(从电子数据表到独立程序)来估计将来索引的大小。在 10g中,通过使用 DBMS_SPACE 包,使这项任务变得极其微不足道。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/751371/viewspace-606938/ ,如需转载,请注明出处,否则将追究法律责任。