--=================================
-- 数据泵 IMPDP 导入工具的使用
--=================================
数据的导入导出时数据库经常处理的作业之一, Oracle 提供了 IMP 和 IMPDP 以及 SQL * Loader 等工具来完成数据的导入工作,其中 IMP 服务于早期的 9i 之前的版本,在 10g 及后续版本, Oracle 提供了数据泵高速导入工具,本文主要介绍 IMPDP 的使用方法,关于高速导出工具请参照: 数据泵EXPDP 导出工具的使用 。 SQL * Loader 请参照: SQL*Loader 使用方法 。
一、数据泵的体系结构
数据泵的体系结构在数据泵 EXPDP 导出工具的使用已列出,再此不再赘述。
二、 IMPDP 支持的接口及导入模式
导入接口
使用命令行带参数的
使用命令行带参数文件
使用命令行交互
使用 database console ( GUI )
几种常用的导入模式
导入表
导入方案
导入表空间
导入数据库
传输表空间模式
三、演示如何导入
1. 关于查看 impdp 的帮助,使用以下命令
[oracle@oradb ~]$ impdp - ? 或 [oracle@oradb ~]$ impdp - help 前者提供帮助信息并开启命令行交互模式
2. 导入表
-- 将表 dept,emp 导入到 scott 方案中
impdp scott / tiger directory = dump_scott dumpfile = tab . dmp tables = dept , emp
-- 将表 dept 和 emp 从 scott 方案导入到 system 方案中,对于方案的转移,必须使用 remap_shcema 参数
impdp system / manage directory = dump_scott dumpfile = tab . dmp tables = scott . dept , scott . emp remap_schema = scott : system
3. 导入方案
-- 将 dump_scott 目录下的 schema.dmp 导入到 scott 方案中
impdp scott / tiger directory = dump_scott dumpfile = schema . dmp schemas = scott
-- 将 scott 方案中的所有对象转移到 system 方案中
impdp system / redhat directory = dump_scott dumpfile = schema . dmp schemas = scott remap_schema = scott : system
4. 导入表空间
impdp system / redhat directory = dump_scott dumpfile = tablespace . dmp tablespaces = user01
5. 导入数据库
impdp system / redhat directory = dump_scott dumpfile = full . dmp full = y
6. 将数据对象原样导回 ( 演示从 Windows 客户端来实现,数据库基于 Linux 系统 )
从 Windows 客户端来导出 scott . emp 表,导出后删除该表,再原样导回
C : / > expdp scott / tiger@list2 directory = dump_scott dumpfile = emp . dmp tables = emp
C : / > sqlplus scott / tiger@list2
SQL * Plus : Release 10.2.0.1.0 - Production on 星期一 9 月 20 20 : 50 : 35 2010
Copyright ( c ) 1982 , 2005 , Oracle . All rights reserved .
Connected to :
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning , OLAP and Data Mining options
SQL > drop table emp ;
Table dropped .
SQL > commit ;
Commit complete .
SQL > select count ( 1 ) from emp ;
select count ( 1 ) from emp
*
ERROR at line 1 :
ORA - 00942 : table or view does not exist
SQL > host impdp scott / tiger@list2 directory = dump_scott dumpfile = emp . dmp
SQL > select count ( 1 ) from emp ;
COUNT ( 1 )
----------
14
7. 将导出的对象使用 remap_schema 参数转移到不同的方案
a . 将 dept 从 scott 用户导入到 system 用户下
expdp scott / tiger directory = dump_scott dumpfile = dept . dmp tables = dept
方法一:
impdp system / redhat tables = scott . dept directory = dump_scott dumpfile = dept . dmp remap_schema = scott : system
方法二:
sql > grant imp_full_database to scott ;
impdp scott / tiger directory = dump_scott dumpfile = dept . dmp tables = dept
remap_schema = scott : system table_exists_action = replace
b . 将 scott 方案下的所有对象导入到 system 方案下
expdp scott / tiger directory = dump_scott dumpfile = allobj . dmp schemas = scott
impdp scott / tiger directory = dump_scott dumpfile = allobj . dmp remap_schema = scott : system table_exists_action = replace
8. 使用 remap_datafile 参数转移到不同的数据文件 ( 用于不同平台之间存在不同命名方式时 )
下面的示例首先创建了一个参数文件,参数文件名为 payroll . par
directory = pump_scott
full = y
dumpfile = datafile . dmp
remap_datafile = 'db$:[hrdata.payroll]tbs2.f' : '/db/hrdata/payroll/tbs2.f' -- 指明重新映射数据文件
impdp scott / tiger PARFILE = payroll . par
9. 使用 remap_tablespace 参数转移到不同的表空间
impdp scott / scott remap_tablespace = users : tbs1 directory = dpump_scott dumpfile = users . dmp
10. 并行导入:
expdp e / e directory = dump_e dumpfile = a_ % u . dmp schemas = e parallel = 3
impdp e / e directory = dump_e dumpfile = a_ % u . dmp schemas = e parallel = 3 table_exists_action = replace
四、数据泵 impdp 参数:
1.REMAP_DATAFILE
该选项用于将源数据文件名转变为目标数据文件名 , 在不同平台之间搬移表空间时需要该选项 .
REMAP_DATAFILE = source_datafie : target_datafile
2.REMAP_SCHEMA
该选项用于将源方案的所有对象装载到目标方案中 .
REMAP_SCHEMA = source_schema : target_schema
3.REMAP_TABLESPACE
将源表空间的所有对象导入到目标表空间中
REMAP_TABLESPACE = source_tablespace : target : tablespace
4.REUSE_DATAFILES
该选项指定建立表空间时是否覆盖已存在的数据文件 . 默认为 N
REUSE_DATAFIELS ={ Y | N}
5.SKIP_UNUSABLE_INDEXES
指定导入是是否跳过不可使用的索引 , 默认为 N
6 , sqlfile 参数允许创建 DDL 脚本文件
impdp scott / tiger directory = dump_scott dumpfile = a1 . dmp sqlfile = c . sql
默认放在 directory 下,因此不要指定绝对路径
7.STREAMS_CONFIGURATION
指定是否导入流元数据 ( Stream Matadata ), 默认值为 Y .
8.TABLE_EXISTS_ACTION
该选项用于指定当表已经存在时导入作业要执行的操作 , 默认为 SKIP
TABBLE_EXISTS_ACTION ={ SKIP | APPEND | TRUNCATE | FRPLACE }
当设置该选项为 SKIP 时 , 导入作业会跳过已存在表处理下一个对象 ;
当设置为 APPEND 时 , 会追加数据
当设置为 TRUNCATE 时 , 导入作业会截断表 , 然后为其追加新数据 ;
当设置为 REPLACE 时 , 导入作业会删除已存在表 , 重建表并追加数据 ,
注意 , TRUNCATE 选项不适用与簇表和 NETWORK_LINK 选项
9.TRANSFORM
该选项用于指定是否修改建立对象的 DDL 语句
TRANSFORM = transform_name : value [:object_type]
transform_name 用于指定转换名 , 其中 SEGMENT_ATTRIBUTES 用于标识段属性 ( 物理属性 , 存储属性 , 表空间 , 日志等信息 ),
STORAGE 用于标识段存储属性 , VALUE 用于指定是否包含段属性或段存储属性 , object_type 用于指定对象类型 .
Impdp scott / tiger directory = dump dumpfile = tab . dmp transform = segment_attributes : n : table
10.TRANSPORT_DATAFILES
该选项用于指定搬移空间时要被导入到目标数据库的数据文件
TRANSPORT_DATAFILE = datafile_name
Datafile_name 用于指定被复制到目标数据库的数据文件
Impdp system / manager DIRECTORY = dump DUMPFILE = tts . dmp
TRANSPORT_DATAFILES = ’ / user01 / data / tbs1 . f’
五、影响数据泵性能的相关参数
对下列参数建议如下设置
disk_asynch_io = true
db_block_checking = false
db_block_checksum = false
对下列参数建议设置更高的值来提高并发
processes
sessions
parallel_max_servers
对下列参数应尽可能的调大空间大小
shared_pool_size
undo_tablespace
六、更多参考
Oracle 联机重做日志文件(ONLINE LOG FILE)