11g的exp導出空表提示EXP-00011: SCOTT.TEST1 不存在


剛lg問我11g無法導出空表,實驗了下,果真如此。

原因:11g默認創建一個表時不分配segment,只有在插入數據時才會產生(當然也可以強制分配),以節省磁盤空間。

對於已經存在的空表解決辦法:

就是想辦法讓空表有segment,第一種:可以通過插入數據的方式(不想要這些數據可以回滾),只要有insert動作就會分配segment;

                                        第二種:就是強制分配:alter table tablename allocate extent;

為了后面創建的表能直接分配segment:修改參數deferred_segment_creation(11g新增的)。該參數即指是否延遲創建segment,默認為true。如果想讓表創建時就分配segment,那么久應該修改該參數為false即alter system set deferred_segment_creation=false;

實驗:

deferred_segment_creation參數未做修改,默認的為true。

第一步:創建一個表test1,執行導出,結果提示該表不存在,如下截圖所示

 

 

 

 

 

 

 

第二步:修改參數deferred_segment_creation為false后再導出,仍然出錯(同上截圖)

 

 

 

 

 

 

第三步:強制分配segment再導出 成功

SQL> alter table TEST1 allocate extent;
 
Table altered

 

第四步:在創建一個空表test2(注意此時deferred_segment_creation為false),執行導出 成功

附11g默認創建的表其sql如下:

create table TEST1
(
  id   NUMBER,
  name VARCHAR2(255)
)
tablespace USERS
  pctfree 10
  initrans 1
  maxtrans 255;

而如果該表插入了數據或執行強制分配segment或創建該空表時已經將deferred_segment_creation參數設為false,則其創建后查看其sql為如下:

create table TEST2
(
  id   NUMBER,
  name VARCHAR2(255)
)
tablespace USERS
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );


免責聲明!

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



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