新特性的副產品--從11g的DEFERRED SEGMENT CREATION說起

       某日協助同事完成兩個測試數據庫的結構同步。將早就爛熟於心的exp和imp命令編寫成shell自動運行,交活了事。沒有想到,同事說同步的表相差巨大。不會吧,檢查了生成的日誌信息:

 

  1. . exporting dimensions 
  2. . exporting post-schema procedural objects and actions 
  3. . exporting statistics 
  4. Export terminated successfully without warnings. 

        正常的一談糊塗。但是檢查導出表的數據確實差了不少。應該是49張表,但是導出的只有34張。

        反覆檢查USER_TABLES的信息,首先發現的就是確實沒有導出的表在某些屬性字段上比較怪異。

        

  1. SQL> select INITIAL_EXTENT,NEXT_EXTENT from user_tables where table_name='TBL_NC_AREA_I'
  2.  
  3. INITIAL_EXTENT NEXT_EXTENT 
  4. -------------- ----------- 

         奇怪。爲空。

         沒有辦法,估計需要修改表的一些狀態纔可能改變。

  1. SQL> alter table TBL_NC_AREA_I move
  2.  
  3. Table altered. 
  4.  
  5. SQL> select INITIAL_EXTENT,NEXT_EXTENT from user_tables where table_name='TBL_NC_AREA_I'
  6.  
  7. INITIAL_EXTENT NEXT_EXTENT 
  8. -------------- ----------- 
  9.      65536     1048576 
  10.  
  11. SQL>  

         不錯,現在看起來比較正常了,exp也正常導出。

          真是爲什麼呢?存儲參數的信息沒有出現,而後在user_tables中發現了字段SEGMENT_CREATED。估計就是這個“問題”。找找看,發現凡是不能正常導出的表這個屬性字段都是顯示:       

  1. select INITIAL_EXTENT,NEXT_EXTENT,SEGMENT_CREATED 
  2. from user_tables where table_name='TBL_NC_BALANCEBANK_I'
  3.  
  4. -------------- ----------- --- 
  5.                NO 

         查。發現原來這個11gR2的一個特性:DEFERRED SEGMENT CREATION,即建立表的時候,一開始並沒有直接分配存儲空間。直接在字典中記錄了數據結構。而只有當真正有數據的時候才分配空間。這種方法對於象SAP這樣大的系統需要部署成千上萬張表是非常有效的。

         檢查測試數據庫:

  1. SQL> show parameters deferred_segment_creation 
  2.  
  3. NAME                     TYPE    VALUE 
  4. ------------------------------------ ----------- ------------------------------ 
  5. deferred_segment_creation        boolean     TRUE 

          這個功能是開啓的。當然可以通過修改參數來進行修改:

  1. alter system set deferred_segment_creation=true
  2. session級別的方法相似。 
  3. 如果在表一級: 
  4. CREATE TABLE .... SEGMENT CREATION IMMEDIATE; 
  5. 需要延後分配: 
  6. CREATE TABLE ... SEGMENT CREATION DEFERRED 

        當然還有我的“土製”辦法,move一下表。

         現在EXP是沒有問題。但是奇怪,爲什麼EXP只能檢索出已經分配存儲空間的表,難道讀的字典不是相同的基表?不能不說,這個特性對於EXP而言,起碼是有瑕疵的,並且在一些UPGRDE等操作也是有風險的。

        同時注意,這樣的表在SYS, SYSTEM, PUBLIC, OUTLN, or XDB 模式(schema)下,是無法建立的。

        時時都是有收穫的,只要留心些。 -:)

         --EOF

                          

          

          

        

               

               

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章