查看: 10584|回复: 22

怎样优化exp、imp的速度?

[复制链接]
认证徽章
论坛徽章:
8
奥运会纪念徽章:排球
日期:2008-10-24 13:30:01生肖徽章2007版:龙
日期:2009-11-18 16:08:48ITPUB9周年纪念徽章
日期:2010-10-08 09:31:222011新春纪念徽章
日期:2011-02-18 11:43:33凯迪拉克
日期:2013-12-02 15:23:24优秀写手
日期:2013-12-18 09:29:15大众
日期:2014-01-02 15:14:20雪佛兰
日期:2014-01-06 13:14:03
发表于 2010-1-11 15:59 | 显示全部楼层 |阅读模式
我们有一个数据大概是30G的数据库要迁移,想通过exp、imp来实现,但是做普通的导出要2个多小时,太慢了,有没有什么好的办法能提高导入倒出的速度。
我在网上查了下面的方法,但效果不是很明显,请各位帮忙想想办法,谢谢!


1 Exp调优

  1.1 使用DIRECT和RECORDLENGTH选项

  DIRECT参数定义了导出是使用直接路径方式(DIRECT=Y),还是常规路径方式(DIRECT=N)。常规路径导出使用SQL SELECT语句从表中抽取数据,直接路径导出则是将数据直接从磁盘读到PGA再原样写入导出文件,从而避免了SQL命令处理层的数据转换过程,大大提高了导出效率。在数据量大的情况下,直接路径导出的效率优势更为明显,可比常规方法速度提高三倍之多。

  和DIRECT=Y配合使用的是RECORDLENGTH参数,它定义了Export I/O缓冲的大小,作用类似于常规路径导出使用的BUFFER参数。建议设置RECORDLENGTH参数为最大I/O缓冲,即65535(64kb)。其用法如下:

         exp userid=system/manager full=y direct=y recordlength=65535 file=exp_full.dmp log=exp_full.log
  直接路径导出根据Oracle版本不同,有一些使用限制。比较重要的限制有,8i及以下版本不支持导出客户端和数据库的字符集转换,因此导出前必须保证NLS_LANG设置正确;8.1.5及以下版本不支持导出含LOBs对象的表;不能使用QUERY参数等。

  1.2 使用管道技术

  管道是从一个程序进程向另一个程序进程单向传送信息的技术。通常,管道把一个进程的输出传给另一进程作为输入。如果导出的数据量很大,可以利用管道直接生成最终的压缩文件,所耗费的时间和不压缩直接导出的时间相当。这样一来,不仅能够解决磁盘空间不足的问题,而且省去了单独压缩文件的时间;如果需要传输导出文件,还可以减少网络传输的时间。比如,一个10G的文件单独压缩可能需要半小时以上的时间。虽然管道技术不能够直接缩短Exp/Imp本身的时间,但节省出来的压缩时间非常可观。管道和Exp结合的具体使用方法如下:

  导出数据示例:

        % mknod /tmp/exp_pipe p # Make the pipe
  % compress < /tmp/exp_pipe > export.dmp.Z & # Background compress

  % exp file=/tmp/exp_pipe # Export to the pipe

  2 Imp调优

  Oracle Import进程需要花比Export进程数倍的时间将数据导入数据库。某些关键时刻,导入是为了应对数据库的紧急故障恢复。为了减少宕机时间,加快导入速度显得至关重要。没有特效办法加速一个大数据量的导入,但我们可以做一些适当的设定以减少整个导入时间。

  2.1 使用管道技术

  前面已经说明了Exp时如何使用管道,在导入时管道的作用是相同,不仅能够解决磁盘空间不足的问题,而且省去了单独解压缩文件的时间。在大数据量导入导出的时候,推荐一定要使用管道。

  导入数据示例:

