收缩段核心步骤:--启用行移动alter table T3 enable row movement;--与大多数Oracle SQL命令不同,添加COMPACT关键字后,实际执行的操作不多反少,即HWM不移动alter table T3 shrink space compact;--去掉COMPACT关键字后,执行HWM移动alter table T3 shrink space;--禁用行移动alter table T3 disable row movement;实验:执行段分析和收缩操作
3.1 创建表T3
--创建表T3create table T3 (c1 varchar2(4000));
3.2 往T3插入1000行(使用大值),然后使用小值更新这些行
--往T3插入1000行(使用大值)beginfor i in 1..1000 loopinsert into T3 select rpad(i,3900,"*") from dual;end loop;commit; end;/--T3大小select segment_name, BYTES/1024/1024 "MB" from user_segments where segment_name = "T3";SEGMENT_NAME MB------------------------------ ----------T38--使用小值更新这些行update t3 set c1="1";commit;--此时再次查询表T3大小是不变的
3.3 设置启动Segment Advisor作业
variable task_id numberdeclarename varchar2(100);descr varchar2(500);obj_id number;beginname := ""; --unique namedescr := "Check T3 table";dbms_advisor.create_task("Segment Advisor", :task_id, name, descr, null);dbms_advisor.create_object(name, "TABLE", "JINGYU", "T3", null, null, obj_id);dbms_advisor.set_task_parameter(name, "RECOMMEND_ALL", "TRUE");dbms_advisor.execute_task(name);end;/执行过程如下:SQL> conn jingyu/jingyuConnected.SQL> variable task_id numberSQL> declare2name varchar2(100);3descr varchar2(500);4obj_id number;5begin6name := ""; --unique name7descr := "Check T3 table";8dbms_advisor.create_task("Segment Advisor", :task_id, name, descr, null);9dbms_advisor.create_object(name, "TABLE", "JINGYU", "T3", null, null, obj_id); 10dbms_advisor.set_task_parameter(name, "RECOMMEND_ALL", "TRUE"); 11dbms_advisor.execute_task(name); 12end; 13/PL/SQL procedure successfully completed.Elapsed: 00:00:02.01SQL> SQL> SQL> print task_id TASK_ID----------1358根据上面的TASK_ID查询DBA_ADVISOR_FINDINGScol owner for a20col task_name for a20col type for a20select owner, task_id, task_name, type, message, more_info from dba_advisor_findings where task_id=1358;OWNER TASK_ID TASK_NAMETYPE-------------------- ---------- -------------------- --------------------MESSAGE------------------------------------------------------------------------------------------------------------------------MORE_INFO------------------------------------------------------------------------------------------------------------------------JINGYU 1358 TASK_1358PROBLEMThe free space in the object is less than 10MB.Allocated Space:8388608: Used Space:954000: Reclaimable Space :7434608:
3.4 执行段收缩
alter table T3 enable row movement;alter table T3 shrink space compact;alter table T3 shrink space;alter table T3 disable row movement;--T3大小select segment_name, BYTES/1024/1024 "MB" from user_segments where segment_name = "T3";SEGMENT_NAME MB------------------------------ ----------T3.0625可以看到,T3表由8M大小成功收缩成0.0625M大小。至此,完成T3表的shrink操作。更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12本文永久更新链接地址