Oracle11g用exp無法匯出空表的解決方法

梓沐發表於2015-12-23
解決辦法
解決該問題有2個辦法。
辦法1——設定deferred_segment_creation引數
SQL> show parameter deferred_segment_creation
NAME                           TYPE           VALUE
--------------------------     -----------   ----------
deferred_segment_creation      boolean       TRUE
SQL> alter system set deferred_segment_creation=false;
系統已更改。
SQL> show parameter deferred_segment_creation
NAME                            TYPE           VALUE
--------------------------     -----------   -----------
deferred_segment_creation      boolean       FALSE
注意:
1)該引數預設值是TRUE,改為FALSE後,無論空表或非空表,都分配segment
2)該辦法只能對修改引數後新增的表起作用,對之前已經匯入的表不產生作用,只能透過下面一種辦法解決問題。
辦法2——Insert一行,再rollback使其產生segment
該辦法就是在空表中插入資料再刪除,使其產生segment,備份資料庫時就能匯出空表。
但是這個辦法有個缺點,當資料庫中存在多個、且不確定數目的空表時,處理的工作量大,不能確保所有的空表都能處理完全。
因此結合這個解決辦法以及資料的實際情況,建議採用下面的操作。
1)首先,查詢當前使用者下的所有空表;
注意是當前使用者!就是說不同使用者/方案的空表需要在備份資料庫時一併匯出的話,需要逐個、分別執行這一操作。
查詢語句:
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;
查詢結果例如:
alter table JBNTBHPK_H_320502 allocate extent;
alter table JBNTBHTB_H_320502 allocate extent;
alter table JBNTBHPK_H_320202 allocate extent;
alter table JBNTBHTB_H_320202 allocate extent;
alter table JBNTBHPK_H_320402 allocate extent; 
3 最後,再用exp匯出資料庫,此時空表可以一併匯出。
 Author:NEAL 
DATE:2015-06-03 

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

相關文章