標籤:
在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命令,即可把包括空表在內的所有表,正常匯出。 轉自http://www.2cto.com/database/201203/125469.html
oracle 11g不能匯出空表的解決方案