oracle 11g不能導出空表的解決方法(轉)

在oracle 11g r2中,發現傳統的exp居然不能導出空的表,然後查詢一下, 
發現需要如下的步驟去搞,筆記之。 
 
oracle 11g 新增了一個參數:deferred_segment_creation,含義是段延遲創建,默認是true。具體是什麼意思呢? 
 
如果這個參數設置爲true,你新建了一個表T1,並且沒有向其中插入數據,那麼這個表不會立即分配extent,也就是不佔數據空間,只有當你insert數據後才分配空間。這樣可以節省少量的空間。 
 
解決辦法 
 
1 設置deferred_segment_creation 參數爲FALSE後,無論是空表還是非空表,都分配segment。 
 
   在sqlplus中,執行如下命令: 
 
   SQL>alter system set deferred_segment_creation=false; 
 
   查看: 
   SQL>show parameter deferred_segment_creation; 
 
   該值設置後只對後面新增的表產生作用,對之前建立的空表不起作用。 
 
   注意並且要重新啓動數據庫,讓參數生效 
 
2  使用ALLOCATE EXTENT的說明 
 
   使用ALLOCATE EXTENT可以爲數據庫對象分配Extent。其語法如下: 
 
   ----------- 
   ALLOCATE EXTENT { SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer } 
   ----------- 
 
   可以針對數據表、索引、物化視圖等手工分配Extent。 
 
   ALLOCATE EXTENT使用樣例: 
 
    ALLOCATE EXTENT 
    ALLOCATE EXTENT(SIZE integer [K | M]) 
    ALLOCATE EXTENT(DATAFILE 'filename') 
    ALLOCATE EXTENT(INSTANCE integer)  www.2cto.com
    ALLOCATE EXTENT(SIZE integer [K | M]   DATAFILE 'filename') 
    ALLOCATE EXTENT(SIZE integer [K | M]   INSTANCE integer) 
   
    針對數據表操作的完整語法如下: 
 
   ----------- 
    ALTER TABLE [schema.]table_name ALLOCATE EXTENT [({ SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer})] 
   ----------- 
 
    故,需要構建如下樣子簡單的SQL命令: 
 
   ----------- 
   alter table aTabelName allocate extent 
   ----------- 
 
3.2 構建對空表分配空間的SQL命令, 
 
    查詢當前用戶下的所有空表(一個用戶最好對應一個默認表空間)。命令如下: 
 
   ----------- 
   SQL>select table_name from user_tables where NUM_ROWS=0; 
   ----------- 
 
   根據上述查詢,可以構建針對空表分配空間的命令語句,如下: 
 
   ----------- 
   SQL>Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 
   ----------- 
 
   批量輸出上述生成的SQL語句,建立C:\createsql.sql,其內容如下: 
 
   ----------- 
   set heading off; 
   set echo off; 
   set feedback off; 
   set termout on; 
   spool C:\allocate.sql; 
   Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0; 
   spool off;  www.2cto.com
   ----------- 
 
   執行C:\createsql.sql,命令如下: 
   ----------- 
   SQL>@ C:\createsql.sql; 
   ----------- 
 
   執行完畢後,得到C:\allocate.sql文件。 
 
   打開該文件會看到,已經得到對所有空表分配空間的命令SQL語句。 
 
3.4 執行SQL命令,對空表分配空間: 
 
   執行C:\allocate.sql,命令如下: 
   ----------- 
   SQL>@ C:\allocate.sql; 
   ----------- 
  
   執行完畢,表已更改。 
 
3.4 此時執行exp命令,即可把包括空表在內的所有表,正常導出。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章