1

Oracle 11g R2 を使用して大規模なプロジェクトを開発しています。私たちのデータベースは、多くの参照によるパーティション (Oracle 11 の機能) を備えた 170 を超えるテーブルで構成されています。

データベースを別のデータベースに移植したい場合があるため、データをエクスポートするときにデータポンプを使用してダンプファイルを作成しますが、別のデータベースにインポートすることはできません。

適切なテーブルをインポートすると、通常どおりインポートされますが、参照テーブルによるパーティションはインポートされません。

参照テーブルによるパーティションを作成する場合、(パーティションの基になる) 外部キーはcreate tableステートメントで作成されますが、データ ポンプはスクリプトの最後ですべての外部キーを作成するようです。

Oracle の人々が Oracle 11g で data-pump をアップグレードするのを忘れたとは信じられません。この問題を解決する方法を知っている人はいますか?

更新 1: これらは、使用するインポート スクリプトとスクリプト スクリプトです。

書き出す:

declare
    h1   NUMBER;
begin
    h1 := dbms_datapump.open (operation => 'EXPORT', job_mode => 'SCHEMA', job_name => 'EXPORT000185', version => 'COMPATIBLE'); 
    dbms_datapump.set_parallel(handle => h1, degree => 1); 
    dbms_datapump.add_file(handle => h1, filename => '910202.LOG', directory => 'DATA_PUMP_DIR', filetype => 3); 
    dbms_datapump.set_parameter(handle => h1, name => 'KEEP_MASTER', value => 0); 
    dbms_datapump.metadata_filter(handle => h1, name => 'SCHEMA_EXPR', value => 'IN(''PAYESH_ACCOUNTING'',''PAYESH_CORE'',''PAYESH_CRM'',''PAYESH_LIFE'',''PAYESH_SECURITY'')'); 
     dbms_datapump.add_file(handle => h1, filename => '910202_db4.DMP', directory => 'DATA_PUMP_DIR', filetype => 1); 
    dbms_datapump.set_parameter(handle => h1, name => 'INCLUDE_METADATA', value => 1); 
    dbms_datapump.set_parameter(handle => h1, name => 'DATA_ACCESS_METHOD', value => 'AUTOMATIC'); 
    dbms_datapump.set_parameter(handle => h1, name => 'ESTIMATE', value => 'BLOCKS'); 
    dbms_datapump.start_job(handle => h1, skip_current => 0, abort_step => 0); 
    dbms_datapump.detach(handle => h1); 
end;

輸入:

declare
    h1   NUMBER;
begin
    h1 := dbms_datapump.open (operation => 'IMPORT', job_mode => 'SCHEMA', job_name => 'IMPORT000189', version => 'COMPATIBLE'); 
    dbms_datapump.set_parallel(handle => h1, degree => 1); 
    dbms_datapump.add_file(handle => h1, filename => '910228.LOG', directory => 'DATA_PUMP_DIR', filetype => 3); 
    dbms_datapump.set_parameter(handle => h1, name => 'KEEP_MASTER', value => 0); 
    dbms_datapump.add_file(handle => h1, filename => '910128.DMP', directory => 'DATA_PUMP_DIR', filetype => 1); 
    dbms_datapump.metadata_filter(handle => h1, name => 'SCHEMA_EXPR', value => 'IN(''PAYESH_ACCOUNTING'',''PAYESH_CORE'',''PAYESH_CRM'',''PAYESH_LIFE'',''PAYESH_SECURITY'')'); 
    dbms_datapump.set_parameter(handle => h1, name => 'INCLUDE_METADATA', value => 1); 
    dbms_datapump.set_parameter(handle => h1, name => 'DATA_ACCESS_METHOD', value => 'AUTOMATIC'); 
    dbms_datapump.set_parameter(handle => h1, name => 'SKIP_UNUSABLE_INDEXES', value => 0); 
    dbms_datapump.start_job(handle => h1, skip_current => 0, abort_step => 0); 
    dbms_datapump.detach(handle => h1); 
end;

更新 2: この問題は、クロススキーマである外部キーのパーティションにのみ存在することがわかりました。

質問はすでに存在します。スキーマごとにクロススキーマパーティションを持つテーブルをまとめてエクスポート/インポートする方法はありますか?

4

1 に答える 1

0

問題を再現できました。コマンドライン IMPDB を使用すると、より有用なエラー メッセージが表示されました。

ORA-39083: Object type TABLE:"SCHEMA2"."CHILD_TABLE" failed to create with error:
ORA-00942: table or view does not exist

My Oracle Support でそれらを調べると、Bug 8477142 が見つかります。この問題は、11.2.0.2 で修正されたと思われます。

于 2012-04-24T04:05:19.850 に答える