oracle 11 g R 2でexpが空のテーブルをエクスポートできない解決方法

2808 ワード

oracle 11 g R 2でexpが空のテーブルをエクスポートできない解決方法
oracle 11 g Realease 2(11.2.0.1)では、空のテーブルをエクスポートする際にエラーが表示されます.理由を調べてみると、このバージョンでは最適化が行われており、テーブルを構築する際にストレージスペースは割り当てられず、最初のinsertデータの場合にのみストレージスペースが割り当てられます.これにより、システムに空のテーブルがたくさんある場合、ストレージスペースを大幅に節約できます.しかし、システムがわずかな空間しかない場合は、必要ありません.この最適化はまたクォータエラー(Quota Errors)を引き起こすので、参考にしてください.http://www.dba-oracle.com/t_oracle_deferred_segment_creation.htm.この問題は11.2.0.2で修復された.
このためoracleはdeferred_を提供します.segment_creationパラメータを使用して構成します.このパラメータのデフォルト値はtrueです.したがって、テーブルを作成するときにこのパラメータをfalseとして指定しないと、作成後、データが追加されず、expエクスポートを使用するときにエラーが発生します.公式文書の説明を見てみましょう.
Property
Description
Parameter type
Boolean
Default value
true
Modifiable
ALTER SESSION, ALTER SYSTEM
Range of values
true | false
Basic
No
  DEFERRED_SEGMENT_CREATION  specifies the semantics of deferredsegment creation. If set to  true , then segments for non-partitioned tables and their dependent objects (LOBs, indexes) will not be created untilthe first row is inserted into the table.
Before creating a set of tables, if it is known that asignificant number of them will not be populated, then consider setting thisparameter to  true . This saves disk space and minimizes install time.
セグメント遅延の作成を指定します.trueに設定すると、パーティション化されていないテーブルと依存するオブジェクト(LOB、インデックス)は、テーブルに最初のデータが挿入されるまでストレージ領域を割り当てません.
テーブルを作成する前に、データが書き込まれないことを知っていれば、このパラメータをtrueに設定することも考えられます.これにより、ストレージ容量を節約し、テーブルの作成時間を短縮できます.
はい、原因が分かったら、やりやすいです.解決策を見てみましょう.
1、最も愚かなXの方法は表に1本のデータを書いて、それから削除してあるいはrollbackを落として、更にエクスポートして大丈夫です.しかし、これは問題があります.もしたくさんの時計があれば、それは時間がかかります.では、2つ目の方法を使います.
2、deferred_を修正するsegment_creationパラメータ.
このパラメータの値を表示するには、次の手順に従います.
SQL> show parameter deferred_segment_creation;
NAME                                TYPE        VALUE
------------------------------------ -----------------------------------------
deferred_segment_creation           boolean     TRUE

このパラメータを設定します.
alter system set deferred_segment_creation = false;

このパラメータを設定する構文は次のとおりです.
set deferred_segment_creation = [TRUE | FALSE]

テーブルを作成するときに指定することもできます.構文は次のとおりです.
segment creation { IMMEDIATE | DEFERRED }

このように設定してから、後でテーブルを作成すると、segmentが割り当てられます.ただし、以前に作成したテーブルはまだ割り当てられていません.前のテーブルにスペースを強制的に割り当てる必要があります.
alter table <tablename> allocate extent

テーブルが多数存在する可能性があるため、次の方法で一括変更できます.
select'alter table' ||table_name || ' allocate extent;'
  from user_tables
 where num_rows =0;

次にクエリー結果をエクスポートし、このエクスポートを実行するsql文をエクスポートします.OKです.