解決oracle11g數據庫中空表exp沒法導出的問題

以前再作項目的時候下載了一個開源的程序,數據庫在移植的時候經過exp/imp導入導出,結果程序在啓動時報錯,對比事後發現兩個數據庫表相差了十幾個,再排查問題,發現少掉的十幾個表所有是空表,查了一下oracle11g的特性,發現當數據條數是0時不分配segment,因此就不能被導出!我勒個擦!坑爹有木有!數據庫

可是總不能每一個表插入一條數據再導出吧,做爲一個程序猿總不能上手工課吧,因而繼續查,找到了一個解決辦法,特此記錄,以儆效尤!oracle

第一種解決辦法:spa

在建立數據庫以前,先將數據庫segment屬性進行修改,SQL語句以下:orm

alter system set  deferred_segment_creation=false;對象

含義以下:deferred_segment_creation,含義是段延遲建立,默認是true。若是這個參數設置爲true,你新建了一個表T1,而且沒有向其中插入數據,那麼這個表不會當即分配extent,也就是不佔數據空間,只有當你insert數據後才分配空間。這樣能夠節省少許的空間。設置deferred_segment_creation 參數爲FALSE後,不管是空表仍是非空表,都分配segment。須要注意的是,該值設置後只對後面新增的表產生做用,對以前創建的空表不起做用,在修改後須要從新啓動數據庫參數才能生效it

第二種解決辦法:io

先查一下哪些表是空的,而後使用ALLOCATE EXTENT爲數據庫對象分配Extent,SQL以下:table

查詢空表:select table_name from user_tables where NUM_ROWS=0; select

生成修改語句:select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 ;下載

執行生成修改語句的SQL後會生成一堆的ALTER的SQL語句,將生成的語句執行後,再進行exp數據導出,就能夠導出全部數據了!

相關文章
相關標籤/搜索