ORACLE EXP不能匯出空表的原因分析及解決方案_oracle

來源:互聯網
上載者:User

一、不能匯出空表的原因

1、Oracle11g預設對空表不分配segment,故使用exp匯出Oracle11g資料庫時,空表不會匯出。

2、設定deferred_segment_creation 參數為FALSE後,無論是空表還是非空表,都分配segment。

在sqlplus中,執行如下命令:

SQL>alter system set deferred_segment_creation=false;

查看:

SQL>show parameter deferred_segment_creation;

該值設定後只對後面新增的表產生作用,對之前建立的空表不起作用。

二、解決辦法

可以使用手工為空白表分配Extent的方式,來解決匯出之前建立的空表的問題

①select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 or num_rows is null

使用上面的語句 會拼接處給空表分配Extent的語句

但是,有很多空表 在視圖user_tables中的num_rows不等於0(原因:表中以前有資料,刪除後oracle沒有統計,視圖user_tables中的資料沒有更新),所以通過上面的方法並不能為所有的空表分配資料區段,解決方案如下

②select 'analyze table '||table_name||' compute statistics;' from user_tables

analyze table tablename compute statistics
等同於 analyze table tablename compute statistics for table for all indexes for all columns
for table的統計資訊存在於視圖:user_tables 、all_tables、dba_tables
for all indexes的統計資訊存在於視圖: user_indexes 、all_indexes、dba_indexes
 for all columns的統計資訊存在於試圖:user_tab_columns、all_tab_columns、dba_tab_columns

執行完後,視圖user_tables中的num_rows值會更新,此時再執行①,能夠給所有的空表分配資料區段

然而,在執行 analyze table tablename compute statistics 時,oracle會報  object statictis are locked (這些表的統計被鎖了),通過下面的方式解鎖

 ③select 'exec dbms_stats.unlock_table_stats('||'''JXDEMO'''||','''||table_name||''');' from user_tables

(③得到的結果需要在sqlplus上執行,在pl/sql developer 中的sql視窗執行報錯)

③執行後得到的結果執行完了之後再去執行②就沒有object statictis are locked錯誤提示了

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.