impdp 中的remap方式

pingley發表於2012-06-25
impdp 中的remap方式
impdp 中要是沒有remap方式,那麼個人認為datapump 將是一個死板的工具。
remap_table方式
語法格式:REMAP_TABLE=[schema.]old_tablename[.partition]:new_tablename
在hr 模式中根據employees 建立如下一張表。
SQL>create table emp as select * from employees where 1=2;
執行匯入操作,tables 中指定了employees,因為dumpfile table.dmp
中除了employees 表中的資料以外,還有其他表的資料。關鍵是remap_table
引數的使用把employees 表中的資料從對映到emp 表,並且我們還使用了
conntent=data_only 引數,因為emp表已經存在,我們需要匯入的只是資料。
C:\Users\hello>impdp hr/hr tables=employees remap_table=employees:emp dumpfile=dmp_dir:table.dmp nologfile=yes content=data_only
Import: Release 11.2.0.1.0 - Production on Sun Jun 24 09:35:22 2012
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "HR"."SYS_IMPORT_TABLE_01" successfully loaded/unloaded
Starting "HR"."SYS_IMPORT_TABLE_01":  hr/******** tables=employees remap_table=employees:emp dumpfile=dmp_dir:table.dmp nologfile=yes content=data_only
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "HR"."EMP"                                  16.80 KB     107 rows
Job "HR"."SYS_IMPORT_TABLE_01" successfully completed at 09:35:26
匯入成功,下面確定資料是否存在於remap_table 引數指定的表中。
SQL>select count(*) from emp;
  COUNT(*)
----------
       107
remap_schema方式
語法格式:REMAP_SCHEMA=source_schema:target_schema
我們需要把使用schemas mode 匯出的資料,重新匯入到另外一個模式中,這時候我們
可以使用remap_schema 引數,為了能夠使用remap_schema 方式匯入資料,使用者應該
事先獲得datapump_imp_full_database 角色。下面指定資料的匯入。
C:\Users\hello>impdp hr/hr schemas=hr remap_schema=hr:test dumpfile=dmp_dir:hr_schema.dmp logfile=dmp_dir:remap_schema.log
Import: Release 11.2.0.1.0 - Production on Sun Jun 24 09:50:43 2012
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "HR"."SYS_IMPORT_SCHEMA_01" successfully loaded/unloaded
Starting "HR"."SYS_IMPORT_SCHEMA_01":  hr/******** schemas=hr remap_schema=hr:test dumpfile=dmp_dir:hr_schema.dmp logfile=dmp_dir:remap_schema.log
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported "TEST"."COUNTRIES"                          6.367 KB      25 rows
. . imported "TEST"."DEPARTMENTS"                        7.007 KB      27 rows
. . imported "TEST"."EMPLOYEES"                          16.80 KB     107 rows
. . imported "TEST"."JOBS"                               6.984 KB      19 rows
. . imported "TEST"."JOB_HISTORY"                        7.054 KB      10 rows
. . imported "TEST"."LOCATIONS"                          8.273 KB      23 rows
. . imported "TEST"."REGIONS"                            5.476 KB       4 rows
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/VIEW/VIEW
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "HR"."SYS_IMPORT_SCHEMA_01" successfully completed at 09:50:53
匯入成功以後確定,test 模式中的資料。表中的資料,約束,索引等都是存在的。
SQL> select count(*) from employees;
  COUNT(*)
----------
       107
SQL> drop table employees;
drop table employees
           *
ERROR at line 1:
ORA-02449: unique/primary keys in table referenced by foreign keys
SQL> select index_name from user_indexes
  2  where table_name = 'EMPLOYEES';
INDEX_NAME
------------------------------------------------------------
EMP_EMP_ID_PK
EMP_EMAIL_UK
remap_tablespace 方式
在hr 模式中建立emp 表。
SQL> create table emp tablespace users as select * from employees;
Table created.
將emp 表匯出。
C:\Users\hello>expdp hr/hr tables=emp dumpfile=dmp_dir:emp_table.dmp nologfile=yes
建立 一個新的使用者並賦予相應的許可權,注意這裡的預設永久表空間是test而不是users.
SQL> create user testing
  2  identified by testing
  3  default tablespace test
  4  temporary tablespace temp;
User created.
SQL> alter user testing default tablespace test quota 20m on test;
User altered.
SQL> grant connect to testing;
Grant succeeded.
SQL> grant create table to testing;
Grant succeeded.
執行匯入發現如下的錯誤。因為使用者沒有users 表空間的使用權,更不用說配額了。
C:\Users\hello>impdp hr/hr tables=emp remap_schema=hr:testing dumpfile=dmp_dir:emp_table.dmp nologfile=yes
ORA-39083: Object type TABLE:"TESTING"."EMP" failed to create with error:
ORA-01950: no privileges on tablespace 'USERS'
下面我們使用remap_tablespace 的方式來處理。將dumpfile 中對users 表空間的引用remap 到test 表空間。
C:\Users\hello>impdp hr/hr tables=emp remap_schema=hr:testing remap_tablespace=users:test dumpfile=dmp_dir:emp_table.dmp nologfile=yes
Import: Release 11.2.0.1.0 - Production on Sun Jun 24 10:59:25 2012
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Master table "HR"."SYS_IMPORT_TABLE_01" successfully loaded/unloaded
Starting "HR"."SYS_IMPORT_TABLE_01":  hr/******** tables=emp remap_schema=hr:testing remap_tablespace=users:test dumpfile=dmp_dir:emp_table.dmp nologfile=yes
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "TESTING"."EMP"                             16.79 KB     107 rows
Job "HR"."SYS_IMPORT_TABLE_01" successfully completed at 10:59:28
成功的匯入了,確定一下testing模式中的資料。
SQL> select count(*) from emp;
  COUNT(*)
----------
       107
除了上述演示的remap 方式以外還有一個remap_datafile,用來將dumpfile 中包含的資料檔案路徑,remap 到新的資料資料路徑。該引數只有當使用full 模式匯入的時候才可以使用。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26110315/viewspace-733694/,如需轉載,請註明出處,否則將追究法律責任。

相關文章