0

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

これが私のインポートコマンドです:

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

インポート時に各テーブルを手動で確認し、失敗した場合は最初に不足しているテーブルをインポートできますが、インポートする必要があるテーブルが 400 以上あり、時間がかかりすぎます。

これを回避する方法はありますか、それとも誰かアイデアがありますか?

ありがとう

4

2 に答える 2

2

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

于 2011-12-08T15:58:27.080 に答える
0

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

制約を無効にする

ALTER TABLE table_name DISABLE PRIMARY KEY CASCADE;

制約を有効にする

ALTER TABLE table_name ENABLE CONSTRAINT constraint_name;

テーブルの数と制約の数が多すぎて手動で行うことができない場合は、スクリプトを記述ALTER TABLEして、データ ディクショナリ ビューを使用してコマンドを生成できます。

PK/FK 制約を無効にする

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

PK 制約を有効にする

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

FK 制約を有効にする

SELECT 'ALTER TABLE '||table_name||' ENABLE CONSTRAINT '||constraint_name sql_statement
FROM USER_CONSTRAINTS
where constraint_type ='R';
于 2011-12-08T16:04:11.927 に答える