Oracle 11 G EXPでエクスポートする場合、空のテーブルでは問題解決をエクスポートできません

2363 ワード

11 Gには、テーブルにデータがない場合にsegmentを割り当てず、スペースを節約する新しい特性があります.1、insertの行、rollbackでsegmentが生成されます.この方法は,空のテーブルにデータを挿入し,削除するとsegmentを生成する.エクスポート時に空のテーブルをエクスポートできます.2、deferred_の設定segment_牙列缺损
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


このパラメータ値はデフォルトでTRUEであり、FALSEに変更すると、空テーブルでも非空テーブルでもsegmentが割り当てられる.
なお、この値を設定すると、以前にインポートした空のテーブルには機能せず、エクスポートできず、後で追加したテーブルにのみ機能します.以前の空のテーブルをエクスポートするには、最初の方法しか使用できません.長い間やっていたが,最後にこの方法を調べた.まず、現在のユーザーの下にあるすべての空のテーブルをクエリーします.
select table_name from user_tables where NUM_ROWS=0;

空のテーブルを次の文で検索します.
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0

クエリ結果をエクスポートし、エクスポートした文を実行
'ALTERTABLE'||TABLE_NAME||'ALLOCATEEXTENT;'
-----------------------------------------------------------
alter table AQ$_AQ$_MEM_MC_H allocate extent;
alter table AQ$_AQ$_MEM_MC_G allocate extent;
alter table AQ$_AQ$_MEM_MC_I allocate extent;
alter table AQ$_AQ_PROP_TABLE_T allocate extent;
alter table AQ$_AQ_PROP_TABLE_H allocate extent;
alter table AQ$_AQ_PROP_TABLE_G allocate extent;
alter table AQ$_AQ_PROP_TABLE_I allocate extent;
alter table AQ$_KUPC$DATAPUMP_QUETAB_T allocate extent;
alter table AQ$_KUPC$DATAPUMP_QUETAB_H allocate extent;
alter table AQ$_KUPC$DATAPUMP_QUETAB_G allocate extent;
alter table AQ$_KUPC$DATAPUMP_QUETAB_I allocate extent;
'ALTERTABLE'||TABLE_NAME||'ALLOCATEEXTENT;'
-----------------------------------------------------------
alter table AQ$_SYS$SERVICE_METRICS_TAB_T allocate extent;
alter table AQ$_SYS$SERVICE_METRICS_TAB_H allocate extent;
alter table AQ$_SYS$SERVICE_METRICS_TAB_G allocate extent;
alter table AQ$_SYS$SERVICE_METRICS_TAB_I allocate extent;

そして実行
exp    /  @     file=/home/oracle/exp.dmp log=/home/oracle/exp_smsrun.log

成功!