【11gR2新特性】extent延遲建立

楊奇龍發表於2011-07-07

在使用create table中的storage引數時,在11g和10g中表現的不一樣,步驟如下:
database 10g:
SQL> create table tab10 (id char(1000),name char(1000)) storage (minextents 2) pctfree 50 pctused 20;
Table created.
SQL> select object_id,object_name from dba_objects where object_name='TAB10';
OBJECT_ID OBJECT_NAME
---------- ------------------------------
52957         TAB10

SQL> select extent_id,file_id,relative_fno,block_id,blocks from dba_extents where segment_name='TAB10';
EXTENT_ID FILE_ID RELATIVE_FNO BLOCK_ID BLOCKS
-------------------- --------- -------- ----------
0          8           8       521         128
1          8           8       649          128
database 11g:
SQL> create table tab11 (id char(1000),name char(1000)) storage(minextents 2) pctfree 50 pctused 20;
Table created.
SQL> select object_id,object_name from dba_objects where object_name='TAB11';
OBJECT_ID OBJECT_NAME
---------- ------------------------------
75815 TAB11
SQL> select extent_id,file_id, relative_fno, block_id, blocks from dba_extents where segment_name='TAB11';
no rows selected
向表中插入資料:
SQL> insert into tab11 values ('1','a');
1 row created.
SQL> commit;
Commit complete.
SQL> select extent_id,file_id, relative_fno, block_id, blocks from dba_extents where segment_name='TAB11';
EXTENT_ID  FILE_ID   RELATIVE_FNO  BLOCK_ID   BLOCKS
---------- ---------- ------------ ---------- ----------
0             10          10        384        128
1             10          10        512        128
在11g中,即使指定了storage引數,如果沒有資料插入也不會給它分配extent!此特性和引數:deferred_segment_creation有關。此引數預設是開啟的。這種情況下,當使用者使用exp匯出時,是不會匯出這些未分配段的空表的,並且沒有任何警告提示。所以建議關閉次引數。

SQL> show parameter segment
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
deferred_segment_creation boolean TRUE
rollback_segments string
transactions_per_rollback_segment integer 5
SQL> alter system set deferred_segment_creation=FALSE scope=both;
System altered.
SQL> drop table tab11 purge;
Table dropped.
SQL> create table tab11 (id number) storage(minextents 2) pctfree 50 pctused 20;
Table created.
SQL> select extent_id,file_id, relative_fno, block_id, blocks from dba_extents where segment_name='TAB11';
EXTENT_ID  FILE_ID  RELATIVE_FNO BLOCK_ID BLOCKS
---------- -------- ------------ -------- ----------
0          10         10           384     128
1          10         10           512     128

希望使用11gr2的同學注意!!
----------------------------------EOF-----------------------------------------

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-701621/,如需轉載,請註明出處,否則將追究法律責任。

相關文章