解決:ORACLE 11G使用exp無法導空出表問題

wmsok發表於2014-03-24
11g中有個新特性,當表無資料時,不分配segment以節省空間。為了使空表也能匯出需要如下處理:
 
  方法一:select 'alter table '||table_name||' allocate extent;' from user_tables where segment_created='YES';生成的SQL語句執行一下即完成所有空表段空間的分配
  方法二:建庫時關閉延遲段空間分配的功能:alter system set deferred_segment_creation=false;


如果資料庫已經建立好,那麼就只能使用第一種方法了,但上面的方法一很麻煩,以下是我的方法:

①收集統計資訊
    exec dbms_stats.gather_schema_stats(ownname => 'emp') ;     統計表資訊,這樣all_tables裡面的資訊才準確,如num_rows

②批處理:自動為表分配段空間
DECLARE
BEGIN
   FOR I IN (select 'alter table '||OWNER||'.' || table_name || ' allocate extent' as aaa from all_tables where segment_created = 'NO' and OWNER IN  ('EMP') order by aaa asc) LOOP
      execute immediate I.aaa;
   end loop;
end;
        

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25960404/viewspace-1128766/,如需轉載,請註明出處,否則將追究法律責任。

相關文章