2011-12-08 15 views
0

Oracleのimpユーティリティを使用してOracle 10gの空の表のセットにデータをインポートしています。インポートを実行しようとすると、参照整合性制約のために失敗します。例えば。表Bの外部キーがまだ存在しないため、表Aにデータをインポートできません。ここで 制約のためにOracleのimp表が失敗する

は、私のインポートコマンドです:

imp C_PLUS/<password> rows=y file=db.dmp ignore=y FROMUSER=C_PLUS 
TOUSER=C_PLUS tables=... 

私は手動でインポート時に各テーブルを介して行くことができると、それは最初に不足しているテーブルをインポート失敗したときに、私は、インポートする必要が400以上のテーブルを持っており、それをはるかにかかるだろう長すぎる。

この問題を回避する方法はありますか?あなたはC_PLUSが所有するすべてのテーブルをしたいので、あなたがTABLES句を省略することができます

おかげ

+0

輸出のどのような行いあなたが持っている(フル、テーブルスペース、スキーマ、オブジェクトを有効にPK制約

SELECT 'ALTER TABLE '||table_name||' ENABLE CONSTRAINT '||constraint_name sql_statement FROM USER_CONSTRAINTS where constraint_type ='P'; 

を有効contraints )?どのような輸入をしようとしていますか?一度に1つずつテーブルをインポートしようとしているようですが、それは正しいのですか?それは必要ですか?または、1つのコマンドで多くのテーブルをインポートできますか? –

+0

私は完全なデータベースダンプファイルを持っています。私が望むのは、特定のユーザーのためのテーブルのデータです。このコマンドはすべてのテーブルのリストを持っているので、一度にそれらをすべてインポートしています。しかし、制約の問題を避けるために正しい順序で実行しているわけではありません。 – BON

+0

'C_PLUS'が所有するすべてのテーブルをロードしますか?または、 'TABLES'パラメータで指定されたテーブルのサブセットをロードするだけですか? –

答えて

2

FROMUSERと指定してください。 TOUSERパラメータを省略することもできます。これは、スキーマ名を変更していないため、インポートの動作には影響しません。 TABLES句を省略すると、すべての外部キー制約が同じスキーマ内の他のテーブルを参照し、エクスポートファイル内のデータが制約を有効にすることを前提とした制約の問題が修正されます(エクスポートがCONSISTENT=Yダンプ・ファイル内の孤立した行であり、制約が作成されないなど)。

0

各テーブルについて、インポート前に主キー/外部キー制約を無効にすることができます。次に、各主キーと外部キーがインポート後に制限されるようにします。

無効に

ALTER TABLE table_name DISABLE PRIMARY KEY CASCADE; 

は、テーブルの数や制約の数は手動でそれを行うにはあまりにも多くある場合は、使用してALTER TABLEコマンドを生成するスクリプトを書くことができ制約

ALTER TABLE table_name ENABLE CONSTRAINT constraint_name; 

を有効contraintsデータ・ディクショナリ・ビュー

無効にPK/FKは

SELECT 'ALTER TABLE '||table_name||' DISABLE PRIMARY KEY CASCADE' sql_statement 
FROM USER_TABLES; 

がFK制約に

SELECT 'ALTER TABLE '||table_name||' ENABLE CONSTRAINT '||constraint_name sql_statement 
FROM USER_CONSTRAINTS 
where constraint_type ='R'; 
関連する問題