Oacle 11g中有個新特性,當表無數據時,不分配segment,以節省空間,當我們用exp導出空表時,無法導出。
解決方法是兩個方面,一是處理現有的空表,讓其能導出;二是設置參數,讓后續的新的空表也可以導出
-----------------------------------處理一 -----------------------------------------------------------------------------------
查詢所有空表並分配segment,使用以下語句查詢生成修改空表設置的SQL:
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;
將輸出的SQL復制到SQL執行窗口,並執行。
-----------------------------------處理二 -----------------------------------------------------------------------------------
設置系統參數,讓后續新表自動分配segment,查詢系統參數,該參數值默認是TRUE,當改為FALSE時,無論是空表還是非空表,都分配segment.
查詢語句:show parameter deferred_segment_creation;
將這個參數修改為FALSE,修改語句為:
alter system set deferred_segment_creation=false;
再次查詢確認參數是否修改成功:
show parameter deferred_segment_creation;
可見已經修改為FALSE了,如圖:
這樣再使用exp導出,就可以正常導出空表了,如圖所示,顯示為0行的表也能導出了。