前一段时间在一次迁移中同时用到了数据泵和EXP,发现二者效率的差别还是相当大的。这里通过一个例子简单比较一下。

这篇文章讨论影响数据泵导入性能的最大因素。



前面写了几篇文章,分别介绍EXP/IMP与EXPDP/IMPDP的性能对比,根据前面几篇文章的描述,如果不使用并行,似乎IMPDP的效率要比IMP没有一个数量级的提示。对于当前的环境而言,事实确实如此。不过前面一直没有描述一个重要的因素,当然的数据库环境由于配置了STANDBY数据库,因此不但处于归档模式,还设置了FORCE LOGGING:

SQL> SELECT NAME, LOG_MODE, FORCE_LOGGING FROM V$DATABASE;


NAME      LOG_MODE     FOR


--------- ------------ ---


TESTRAC   ARCHIVELOG   YES


而数据泵的最大优势莫过于直接路径导入,下面关闭FORCE LOGGING,并将数据库至于非归档模式下,检查数据泵导入效率。

导出操作:

bash-2.03$ expdp zhejiang/zhejiang directory=d_test dumpfile=zhejiang.dp


Export: Release10.2.0.3.0 - 64bit Production on星期一, 20 4月, 2009 0:51:13


Copyright (c) 2003, 2005, Oracle.  All rights reserved.


连接到: Oracle Database10gEnterprise Edition Release10.2.0.3.0 - 64bit Production


With the Partitioning, Real Application Clusters, OLAP and Data Mining options