2.2 避免I/O竞争

  Import是一个I/O密集的操作,避免I/O竞争可以加快导入速度。如果可能,不要在系统高峰的时间导入数据,不要在导入数据时运行job等可能竞争系统资源的操作。

  2.3 增加排序区

  Oracle Import进程先导入数据再创建索引,不论INDEXES值设为YES或者NO,主键的索引是一定会创建的。创建索引的时候需要用到排序区,在内存大小不足的时候,使用临时表空间进行磁盘排序,由于磁盘排序效率和内存排序效率相差好几个数量级。增加排序区可以大大提高创建索引的效率,从而加快导入速度。

  8i及其以下版本:导入数据前增加数据库的sort_area_size大小,可设为正常值的5-10倍。但这个值设定会影响到所有会话,设的过高有可能导致内存不足出现paging, swapping现象。更为稳妥的方法是,对于大表和索引特别多的表,只导数据不导索引。导完数据后,创建一个会话,设定当前会话的 sort_area_size一个足够大的值,再手工创建索引。

  9i:在workarea_size_policy=AUTO的情况下,所有会话的UGA共用pga_aggregate_target定义的内存,不必单独设定sort_area_size。导入数据前增加pga_aggregate_target大小,如果机器内存够大,可从通常设定的 500M提高到1-2G。pga_aggregate_target大小可以动态调整,导入完成后可在线调回原值。

  2.4 调整BUFFER选项

  Imp参数BUFFER定义了每一次读取导出文件的数据量,设的越大,就越减少Import进程读取数据的次数,从而提高导入效率。BUFFER的大小取决于系统应用、数据库规模,通常来说,设为百兆就足够了。其用法如下:

         imp user2/pwd fromuser=user1 touser=user2 file=/tmp/imp_db_pipe1 commit=y feedback=10000 buffer=10240000
  2.5 使用COMMIT=Y选项

  COMMIT=Y表示每个数据缓冲满了之后提交一次,而不是导完一张表提交一次。这样会大大减少对系统回滚段等资源的消耗,对顺利完成导入是有益的。

  2.6 使用INDEXES=N选项

  前面谈到增加排序区时,说明Imp进程会先导入数据再创建索引。导入过程中建立用户定义的索引,特别是表上有多个索引或者数据表特别庞大时,需要耗费大量时间。某些情况下,需要以最快的时间导入数据,而索引允许后建,我们就可以使用INDEXES=N 只导入数据不创建索引,从而加快导入速度。

  我们可以用INDEXFILE选项生成创建索引的DLL脚本,再手工创建索引。我们也可以用如下的方法导入两次,第一次导入数据,第二次导入索引。其用法如下:

         imp user2/pwd fromuser=user1 touser=user2 file=/tmp/imp_db_pipe1 commit=y feedback=10000 buffer=10240000 ignore=y rows=y indexes=n
  imp user2/pwd fromuser=user1 touser=user2 file=/tmp/imp_index_pipe1 commit=y feedback=10000 buffer=10240000 ignore=y rows=n indexes=y

  2.7 增加LARGE_POOL_SIZE

  如果在init.ora中配置了MTS_SERVICE,MTS_DISPATCHERS等参数,tnsnames.ora中又没有 (SERVER=DEDICATED)的配置,那么数据库就使用了共享服务器模式。在MTS模式下,Exp/Imp操作会用到LARGE_POOL,建议调整LARGE_POOL_SIZE到150M。

  检查数据库是否在MTS模式下:
认证徽章
论坛徽章:
8
奥运会纪念徽章:排球
日期:2008-10-24 13:30:01生肖徽章2007版:龙
日期:2009-11-18 16:08:48ITPUB9周年纪念徽章
日期:2010-10-08 09:31:222011新春纪念徽章
日期:2011-02-18 11:43:33凯迪拉克
日期:2013-12-02 15:23:24优秀写手
日期:2013-12-18 09:29:15大众
日期:2014-01-02 15:14:20雪佛兰
日期:2014-01-06 13:14:03
发表于 2010-1-11 16:00 | 显示全部楼层
数据库是oracle10g,操作系统是IBM的AIX

使用道具 举报

回复
招聘 : 系统架构师
认证徽章
论坛徽章:
369
秀才
日期:2015-08-10 09:03:20巨蟹座
日期:2015-09-09 14:25:25巨蟹座
日期:2015-09-10 09:03:46秀才
日期:2015-09-11 10:43:06摩羯座
日期:2015-09-20 17:10:27秀才
日期:2015-09-21 09:46:16秀才
日期:2015-09-21 11:16:42秀才
日期:2015-10-08 17:57:58天枰座
日期:2015-10-28 18:28:29秀才
日期:2015-09-06 10:42:32
发表于 2010-1-11 16:12 | 显示全部楼层
why not datapump?

使用道具 举报

