2012-02-29 64 views
0

私はデータダンプを持っており、それを別のDB(Oracle 10g)にインポートしたいと考えています。宛先DBにはすでにテーブル(データなし)といくつかの外部キー制約があります。制約エラーを避けるために、テーブルごとにデータをインポートします。誰か簡単な方法を知っていたら、私に教えてください。 (Oracleのインポート・ツールには表間の関係を自動的に認識する機能はありません)ORACLE 10g:外部キー制約エラーなしでインポートするには?

+0

@JustinCaveソリューションを使用したくない場合(何らかの理由で)、user_constraintsテーブルをループして、最初に外部キーが制約されます。データをインポートした後、再度有効にします。しかし、もし私があなたであれば、私はそれをしません... –

答えて

1

スキーマ・レベルのエクスポートがあると仮定すると、ソース・スキーマには同じ外部キー制約があり、すべての外部キー制約は同じスキーマ内の表間で、インポート・ユーティリティーは自動的に外部キー制約を処理する必要があります。そのためには何もする必要はありません(ただし、テーブルを作成して既に存在するエラーが発生するため、インポート時にエラーを無視する必要があります)。

+0

11g XEの質問者に似た状況で、私は 'imp ignore = Y touser = foo'を既存のスキーマに使用しています。 FKの制約。アルファベット順にテーブルを処理しますが、FKを自動的に処理することはありませんか?それが最終的に可能になると思われるが、もしそれらがあらかじめ存在するなら、それは助けにならない。 –

4

あなたはまず、すべての外部キー無効にすることができます。

begin 
    for cnst in (SELECT constraint_name, table_name FROM user_constraints WHERE constraint_type ='R') loop 
    execute immediate 'alter table '|| cnst.table_name||' disable constraint ' || cnst.constraint_name ; 
    end loop; 
end; 

同じが戻ってそれらを有効にするか、あなたのデータをロードした後(ちょうどenableの代わりdisable

にalter tableコマンドを変更しかし、これは危険ですデータがあなたの制約を満たしていない場合は、問題が発生します。

関連する問題