oracle空表匯出的問題

來源:互聯網
上載者:User

標籤:

之前再做項目的時候下載了一個開源的程式,資料庫在移植的時候通過exp/imp匯入匯出,結果程式在啟動時報錯,對比過後發現兩個資料庫表相差了十幾個,再排查問題,發現少掉的十幾個表全部是空表,查了一下oracle11g的特性,發現當資料條數是0時不分配segment,所以就不能被匯出!我勒個擦!坑爹有木有!

但是總不能每個表插入一條資料再匯出吧,作為一個程式猿總不能上手工課吧,於是繼續查,找到了一個解決辦法,特此記錄,以儆效尤!

第一種解決辦法:

在建立資料庫之前,先將資料庫segment屬性進行修改,SQL語句如下:

alter system set  deferred_segment_creation=false;

含義如下:deferred_segment_creation,含義是段延遲建立,預設是true。如果這個參數設定為true,你建立了一個表T1,並且沒有向其中插入資料,那麼這個表不會立即分配extent,也就是不佔資料空間,只有當你insert資料後才分配空間。這樣可以節省少量的空間。設定deferred_segment_creation 參數為FALSE後,無論是空表還是非空表,都分配segment。需要注意的是,該值設定後只對後面新增的表產生作用,對之前建立的空表不起作用,在修改後需要重新啟動資料庫參數才會生效

第二種解決辦法:

先查一下哪些表是空的,然後使用ALLOCATE EXTENT為資料庫物件分配Extent,SQL如下:

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

產生修改語句:select ‘alter table ‘||table_name||‘ allocate extent;‘ from user_tables where num_rows=0 ;

執行產生修改語句的SQL後會產生一堆的ALTER的SQL語句,將產生的語句執行後,再進行exp資料匯出,就可以匯出所有資料了!

oracle空表匯出的問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.