1. 程式人生 > >oracle exp 匯出表時會發現少表,空表導不出解決方案

oracle exp 匯出表時會發現少表,空表導不出解決方案

今天遇到一個群有,他說在oracle11g上利用exp匯出的時候,發現原本資料庫中有723張表,但是用exp匯出的時候卻只能匯出304張出來,其實這個原因是oralce11g 中增加了一個新特性 "deferred_segment_creation" 含義是段延遲建立,預設是true。

具體解釋:

 如果這個引數設定為true,你新建立了一個table,並且沒有向其中插入資料,那麼這個表不會立即分配extend,也就是不佔資料空間,即表不分配segment以節省空間,所以這些表也沒能匯出來。在系統表user_tables中也可以看到segment_treated的欄位裡是“NO”或者“YES”說明了某張表是否分配了segment。說白了是為了可以節省少量的空間。

下面給出解決辦法:

1.最笨的方法是給空表隨便新增一筆資料

2.對空表分配空間

select 'alter table ' ||table_name ||' allocate extent;' from user_tables where segment_created='NO';

  上述程式碼可產生批量的修改表extent的SQL語句(有多少張空表就產生多少條),我們只需要將其生成的所有sql程式碼全部執行,就可以給每一張已經存在的表來分配 segment,然後就可以利用exp 匯出了