用exp無法導出空表解決方法/用exp導出數據時表丟失原因


                 用exp無法導出空表解決方法/用exp導出數據時表丟失原因

最早的一次使用oracle 11g導出數據發現有的表丟失了,感覺莫名其妙的,后來終於找到原因了。 找到問題以后,再看看解決方案。
11GR2中有個新特性,當表無數據時,不分配segment,以節省空間,可是在用EXPORT導出時,空表也不能導出,這就導致遷移時候丟失了一些表,存儲過程也失效了。本以為EXP能有相應的控制開關,可以切換是否導出空表,看了下幫助,沒有太大的改變。有些奇怪,難道11GR2不更新EXP的功能了,還看有的帖子說11GR1作為客戶端去卸載11GR2的,都會出現ora-1455d的錯誤,得換成11GR2的exp才沒事了,心中感慨阿,怎么版本間的兼容這么脆弱了!

  解決方法:

一、 insert一行,再rollback就產生segment了。

  該方法是在在空表中插入數據,再刪除,則產生segment。導出時則可導出空表。

二、 設置deferred_segment_creation參數

該參數值默認是TRUE,當改為FALSE時,無論是空表還是非空表,都分配segment。修改SQL語句:

alter system set deferred_segment_creation=false scope=both;

  需注意的是:該值設置后對以前導入的空表不產生作用,仍不能導出,只能對后面新增的表產生作用。如需導出之前的空表,只能用第一種方法。

三、 用以下這句查找空表並分配空間

  select 'alter table '||table_name||' allocate extent;' from user_tables where SEGMENT_CREATED='NO';

  把SQL查詢的結果導出,然后執行導出的語句,強行為表分配空間修改segment值,然后再導出即可導出空表了。

  以下是我寫的腳本,將未分配空間的表的sql直接輸出到result.txt 文件 (直接執行result.txt中的sql即可為未分配空間的表分配空間)

  http://files.cnblogs.com/Mr_JinRui/exp%E5%AF%BC%E5%87%BA%E6%97%B6%E7%A9%BA%E6%95%B0%E6%8D%AE%E8%A1%A8%E4%B8%A2%E5%A4%B1.rar


免責聲明!

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



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