通過exp進行數據導出的時候,如果表的數據為空,則會出現警告,並且表也不會導出,不利於數據恢復。
可以通過以下方法進行解決:
一、使用ALLOCATE EXTENT,可以導出之前已經存在的空表
--查詢當前用戶中所有記錄數為0的表 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 or num_rows is null --將查詢出來的數據進行執行,更改表信息 --例如:alert table t_1 allocate extendt; --說明: --ALLOCATE 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})]
二、修改數據庫參數(deferred_segment_creation)設置:
設置deferred_segment_creation 參數為FALSE來禁用"段推遲創建"(也就是直接創建segment),無論是空表還是非空表,都分配segment。
在sqlplus中,執行如下命令:
sqlplus / as sysdba SQL>alter system set deferred_segment_creation=false; #查看: SQL>show parameter deferred_segment_creation;
注意:該值設置后只對后面新增的表產生作用,對之前建立的空表(已經存在的)不起作用,仍不能導出。
並且要重新啟動數據庫,讓參數生效,為了使得后續新增的表也可以導出,建議使用第二種方法。
參考: