See: http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96540/clau ses4a.htm#1004662 If it still doesn't make sense to you, reply with values for INITIAL, NEXT, and MINEXTENTS. Mark J. Bobak Oracle DBA ProQuest Company Ann Arbor, MI "Post Hoc Ergo Propter Hoc" -----Original Message----- From: Sergei [mailto:good_morning@xxxxxxxxxxx]=20 Sent: Wednesday, May 12, 2004 12:36 PM To: oracle-l@xxxxxxxxxxxxx Subject: Deallocate unused (above high water mark) Good morning Oracle gurus, Could somebody please explain why after 'alter table deallocate unused'=20 my user_tables view still shows empty blocks? At the same time, dbms_space.unused_space procedure shows 0 empty blocks. Thanks, Sergei. Oracle DBA and instructor. That's what happened: SQL> analyze table test compute statistics; Table analyzed. SQL> select extent_id, bytes from user_extents where segment_name=3D'TEST'; EXTENT_ID BYTES ---------- ---------- 0 65536 1 65536 2 65536 3 65536 4 65536 5 65536 6 65536 7 65536 8 65536 9 65536 10 65536 11 65536 12 65536 13 65536 14 65536 15 65536 16 1048576 17 rows selected. SQL> select num_rows, blocks, num_rows/blocks as "R/B", empty_blocks=20 from user_tables where table_name=3D'TEST'; NUM_ROWS BLOCKS R/B EMPTY_BLOCKS ---------- ---------- ---------- ------------ 1000 180 5.55555556 76 1 row selected. (the unused_space.sql script runs dbms_space.unused_space procedure. Details are at the bottom.) SQL> @unused_space Enter value for owner: jh Enter value for table_name: test Total blocks allocated to the table =3D 256 Total bytes allocated to the table =3D 2097152 Unused blocks (above HWM) =3D 64 Unused bytes (above HWM) =3D 524288 Last extent used file ID =3D 9 Last extent used begining block ID =3D 264 Last used block in last extent =3D 64 PL/SQL procedure successfully completed. SQL> alter table test deallocate unused; Table altered. SQL> analyze table test compute statistics; Table analyzed. SQL> select extent_id, bytes from user_extents where segment_name=3D'TEST'; EXTENT_ID BYTES ---------- ---------- 0 65536 1 65536 2 65536 3 65536 4 65536 5 65536 6 65536 7 65536 8 65536 9 65536 10 65536 11 65536 12 65536 13 65536 14 65536 15 65536 16 524288 17 rows selected. (The last extent did get a cut) SQL> select num_rows, blocks, num_rows/blocks as "R/B", empty_blocks=20 from user_tables where table_name=3D'TEST'; NUM_ROWS BLOCKS R/B EMPTY_BLOCKS ---------- ---------- ---------- ------------ 1000 180 5.55555556 12 1 row selected. (Some empty blocks are gone, but not all) SQL> @unused_space Enter value for owner: jh Enter value for table_name: test Total blocks allocated to the table =3D 192 Total bytes allocated to the table =3D 1572864 Unused blocks (above HWM) =3D 0 Unused bytes (above HWM) =3D 0 Last extent used file ID =3D 9 Last extent used begining block ID =3D 264 Last used block in last extent =3D 64 PL/SQL procedure successfully completed. ( !!!!! All blocks above high water mark are gone, according to=20 dbms_space !!!!!) --=20 Sergei Shepelev, Oracle DBA and instructor What is in the script unused_space.sql: -- ----------------------------- set serveroutput on -- declare=20 tblock number; tbyte number; ublock number; ubyte number; lue_fid number; lue_bid number; lublock number; -- begin dbms_space.unused_space( upper('&owner'), upper('&table_name'), 'TABLE', tblock, tbyte, ublock, ubyte, lue_fid, lue_bid, lublock); dbms_output.put_line('Total blocks allocated to the table =3D '||lpad(tblock,10,' ')); dbms_output.put_line('Total bytes allocated to the table =3D '||lpad(tbyte,10,' ')); dbms_output.put_line('Unused blocks (above HWM) =3D '||lpad(ublock,10,' ')); dbms_output.put_line('Unused bytes (above HWM) =3D '||lpad(ubyte,10,' ')); dbms_output.put_line('Last extent used file ID =3D '||lpad(lue_fid,10,' ')); dbms_output.put_line('Last extent used begining block ID =3D '||lpad(lue_bid,10,' ')); dbms_output.put_line('Last used block in last extent =3D '||lpad(lublock,10,' ')); end; / -- ------------------------------- ---------------------------------------------------------------- Please see the official ORACLE-L FAQ: http://www.orafaq.com ---------------------------------------------------------------- To unsubscribe send email to: oracle-l-request@xxxxxxxxxxxxx put 'unsubscribe' in the subject line. -- Archives are at //www.freelists.org/archives/oracle-l/ FAQ is at //www.freelists.org/help/fom-serve/cache/1.html ----------------------------------------------------------------- ---------------------------------------------------------------- Please see the official ORACLE-L FAQ: http://www.orafaq.com ---------------------------------------------------------------- To unsubscribe send email to: oracle-l-request@xxxxxxxxxxxxx put 'unsubscribe' in the subject line. -- Archives are at //www.freelists.org/archives/oracle-l/ FAQ is at //www.freelists.org/help/fom-serve/cache/1.html -----------------------------------------------------------------