oracle11g用exp命令導出數據庫表時,有時會發現只導出了一部分表時並且不會報錯,緣由是有空表沒有進行導出,以前一直沒有找到方法因而用最笨的方法從新建這些空表,固然在咱們實際當中表的數量大時咱們該怎麼辦??? oracle10g版本中沒有這樣的問題。sql
因而查資料發現oracle11g有個新特性,增長了一個新特性 "deferred_segment_creation" 含義是段延遲建立,默認是true。數據庫
具體是什麼意思呢?咱們來解釋下:oracle
若是這個參數設置爲true,你新建立了一個Table,而且沒有向其中插入數據,那麼這個表不會當即分配extend,也就是不佔數據空間,即表不分配segment以節省空間,因此這些表也沒能導出來。在系統表user_tables中也能夠看到segment_treated的字段裏是「NO」或者「YES」說明了某張表是否分配了segment。說白了是爲了能夠節省少許的空間。blog
我所使用的解決方法:教程
>>> 建對空表分配空間的SQL命令。io
1.查詢當前用戶下的全部空表,一個用戶最好對應一個默認的表空間,命令以下:table
>SQL: select table_name from user_tables where num_rows='0'select
2.根據上述查詢的語句,能夠構建針對空表分配空間的命令語句,具體以下;方法
>SQL:select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 or num_rows is null(注意:不少教程沒有這裏,這裏是有可能位空的)im
上述代碼可產生批量的修改表extent的SQL語句(有多少張空表就產生多少條),咱們只須要將其生成的全部sql代碼所有執行,就能夠給每一張已經存在的表來分配segment,就OK了。
再用exp命令進行導出便可。