设为首页 收藏本站
查看: 579|回复: 0

[经验分享] Oracle常用导出导出命令及性能效率对比

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-9-14 10:22:07 | 显示全部楼层 |阅读模式
说明
Oracle导入导出命令主要有EXPDP和IMPDP、EXP和IMP,区别如下:EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。IMP只适用于EXP导出的文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出的文件,而不适用于EXP导出文件。expdp或impdp命令时,可暂不指出用户名/密码@实例名as 身份,然后根据提示再输入,如:expdp schemas=scott dumpfile=test.dmp DIRECTORY=testdata; 两个命令都直接在CMD命令中执行。

一 、EXPDP和IMPDP命令
1.1、创建逻辑目录,该命令不会在操作系统创建真正的目录,最好以system等管理员创建。
create directory testdata  as 'd:\test\dump';

查看管理理员目录(同时查看操作系统是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错)
select * from dba_directories;

给scott用户赋予在指定目录的操作权限,最好以system等管理员赋予。
grant read,write on directory testdata to scott;

1.2、导出数据
1)按用户导
expdp scott/tiger@orcl schemas=scott dumpfile=test.dmp DIRECTORY=testdata ;
2)并行进程parallel
expdp scott/tiger@orcl directory=testdata  dumpfile=test.dmp parallel=40 job_name=testjob
3)按表名导
expdp scott/tiger@orcl TABLES=emp,dept dumpfile=test.dmp DIRECTORY=testdata ;
4)按查询条件导
expdp scott/tiger@orcl directory=testdata dumpfile=test.dmp Tables=emp query='WHERE deptno=20';
5)按表空间导
expdp system/manager DIRECTORY=testdata DUMPFILE=test.dmp TABLESPACES=temp,example;
6)导整个数据库
expdp system/manager DIRECTORY=testdata DUMPFILE=full.dmp FULL=y;

1.3、导入数据
1)导到指定用户下
impdp scott/tiger DIRECTORY=testdata DUMPFILE=test.dmp SCHEMAS=scott;
2)改变表的owner
impdp system/manager DIRECTORY=testdata DUMPFILE=test.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system;
3)导入表空间
impdp system/manager DIRECTORY=testdata DUMPFILE=test.dmp TABLESPACES=example;
4)导入数据库
impdb system/manager DIRECTORY=testdata DUMPFILE=full.dmp FULL=y;
5)追加数据
impdp system/manager DIRECTORY=testdata DUMPFILE=test.dmp SCHEMAS=system TABLE_EXISTS_ACTION

二、EXP和IMP命令
2.1、EXP命令
有三种主要的方式(完全、用户、表)   
1、完全:     
EXP SYSTEM/MANAGER BUFFER=64000 file=D:\all.dmp log=D:\all.log FULL=Y     
如果要执行完全导出,必须具有特殊的权限

2、用户模式:     
EXP test/test BUFFER=64000 FILE=D:\test.DMP log=D:\test.log OWNER=test
这样用户test的所有对象被输出到文件中。

3、表模式:   
EXP test/test    BUFFER=64000 FILE=D:\test.DMP log=D:\test.log OWNER=test TABLES=(test)    这样用户test的表test就被导出

2.2、IMP命令   
具有三种模式(完全、用户、表)     
1、完全:     
IMP SYSTEM/MANAGER BUFFER=64000 FILE=D:\FULL.DMP log=D:\impfull.log FULL=Y

2、用户模式:   
IMP test/test    BUFFER=64000 FILE=D:\test.DMP log=D:\imptest.log FROMUSER=test TOUSER=test     
这样用户test的所有对象被导入到文件中。必须指定FROMUSER、TOUSER参数,这样才能导入数据。

3、表模式:   
EXP test/test    BUFFER=64000 FILE=D:\test.DMP log=D:\imptest.log OWNER=test TABLES=(test)     
这样用户test的表test就被导入。

2.3  关于参数ignore=y
如果用了参数ignore=y, 会把exp文件内的数据内容导入;如果表有唯一关键字的约束条件, 不合条件将不被导入;如果表没有唯一关键字的约束条件, 将引起记录重复
解释:
当要导入数据库中已经存在了某个表(test),如果该表没有唯一性约束,那么在导入时加参数ignore=y,则会把数据完全导入到表中,而且不报错。   
当表已经存在了唯一性约束,特别是主键的约束,那么在导入时,只导入主键中不存在的记录. 导入过程中会有警告.   
利用这个原则可以做一个增量导入.
三、性能效率对比(直接引用别人的文章)
3.1 导出性能对比
EXP常规模式、EXP直接路径模式和EXPDP三种方式导出的性能对比
1) 首先是EXP的常规路径导出:
exp zhejiang/zhejiang file=/data1/zj_regular.dmp buffer=20480000
常规EXP导出方式执行了1小时24分钟。

2) 直接路径导出方式:
exp zhejiang/zhejiang file=/data1/zj_direct.dmp buffer=20480000
recordlength=65535 direct=y
直接路径导入用时18分钟,比常规路径导出速度有一个明显的提高。

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

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

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

测试中发现IMPDP的导入速度和IMP导入速度相差无几。而Oracle在介绍数据泵的时候,提到IMPDP的导入速度最高是IMP的10倍。不过好在IMPDP还是可以优化调整的,那就是通过设置PARALLEL来提高IMPDP的并行度。
首先还是看一下CPU的数量:
SQL> show parameter cpu
由于数据库服务器的CPU个数为2,下面尝试设置PARALLEL为2来进行导入
impdp zhejiang/zhejiang DUMPFILE=zj_datapump.dp DIRECTORY=d_test FULL=y LOGFILE=zj_datapump.log parallel=2
采用并行度为2的导入方式,发现速度果然提高了很多。并行度为1的导入速度是3小时8分钟,而现在用了不到2个半小时。
由于并行度设置不应该超过CPU数的2倍,因此尝试平行度3和4的导入,导入时间和并行度2十分接近。看来已经无法再使用通过提高并行度的方法来提高性能了。
1) 先看直接导出的性能:
$ expdp zhejiang/zhejiang directory=d_test dumpfile=zhejiang.dp
整个导出操作大概用了14分半,

2) 尝试使用并行度2进行导出,这时仍然设置一个导出的数据文件:
$ expdp zhejiang/zhejiang directory=d_test dumpfile=zhejiang_p2_1file.dp parallel=2
整个导入过程不到14分钟,不过这个性能的提升实在不是很明显。不过这是有原因的,由于设置了并行度,两个进程在同时执行导出操作,但是二者要将导出的数据写入同一个数据文件中,因此必然会导致资源的争用

3) 仍然使用并行度2,但是同时设置两个数据文件再次检查导出性能:
$ expdp zhejiang/zhejiang directory=d_test dumpfile=zhejiang_p2_2file1.dp,zhejiang_p2_2file2.dp parallel=2
这次导出仅仅用了10分半,导出的效率大大的提高。

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


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-272125-1-1.html 上篇帖子: oracle 发邮件 存储过程 下篇帖子: 出来站到 Oracle
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表