启动"ZHEJIANG"."SYS_EXPORT_SCHEMA_01":  zhejiang/******** directory=d_test dumpfile=zhejiang.dp


正在使用BLOCKS方法进行估计...


处理对象类型SCHEMA_EXPORT/TABLE/TABLE_DATA


使用BLOCKS方法的总估计: 22.64 GB


处理对象类型SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA


处理对象类型SCHEMA_EXPORT/SYNONYM/SYNONYM


处理对象类型SCHEMA_EXPORT/TYPE/TYPE_SPEC


处理对象类型SCHEMA_EXPORT/DB_LINK


处理对象类型SCHEMA_EXPORT/SEQUENCE/SEQUENCE


处理对象类型SCHEMA_EXPORT/TABLE/TABLE


处理对象类型SCHEMA_EXPORT/TABLE/INDEX/INDEX


处理对象类型SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT


处理对象类型SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS


处理对象类型SCHEMA_EXPORT/TABLE/COMMENT


处理对象类型SCHEMA_EXPORT/PACKAGE/PACKAGE_SPEC


处理对象类型SCHEMA_EXPORT/FUNCTION/FUNCTION


处理对象类型SCHEMA_EXPORT/PROCEDURE/PROCEDURE


处理对象类型SCHEMA_EXPORT/PACKAGE/COMPILE_PACKAGE/PACKAGE_SPEC/ALTER_PACKAGE_SPEC


处理对象类型SCHEMA_EXPORT/FUNCTION/ALTER_FUNCTION


处理对象类型SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE


处理对象类型SCHEMA_EXPORT/PACKAGE/PACKAGE_BODY


处理对象类型SCHEMA_EXPORT/TYPE/TYPE_BODY


处理对象类型SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT


处理对象类型SCHEMA_EXPORT/TABLE/TRIGGER


处理对象类型SCHEMA_EXPORT/TABLE/INDEX/FUNCTIONAL_AND_BITMAP/INDEX


处理对象类型SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/FUNCTIONAL_AND_BITMAP/INDEX_STATISTICS


处理对象类型SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS


. .导出了"ZHEJIANG"."ORD_HIT_COMM"                   3.255 GB 4176146行


. .导出了"ZHEJIANG"."ORD_ORDER_ITEM"                 1.890 GB 3226647行


.


.


.


. .导出了"ZHEJIANG"."UNC_USER_NON"                       0 KB       0行


. .导出了"ZHEJIANG"."USR_USER_PLAT_ROLE"                 0 KB       0行


已成功加载/卸载了主表"ZHEJIANG"."SYS_EXPORT_SCHEMA_01"


******************************************************************************


ZHEJIANG.SYS_EXPORT_SCHEMA_01的转储文件集为:


 /data1/backup/zhejiang.dp


作业"ZHEJIANG"."SYS_EXPORT_SCHEMA_01"已于01:04:48成功完成


导出用时13分35秒。

下面删除浙江用户,重启数据库,并将数据库至于非归档模式,同时去掉数据库的FORCE LOGGING设置:

SQL> DROP USERZHEJIANGCASCADE;


用户已删除。


SQL> EXIT


从Oracle Database10gEnterprise Edition Release10.2.0.3.0 - 64bit Production


With the Partitioning, Real Application Clusters, OLAP and Data Mining options断开


bash-2.03$ srvctl stop db -d testrac


bash-2.03$ sqlplus "/ as sysdba"


SQL*Plus: Release10.2.0.3.0 - Production on星期一4月20 01:20:39 2009


Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.


已连接到空闲例程。


SQL> startup mount


ORACLE例程已经启动。


Total System Global Area 2147483648 bytes


Fixed Size                  2031480 bytes


Variable Size             469762184 bytes


Database Buffers         1660944384 bytes


Redo Buffers               14745600 bytes


数据库装载完毕。


SQL> alter database noarchivelog;


数据库已更改。


SQL> alter database no force logging;


数据库已更改。


SQL> alter database open;


数据库已更改。


创建浙江用户并授权:

SQL> create userzhejiangidentified byzhejiangdefault tablespacezhejiang;


用户已创建。


SQL> grant connect, resource tozhejiang;


授权成功。


SQL> grant create database link, create synonym, create view tozhejiang;


授权成功。


SQL> grant read, write on directory d_test tozhejiang;


授权成功。


执行导入操作:

bash-2.03$ impdp zhejiang/zhejiang DUMPFILE=zhejiang.dp DIRECTORY=d_test FULL=y LOGFILE=zhejiang.log


Import: Release10.2.0.3.0 - 64bit Production on星期一, 20 4月, 2009 1:40:01


Copyright (c) 2003, 2005, Oracle.  All rights reserved.


连接到: Oracle Database10gEnterprise Edition Release10.2.0.3.0 - 64bit Production


With the Partitioning, Real Application Clusters, OLAP and Data Mining options


已成功加载/卸载了主表"ZHEJIANG"."SYS_IMPORT_FULL_01"


启动"ZHEJIANG"."SYS_IMPORT_FULL_01":  zhejiang/******** DUMPFILE=zhejiang.dp DIRECTORY=d_test FULL=y LOGFILE=zhejiang.log


处理对象类型SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA


处理对象类型SCHEMA_EXPORT/SYNONYM/SYNONYM


处理对象类型SCHEMA_EXPORT/TYPE/TYPE_SPEC


处理对象类型SCHEMA_EXPORT/DB_LINK


处理对象类型SCHEMA_EXPORT/SEQUENCE/SEQUENCE


处理对象类型SCHEMA_EXPORT/TABLE/TABLE


处理对象类型SCHEMA_EXPORT/TABLE/TABLE_DATA


. .导入了"ZHEJIANG"."ORD_HIT_COMM"                   3.255 GB 4176146行


. .导入了"ZHEJIANG"."ORD_ORDER_ITEM"                 1.890 GB 3226647行


.


.


.


. .导入了"ZHEJIANG"."UNC_USER_NON"                       0 KB       0行


. .导入了"ZHEJIANG"."USR_USER_PLAT_ROLE"                 0 KB       0行


处理对象类型SCHEMA_EXPORT/TABLE/INDEX/INDEX


处理对象类型SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT


处理对象类型SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS


处理对象类型SCHEMA_EXPORT/TABLE/COMMENT


处理对象类型SCHEMA_EXPORT/PACKAGE/PACKAGE_SPEC


处理对象类型SCHEMA_EXPORT/FUNCTION/FUNCTION


处理对象类型SCHEMA_EXPORT/PROCEDURE/PROCEDURE


处理对象类型SCHEMA_EXPORT/PACKAGE/COMPILE_PACKAGE/PACKAGE_SPEC/ALTER_PACKAGE_SPEC


处理对象类型SCHEMA_EXPORT/FUNCTION/ALTER_FUNCTION


处理对象类型SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE


处理对象类型SCHEMA_EXPORT/TYPE/TYPE_BODY


处理对象类型SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT


处理对象类型SCHEMA_EXPORT/TABLE/TRIGGER


处理对象类型SCHEMA_EXPORT/TABLE/INDEX/FUNCTIONAL_AND_BITMAP/INDEX


处理对象类型SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/FUNCTIONAL_AND_BITMAP/INDEX_STATISTICS


处理对象类型SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS


作业"ZHEJIANG"."SYS_IMPORT_FULL_01"已经完成,但是有34个错误(于04:02:13完成)


导入用时2小时22分12秒。可以看到,这次根本没有使用任何的并行设置,就将导入时间缩短了46分钟。

这说明数据泵导入与传统导入相比,最大的性能优势在于可以利用直接路径的方式进行导入。如果要进行大批量的数据泵导入,可以考虑先将数据库置于NOARCHIVELOG模式,等到导入结束后,再修改为ARCHIVELOG模式。


oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html