Oracle 11g 使用exp命令 導出空表

一、Oracle11g默認對空表不分配segment,故使用exp導出Oracle11g數據庫時,空表不會導出。 linux

二、設置deferred_segment_creation 參數爲FALSE後,不管是空表仍是非空表,都分配segment。 sql

  在sqlplus中,執行以下命令: 數據庫

  SQL>alter system set deferred_segment_creation=false; 對象

  查看:
  SQL>show parameter deferred_segment_creation; 索引


  該值設置後只對後面新增的表產生做用,對以前創建的空表不起做用。 get


三、能夠使用手工爲空表分配Extent的方式,來解決導出以前創建的空表的問題。說明以下: io


3.1 使用ALLOCATE EXTENT的說明 table


  使用ALLOCATE EXTENT能夠爲數據庫對象分配Extent。其語法以下: file

  -----------
  ALLOCATE EXTENT { SIZE integer [K | M] | DATAFILE 'filename' | INSTANCE integer }
  ----------- select

  能夠針對數據表、索引、物化視圖等手工分配Extent。

  ALLOCATE EXTENT使用樣例:

    ALLOCATE EXTENT 
    ALLOCATE EXTENT(SIZE integer [K | M]) 
    ALLOCATE EXTENT(DATAFILE 'filename') 
    ALLOCATE EXTENT(INSTANCE integer) 
    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 or num_rows is null;
  -----------


  根據上述查詢,能夠構建針對空表分配空間的命令語句,以下:

  -----------
  SQL>Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 or num_rows is null
  -----------


  批量輸出上述生成的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 or num_rows is null;
  spool off;
  -----------


  執行C:\createsql.sql,命令以下:
  -----------
  SQL>@ C:\createsql.sql;
  -----------

  執行完畢後,獲得C:\allocate.sql文件。

  打開該文件會看到,已經獲得對全部空表分配空間的命令SQL語句。

3.4 執行SQL命令,對空表分配空間:

  執行C:\allocate.sql,命令以下:
  -----------
  SQL>@ C:\allocate.sql;
  -----------
  
  執行完畢,表已更改。

3.4 此時執行exp命令,便可把包括空表在內的全部表,正常導出。

相關文章
相關標籤/搜索