1

我们正在使用 Oracle 11g R2 开发一个大型项目。我们的数据库由 170 多个表组成,其中包含大量的分区引用(Oracle 11 的一个特性)。

有时我们想将我们的数据库移植到另一个数据库,因此我们使用数据泵创建了一个转储文件,当导出数据时一切正常,但我们无法将其导入另一个数据库。

导入正确的表时,正常导入,但不导入引用表的分区。

通过引用表创建分区时,应在create table语句中创建外键(基于哪个分区),但似乎数据泵在脚本末尾创建了所有外键。

我不敢相信 Oracle 人忘记在 Oracle 11g 中升级数据泵。有谁知道如何解决这个问题?

更新 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 上查找这些内容,您会发现错误 8477142。据说该问题已在 11.2.0.2 中修复。

于 2012-04-24T04:05:19.850 回答