从10g开始,Oracle提供更高效的Data Pump(即expdp/impdp)来进行数据的导入和导出,老的exp/imp还可以用,但已经不建议使用。注意:expdp/impdp和exp/imp之间互不兼容,也就是说exp导出的文件只能用imp导入,expdp导出的文件只能用impdp导入。
相关阅读:通过expdp&impdp把11g的数据迁移到10g平台的要点 http://www.linuxidc.com/Linux/2013-06/86493.htmOracle Data Pump使用范例及部分注意事项(expdp/impdp) http://www.linuxidc.com/Linux/2013-06/86383.htmOracle datapump expdp/impdp 导入导出数据库时hang住 http://www.linuxidc.com/Linux/2013-05/84746.htmexpdp/impdp做Oracle 10g 到11g的数据迁移 http://www.linuxidc.com/Linux/2013-05/83923.htm
Data Pump的组成部分
Data Pump有以下三个部分组成:
- 客户端工具:expdp/impdp
- Data Pump API (即DBMS_DATAPUMP)
- Metadata API(即DMBS_METADATA)
通常情况下,我们都把expdp/impdp等同于Data Pump,但从上面可以知道,实际上它只是Data Pump的一个组成部分,其实真正干活的是两个API,只是它们隐藏在后台,平时很少被注意,但如果出现一些莫名其妙的错误(如internal error等),通常是因为这两个API损坏,跑脚本重新编译它们即可。
Data Pump相关的角色
默认情况下,用户可以导出/导入自己schema下的数据,但如果要导出/导入其它schema下的数据,必须要把以下两个角色赋予该用户:
- DATAPUMP_EXP_FULL_DATABASE
- DATAPUMP_IMP_FULL_DATABASE
当然,sys,system账户和dba角色默认拥有以上两个角色。
Data Pump数据导入方法
- 数据文件拷贝:这种是最快的方法,dumpfile里只包含元数据,在操作系统层面拷贝数据文件,相关参数有:TRANSPORT_TABLESPACES,
TRANSPORTABLE=ALWAYS - 直接路径加载:这是除了文件拷贝之外最快的方法,除非无法用(比如BFILE),否则都用这种方法
- 外部表:第1,2种无法用的情况下,才会使用外部表
- 传统路径加载:只有在以上所有方法都不可用的情况下,才会使用传统路径加载,这种方法性能很差
Data Pump Job
当执行expdp/impdp时,其实是起了job执行导出导入工作,一个Data Pump job由以下三部分组成:
- 主进程(master process):控制整个job,是整个job的协调者。
- 主表(master table):记录dumpfile里数据库对象的元信息,expdp结束时将它写入dumpfile里,impdp开始时读取它,这样才能知道dumpfile里的内容。
- 工作进程(worker processes):执行导出导入工作,根据实际情况自动创建多个工作进程并行执行,但不能超过参数PARALLEL定义的个数。
监控Job状态
在屏幕的输出、logfile里都能看到当前Data Pump Job的运行情况,在数据库里也可以查询视图
DBA_DATAPUMP_JOBS,
USER_DATAPUMP_JOBS, or
DBA_DATAPUMP_SESSIONS。对于时间比较长的Job,可以在动态视图V$SESSION_LONGOPS查看当前Job完成情况以及预估多久能全部完成,具体字段的意义如下: USERNAME - job owner
OPNAME - job name
TARGET_DESC - job operation
SOFAR - megabytes transferred thus far during the job
TOTALWORK - estimated number of megabytes in the job
UNITS - megabytes (MB)
MESSAGE - a formatted status message of the form:
"job_name: operation_name : nnn out of mmm MB done"
创建Directory
Data Pump不像exp/imp可以在客户端执行,它必须得在服务器端执行,它生成的所有文件都放在服务器端,因此在Oracle里必须得先创建directory对象,下面是一个例子: SQL> CREATE DIRECTORY dpump_dir1 AS "/usr/apps/datafiles"; 创建了directory对象之后,还要把读写权限赋给执行Data Pump的用户,如下所示:SQL> GRANT READ, WRITE ON DIRECTORY dpump_dir1 TO hr;
| 【内容导航】 |
| 第1页:总览 | 第2页:expdp |
| 第3页:impdp | |
rlwrap - 解决Linux下sqlplus退格、上翻键乱码问题ORA-00845 Oacle 11g常见的shm问题相关资讯 expdp impdp Oracle Data Pump
- Oracle 11g版本expdp的COMPRESSION (今 07:43)
- expdp与impdp参数用法 (08月03日)
- 利用Oracle自带的impdp和expdp进行 (05月18日)
| - exp和expdp 导出性能比较 (08月03日)
- impdp的TABLE_EXISTS_ACTION参数选 (05月28日)
- Oracle impdp的skip_constraint_ (03月29日)
|
本文评论 查看全部评论 (0)