關於Oracle11gR2用EXP導出時報EXP-00011錯誤的解決方法

在給客戶培訓的過程中,發現客戶數據庫服務器存在一個奇怪的現象。客戶數據庫服務器環境爲AIX6+Oracle11gR2,具體現象如下:

執行EXP導出時,部分表提示 EXP-00011:表不存在錯誤,但是查詢user_all_tables視圖,此表確實是存在的,並且執行select語句也能成功,不過表爲空表,查看權限等也沒有問題。後來通過查詢資料,發現問題是由Deferred Segment Creation參數引起的。

Deferred Segment Creation,延遲段創建,Oracle11gR2新增參數, 具體用處是當新創建一個可能會有Segment的對象時,如果這個對象中還沒有任何記錄需要消耗一個Extent,那麼將不會在創建對象時自動創建Segment,這樣做的好處是在創建對象時大大提高了速度。但是這麼一來,因爲對象沒有Segment,執行EXP導出時,就會報EXP-00011錯誤。

以報錯的表cf_template爲例,執行以下查詢:

SQL> show parameter DEFERRED_SEGMENT_CREATION

NAME TYPE VALUE

------------------------------------ -------------------- --------------------

deferred_segment_creation boolean TRUE

發現Deferred Segment Creation已經打開,再執行:

SQL> select segment_name from user_segments where segment_name='CF_TEMPLATE';

no rows selected

沒有返回值,數據庫確實沒有給CF_TEMPLATE表創建Segment,這就驗證了爲什麼報錯的都是空表。

解決方法如下:

1. 設置deferred_segment_creation的值爲false

此方法只對以後的表有效,之前的表沒有Segment的還是沒有。

2. 創建表的時候聲明立即創建Segment

create table XXX (XXX XXX) SEGMENT CREATION IMMEDIATE;

3.對於已經創建但是還沒有Segment的表來說,可以執行alter table XXX allocate extent來使其創建出 Segment,當然也可以插入一條數據,使其創建Segment

http://www.360doc.com/content/14/0110/11/12809984_344064608.shtml
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章