天天看點

EXP無法導出空表的表結構解決辦法 一、 insert一行,再rollback就産生segment了。 二、 設定deferred_segment_creation參數 三、 用以下這句查找空表并配置設定空間

最早的一次使用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值,然後再導出即可導出空表了。

繼續閱讀