Oracle data pump import into existing table

user1328819 picture user1328819 · Nov 8, 2012 · Viewed 21.7k times · Source

i need an efficient way to copy data from one database to another. Both are based on Oracle 11g.

  1. Step: (Re)create new tables
  2. Step: Install pl sql packages
  3. Step: export tables tab_old1 and tab_old2 from database 1 with expdp
  4. Step: import into tab_new1 and tab_new2 database 2 with impdp
  5. +x Step: Use installed pl sql procedures

Challenges: The pl sql procedures uses already tab_new1 and tab_new2. Thus, I create both tables in step 1 and 2. In step 3 and 4 I import and export only data. But tab_new1 and tab_new2 have additional columns -> import fails. I tried to create views without the new columns.

Import fails with the following error message:

ORA-31693: Table data object "Schema"."tab_old1" failed to load/unload and is being skipped due to error:
ORA-31603: object “tab_old1” of type TABLE not found in schema “Schema” 

ORA-31693: Table data object "Schema"."tab_old2" failed to load/unload and is being skipped due to error:
ORA-31603: object “tab_old2” of type TABLE not found in schema “Schema” 

The views are called tab_old1 and tab_old2, but of course they are not of type TABLE.

Any ideas?

How can I import my data from tab_old1 in an existing table with additional columns?

I don't want to export / import the tables in the first step, rename them, and install pl sqls procedures afterwards.

Could you help me?

edit:

Thanks for your answer. I tried your example twice, but the remap_table function does not work for me. Import: Release 11.1.0.6.0 - 64bit Production.

edit 2: Yes. It seems to be a problem of my oracle version. The remap_table function is ignored. I can write bullshit like remap_table=not.existing/table and impdp doesn't give a shit about it. Well, I don't have the time to solve this problem. I must work aroud. Thanks for your help, anyways.

Answer

DazzaL picture DazzaL · Nov 8, 2012

ok so you are importing with content=data_only and you've renamed tab_old1 to tab_new1 and added a few columns?

when specifying the import put remap_table=tab_old1:tab_new1

this will work as long as the new columns are nullable.

eg:

SQL> create table foo(id number);

Table created.

SQL> insert into foo select rownum from dual connect by level <= 5;

5 rows created.

SQL> commit;

Commit complete.

SQL> host expdp test/test tables=foo directory=data_pump_dir

Export: Release 11.2.0.2.0 - Production on Thu Nov 8 15:40:18 2012

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "TEST"."SYS_EXPORT_TABLE_01":  test/******** tables=foo directory=data_pump_dir 
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 64 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
. . exported "TEST"."FOO"                                5.031 KB       5 rows
Master table "TEST"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for TEST.SYS_EXPORT_TABLE_01 is:
  /u01/app/oracle/admin/dtd64bit1/dpdump/expdat.dmp
Job "TEST"."SYS_EXPORT_TABLE_01" successfully completed at 15:40:30

SQL> delete from foo;

5 rows deleted.

SQL> alter table foo add (a varchar2(200));

Table altered.

SQL> alter table foo rename to foo2;

Table altered.

and your original error?

SQL> host impdp test/test tables=foo directory=data_pump_dir content=data_only

Import: Release 11.2.0.2.0 - Production on Thu Nov 8 15:42:17 2012

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "TEST"."SYS_IMPORT_TABLE_01" successfully loaded/unloaded
Starting "TEST"."SYS_IMPORT_TABLE_01":  test/******** tables=foo directory=data_pump_dir content=data_only 
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
ORA-39034: Table TABLE_DATA:"TEST"."FOO" does not exist.
ORA-39126: Worker unexpected fatal error in KUPW$WORKER.UPATE_TD_ROW_IMP [15] 
TABLE_DATA:"TEST"."FOO"
ORA-31603: object "FOO" of type TABLE not found in schema "TEST"

ORA-06512: at "SYS.DBMS_SYS_ERROR", line 105
ORA-06512: at "SYS.KUPW$WORKER", line 8641

so remap..

SQL> host impdp test/test tables=foo remap_table=foo:foo2 directory=data_pump_dir content=data_only

Import: Release 11.2.0.2.0 - Production on Thu Nov 8 15:42:33 2012

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "TEST"."SYS_IMPORT_TABLE_02" successfully loaded/unloaded
Starting "TEST"."SYS_IMPORT_TABLE_02":  test/******** tables=foo remap_table=foo:foo2 directory=data_pump_dir content=data_only 
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "TEST"."FOO2"                               5.031 KB       5 rows
Job "TEST"."SYS_IMPORT_TABLE_02" successfully completed at 15:42:37


SQL> select * from foo2;

ID     A
---------- ----------
     1
     2
     3
     4
     5