oracle 11g 用exp命令匯出庫檔案備份時,發現只能匯出來一部分表而且不提示錯誤,之前找不到解決方案只能把沒匯出來的表重新建建立。後來發現是所有的空表都沒有匯出來。於是想好好查查,因為在以前的10g版本中沒有這樣的問題。
查資料發現oracle 11g中有個新特性:新增了乙個引數「deferred_segment_creation」含義是段延遲建立,預設是true。
具體是什麼意思呢?
如果這個引數設定為true,你新建了乙個表table1,並且沒有向其中插入資料,那麼這個表不會立即分配extent,也就是不佔資料空間,即表也不分配 segment 以節省空間,所以這些表也沒能匯出來。在系統表user_tables中也可以看到segment_treated的字段裡是「no」或者「yes」說明了某張表是否分配了segment。說白了是為了可以節省少量的空間。
用下面的sql語句查詢,可以發現沒有匯出的表其 segment_created 字段值都是 'no'。
select segment_created,table_name from user_tables where segment_created = 'no';
解決方法:需要為每張空表新增如下語句
alter table tablename allocate extent
1,查詢當前使用者下的所有空表(乙個使用者最好對應乙個預設表空間)。命令如下:
sql>select table_name from user_tables where num_rows=0;
2,根據上述查詢,可以構建針對空表分配空間的命令語句,如下:
select 'alter table '||table_name||' allocate extent;' from user_tables where
num_rows=0 or num_rows is null or segment_created = 'no'
3,執行2中所有語句
解決oracle11g 空表不能exp匯出的問題
在使用exp備份資料庫,然後使用imp匯入的時候出現了好多表或者檢視不存在的錯誤資訊。究其原因,是11g中增加了乙個新的特性 資料條數是0時不分配segment,所以就不能被匯出。解決思路 就是向空表中增加一行資料。但是如果有很多空表,一行一行的匯入就好出現問題。下面是終極解決方案 在命令列執行 s...
oracle 11g不能匯出空表的多種解決方法
查資料發現oracle 11g中有個新特性 新增了乙個引數 deferred segment creation 含義是段延遲建立,預設是true。具體是什麼意思呢?如果這個引數設定為true,你新建了乙個表table1,並且沒有向其中插入資料,那麼這個表不會立即分配extent,也就是不佔資料空間,...
oracle11g空表不能匯出解決法案
oracle11g,在用exp命令備份資料庫時,如果表中沒有資料報exp 00011錯誤,對應的表不存在。這導致對應的空表無法備份。原因 11g預設建立乙個表時不分配segment,只有在插入資料時才會產生 當然也可以強制分配 以節省磁碟空間。對於已經存在的空表解決辦法 就是想辦法讓空表有segme...