表的storage (MINEXTENTS 屬性對truncate後表大小的影響

還不算暈發表於2016-02-23
TRUNCATE表後對錶大小進行查詢,表的空間沒有釋放完畢?
對此進行實驗測試,結果如下:(測試環境LINUX+ORACLE11.2.0.3)
建立表時語句指定了storage (MINEXTENTS 5);時,TRUNCATE後還有5個EXTENT;
建立表時語句不指定storage (MINEXTENTS引數,即使用預設值時;TRUNCATE後只有1個EXTENT;
------------實驗1:指定了storage (MINEXTENTS 5)
SQL> create tablespace test2 datafile '/u01/oracle/base/oracle/oradata/bys7/test2.dbf' size 10m uniform size 40k;
Tablespace created.

SQL> show user
USER is "TEST"
SQL> create table test1(aa number,name varchar2(128)) tablespace test2 storage (MINEXTENTS 5);
Table created.
SQL> select owner,SEGMENT_NAME,TABLESPACE_NAME,EXTENT_ID from dba_extents where SEGMENT_NAME='TEST1';
OWNER                          SEGMENT_NAME TABLESPACE_NAME  EXTENT_ID
------------------------------ ------------ --------------- ----------
TEST                           TEST1        TEST2                    0
TEST                           TEST1        TEST2                    1
TEST                           TEST1        TEST2                    2
TEST                           TEST1        TEST2                    3
TEST                           TEST1        TEST2                    4

SQL> insert into test1 select object_id,object_name from dba_objects;
13723 rows created.
SQL> commit;
Commit complete.
SQL> select owner,SEGMENT_NAME,TABLESPACE_NAME,EXTENT_ID from dba_extents where SEGMENT_NAME='TEST1';
OWNER                          SEGMENT_NAME TABLESPACE_NAME  EXTENT_ID
------------------------------ ------------ --------------- ----------
TEST                           TEST1        TEST2                    0
TEST                           TEST1        TEST2                    1
TEST                           TEST1        TEST2                    2
TEST                           TEST1        TEST2                    3
TEST                           TEST1        TEST2                    4
TEST                           TEST1        TEST2                    5
TEST                           TEST1        TEST2                    6
TEST                           TEST1        TEST2                    7
TEST                           TEST1        TEST2                    8
TEST                           TEST1        TEST2                    9
TEST                           TEST1        TEST2                   10
TEST                           TEST1        TEST2                   11
12 rows selected.

SQL>truncate table test1;
Table truncated.

SQL> select owner,SEGMENT_NAME,TABLESPACE_NAME,EXTENT_ID from dba_extents where SEGMENT_NAME='TEST1';

OWNER                          SEGMENT_NAME TABLESPACE_NAME  EXTENT_ID
------------------------------ ------------ --------------- ----------
TEST                           TEST1        TEST2                    0
TEST                           TEST1        TEST2                    1
TEST                           TEST1        TEST2                    2
TEST                           TEST1        TEST2                    3
TEST                           TEST1        TEST2                    4

SQL> select SEGMENT_NAME,TABLESPACE_NAME,BYTES/1024 kb,EXTENTS,BLOCKS,INITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,MAX_EXTENTS from dba_segments where SEGMENT_NAME='TEST1';
SEGMENT_NAME TABLESPACE_NAME         KB    EXTENTS     BLOCKS INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS
------------ --------------- ---------- ---------- ---------- -------------- ----------- ----------- -----------
TEST1        TEST2                  200          5         25         204800       40960           1  2147483645

實驗2:建立表時不指定storage (MINEXTENTS引數 使用預設值
SQL> create table test2 tablespace test2 as select object_id,object_name from dba_objects;
Table created.

SQL> set pagesize 1000
SQL> select owner,SEGMENT_NAME,TABLESPACE_NAME,EXTENT_ID from dba_extents where SEGMENT_NAME='TEST2';
OWNER                          SEGMENT_NAME TABLESPACE_NAME  EXTENT_ID
------------------------------ ------------ --------------- ----------
TEST                           TEST2        TEST2                    0
TEST                           TEST2        TEST2                    1
TEST                           TEST2        TEST2                    2
TEST                           TEST2        TEST2                    3
TEST                           TEST2        TEST2                    4
TEST                           TEST2        TEST2                    5
TEST                           TEST2        TEST2                    6
TEST                           TEST2        TEST2                    7
TEST                           TEST2        TEST2                    8
TEST                           TEST2        TEST2                    9
TEST                           TEST2        TEST2                   10
TEST                           TEST2        TEST2                   11
12 rows selected.

SQL> truncate table test2;
Table truncated.

SQL> select owner,SEGMENT_NAME,TABLESPACE_NAME,EXTENT_ID from dba_extents where SEGMENT_NAME='TEST2';
OWNER                          SEGMENT_NAME TABLESPACE_NAME  EXTENT_ID
------------------------------ ------------ --------------- ----------
TEST                           TEST2        TEST2                    0

相關文章