Oracle數據庫導出表出現缺表,少表問題


oracle11g有個新特性,增加了一個新特性 "deferred_segment_creation" 含義是段延遲創建,默認是true。

       具體是什么意思呢?我們來解釋下:

       如果這個參數設置為true,你新創建了一個Table,並且沒有向其中插入數據,那么這個表不會立即分配extend,也就是不占數據空間,即表不分配segment以節省空間,所以這些表也沒能導出來。在系統表user_tables中也可以看到segment_treated的字段里是“NO”或者“YES”說明了某張表是否分配了segment。說白了是為了可以節省少量的空間。

解決辦法:

1.查詢當前用戶下的所有空表,一個用戶最好對應一個默認的表空間,命令如下:

  >SQL:  select table_name from user_tables where num_rows='0'

2.根據上述查詢的語句,可以構建針對空表分配空間的命令語句,具體如下;

       >SQL:select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 or num_rows is null(注意:很多教程沒有這里,這里是有可能位空的)

這段代碼可產生批量的修改表extent的SQL語句(有多少張空表就產生多少條),我們只需要將其生成的所有sql代碼全部執行,就可以給每一張已經存在的表來分配segment,就OK了。

          再用exp命令進行導出即可。(例如:exp cass1/cass1@10.10.49.28:1521/DW file=D:\CASS1.dmp )     末尾如果加上full=y,表示導出服務器上面的全部數據表,即所有表空間下面的表,也包括系統表。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM