1.為什么會出現該問題
racle 11g中有個新特性,當表無資料時,不分配segment,以節省空間,當我們用exp匯出空表時,無法匯出。解決方法是兩個方面,一是處理現有的空表,讓其能匯出;二是設定引數,讓后續的新的空表也可以匯出。
2.解決方法
1.)在建用戶時處理該問題!
設定系統引數,讓后續新表自動分配segment,查詢系統引數,該引數值默認是TRUE,當改為FALSE時,無論是空表還是非空表,都分配segment.
查詢陳述句:show parameter deferred_segment_creation;
將這個引數修改為FALSE,修改陳述句為:
alter system set deferred_segment_creation=false;
再次查詢確認引數是否修改成功:
show parameter deferred_segment_creation;
再執行匯出問題已解決!
2.之前未修改空表引數,后續使用中發現個別空表無法匯出。
登錄當前需匯出的用戶,執行以下陳述句
alter table 空表表明 allocate extend;
再匯出改表即可!
uj5u.com熱心網友回復:
2.解決方法1.)在建用戶時處理該問題!
不是建用戶時處理, 其他的不錯,建議記錄在博客中。
uj5u.com熱心網友回復:
謝謝幫忙糾正,新手請多多關注uj5u.com熱心網友回復:
這個要算是oracle的bug吧uj5u.com熱心網友回復:
算是了吧,建庫時候設定一下也無所謂了uj5u.com熱心網友回復:
這個不是 bug ,是一個新特性。 也就是說特意做成這樣了。
目的是為了更快的回應 create table 命令。
uj5u.com熱心網友回復:
當然是bug。我并不是說這個新特性有問題,為了更快影響create table在建表時不分配空間是合理的,不過這個新特性需要考慮對其它功能的影響,現在它影響到了備份,這其實是個很嚴重的bug。莫非oracle特意讓備份出問題?uj5u.com熱心網友回復:
這個怎么能說是BUG…… oracle明確這個特性帶來的影響,并給出了解決方法,而且10g以后oracle就推薦用資料泵了,當然非要說BUG也行,但在這個時代,Oracle有時間去修改這種代碼,還不如多多解決rman備份時候的BUG,畢竟這個才算是真正的備份,邏輯備份工具只是輔助而已。uj5u.com熱心網友回復:
完全正確 應該使用 expdp
uj5u.com熱心網友回復:
執行一下這個SQL:Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 or num_rows is null;
把查詢出來的結果貼出來執行一下就可以了
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/57046.html
標籤:開發
下一篇:IMP匯入庫遇到的字符集