回复
招聘 : 系统架构师
认证徽章
论坛徽章:
369
秀才
日期:2015-08-10 09:03:20巨蟹座
日期:2015-09-09 14:25:25巨蟹座
日期:2015-09-10 09:03:46秀才
日期:2015-09-11 10:43:06摩羯座
日期:2015-09-20 17:10:27秀才
日期:2015-09-21 09:46:16秀才
日期:2015-09-21 11:16:42秀才
日期:2015-10-08 17:57:58天枰座
日期:2015-10-28 18:28:29秀才
日期:2015-09-06 10:42:32
发表于 2010-1-11 16:13 | 显示全部楼层
transport tablespace

使用道具 举报

回复
认证徽章
论坛徽章:
17
ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51ITPUB14周年纪念章
日期:2015-10-26 17:23:44itpub13周年纪念徽章
日期:2014-10-08 15:17:53itpub13周年纪念徽章
日期:2014-10-08 15:17:53itpub13周年纪念徽章
日期:2014-10-08 15:17:53itpub13周年纪念徽章
日期:2014-10-08 15:17:532013年新春福章
日期:2013-04-08 17:42:48ITPUB 11周年纪念徽章
日期:2012-10-09 18:03:32奥运会纪念徽章:皮划艇激流回旋
日期:2012-09-18 11:19:40奥运会纪念徽章:花样游泳
日期:2012-08-22 18:26:54
发表于 2010-1-11 17:52 | 显示全部楼层
在写个优化expdp impdp的文章更好

使用道具 举报

回复
论坛徽章:
1
2013年新春福章
日期:2013-02-25 14:51:24
发表于 2012-10-3 14:05 | 显示全部楼层
本帖最后由 gpgp2010 于 2012-10-3 14:05 编辑

30GB 2个小时有点慢,我记得我导出70多GB 的表,buffer 设置为200M,导出来也没那没慢吧

使用道具 举报

回复
认证徽章
论坛徽章:
67
现任管理团队成员
日期:2012-06-02 02:10:00ITPUB元老
日期:2012-09-12 14:06:14ITPUB社区千里马徽章
日期:2013-06-09 10:15:34季节之章:冬
日期:2012-09-04 11:05:30季节之章:春
日期:2012-09-05 09:20:36优秀写手
日期:2013-12-18 09:29:09马上有房
日期:2014-04-10 13:35:362014年新春福章
日期:2014-04-14 09:54:08马上有车
日期:2014-02-28 16:43:13马上加薪
日期:2014-02-19 11:55:14
发表于 2012-10-3 15:25 | 显示全部楼层
为什么不考虑 expdp/impdp

使用道具 举报

回复
招聘 : 系统架构师
认证徽章
论坛徽章:
369
秀才
日期:2015-08-10 09:03:20巨蟹座
日期:2015-09-09 14:25:25巨蟹座
日期:2015-09-10 09:03:46秀才
日期:2015-09-11 10:43:06摩羯座
日期:2015-09-20 17:10:27秀才
日期:2015-09-21 09:46:16秀才
日期:2015-09-21 11:16:42秀才
日期:2015-10-08 17:57:58天枰座
日期:2015-10-28 18:28:29秀才
日期:2015-09-06 10:42:32
发表于 2012-10-3 16:20 | 显示全部楼层
还有最好把db_cache_size放大点,如果你非要用exp/imp

使用道具 举报

回复
论坛徽章:
24
数据库板块每日发贴之星
日期:2006-11-05 01:02:00祖国60周年纪念徽章
日期:2009-10-09 08:28:00祖国60周年纪念徽章
日期:2009-10-09 21:00:44ITPUB8周年纪念徽章
日期:2009-10-09 21:31:082010新春纪念徽章
日期:2010-01-04 08:33:082010新春纪念徽章
日期:2010-03-01 11:04:54ITPUB9周年纪念徽章
日期:2010-10-08 09:31:222011新春纪念徽章
日期:2011-02-18 11:42:472012新春纪念徽章
日期:2012-01-04 11:50:44ITPUB 11周年纪念徽章
日期:2012-10-09 18:06:20
发表于 2012-10-3 22:10 | 显示全部楼层
管道也有缺陷,中断就要重来

使用道具 举报

回复
论坛徽章:
0
发表于 2012-10-4 13:47 | 显示全部楼层
2小时正常,要是有LOB字段的大表,exp imp时间更长 还是用数据泵吧 开并发省很多时间

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,7折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时七折期:2019年8月31日前


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

大会官网>>
TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表