expdp/impdp使用小结

来源:互联网 发布:软件项目实施过程 编辑:程序博客网 时间:2024/05/14 19:09
EXP常规模式、EXP直接路径模式和EXPDP三种方式导出的性能对比
1.首先是EXP的常规路径导出:
exp scott/tiger file=/data1/data.dmp buffer=20480000
常规EXP导出方式执行了1小时24分钟。 
2.直接路径导出方式:
exp scott/tiger file=/data1/data.dmp buffer=20480000
recordlength=65535 direct=y
直接路径导入用时18分钟,比常规路径导出速度有一个明显的提高。


 
3.数据泵的导出速度。
expdp scott/tiger dumpfile=data.dp directory=d_test schemas=scott
数据泵的导出时间仅用了14分钟,比直接路径导入方式还快了20%多。而且观察三个导出文件的大小可以发现,导出速度越快对应的文件也越小,其中数据泵的导出方式得到的文件要比EXP方式小将近1.5G。


IMP和IMPDP导入性能对比
1.IMP的导入速度:
imp scott/tiger file=/data1/data.dmp full=y buffer=20480000 log=/data1/data.log
IMP导入花费了3小时17分钟,


2.IMPdp的导入速度:
impdp scott/tiger DUMPFILE=data.dp DIRECTORY=dpdata1 FULL=y LOGFILE=data.log
数据泵的导入(parallel参数)操作居然花了3个小时8分钟的时间,和IMP的导入速度十分接近,看来并非所有情况下都像Oracle描述的那样,数据泵的导入比普通导入效率有大幅度的提高。


上面的测试中发现IMPDP的导入速度和IMP导入速度相差无几。而Oracle在介绍数据泵的时候,提到IMPDP的导入速度最高是IMP的10倍。不过好在IMPDP还是可以优化调整的,那就是通过设置PARALLEL来提高IMPDP的并行度。
首先还是看一下CPU的数量:


SQL> show parameter cpu




由于数据库服务器的CPU个数为2,下面尝试设置PARALLEL为2来进行导入
impdp scott/tiger DUMPFILE=data.dp DIRECTORY=d_test FULL=y LOGFILE=data.log parallel=2


采用并行度为2的导入方式,发现速度果然提高了很多。并行度为1的导入速度是3小时8分钟,而现在用了不到2个半小时。
由于并行度设置不应该超过CPU数的2倍,因此尝试平行度3和4的导入,导入时间和并行度2十分接近。看来已经无法再使用通过提高并行度的方法来提高性能了。




1.先看直接导出的性能:


$ expdp scott/tiger directory=scott dumpfile=data.dp
整个导出操作大概用了14分半,


2.尝试使用并行度2进行导出,这时仍然设置一个导出的数据文件:
$ expdp scott/tiger  directory=scott dumpfile=data.dp parallel=2


整个导入过程不到14分钟,不过这个性能的提升实在不是很明显。不过这是有原因的,由于设置了并行度,两个进程在同时执行导出操作,但是二者要将导出的数据写入同一个数据文件中,因此必然会导致资源的争用


3.仍然使用并行度2,但是同时设置两个数据文件再次检查导出性能:
$ expdp scott/tiger directory=scott dumpfile=data_fil1.dp,data_file2.dp parallel=2


这次导出仅仅用了10分半,导出的效率大大的提高。


4.测试一下并行度4,分别导出到4个数据文件中:
用了9分钟整导出完成,设置成并行度4仍然可以获得一定的性能提升,但是并不明显了,这主要是由于整个性能的瓶颈已经不是单个进程的处理能力,多半性能的瓶颈已经变成了磁盘IO瓶颈,此时单单靠增加并行度已经无法明显提升性能了。

EXPDP常规使用方式:
 
一. 创建逻辑目录, 该命令不会在操作系统创建真正的目录. 最好以system等管理员创建.
        create directory dpdata1 as 'd:\test\dump';
二. 查看管理理员目录(同时查看操作系统是否存在, 因为Oracle并不关心该目录是否存在, 如果不存在, 则出错.)
        select * from dba_directories;
三. 给scott用户赋予在指定目录的操作权限, 最好以system等管理员赋予.
        grant read, write on directory dpdata1 to scott;
四. 导出数据
    1)按用户导
        host expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;
    2)并行进程parallel
        expdp scott/tiger@orcl directory=dpdata1 dumpfile=scott3.dmp parallel=40 job_name=scott3
    3)按表名导
        host expdp scott/tiger@orcl TABLES=emp,dept dumpfile=expdp.dmp DIRECTORY=dpdata1;
    4)按查询条件导
        host expdp scott/tiger@orcl directory=dpdata1 dumpfile=expdp.dmp Tables=emp query='WHERE deptno=20';
    5)按表空间导
        host expdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp  TABLESPACES=temp,example;
    6)导整个数据库
        host expdp system/manager DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y;
 
五. 还原数据
    1)导到指定用户下
        host impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=scott;
    2)改变表的owner
        host impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system;
    3)导入表空间
        host impdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=example;
    4)导入数据库
        host impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y;
 
    5)追加数据
        host impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION=append;
0 0