查看: 19362|回复: 58

[笔记] 一次IMP大表的加速导入过程

[复制链接]
招聘 : 系统分析师
论坛徽章:
483
马上有钱
日期:2014-02-19 11:55:14itpub13周年纪念徽章
日期:2014-09-29 01:14:14itpub13周年纪念徽章
日期:2014-10-08 15:15:25itpub13周年纪念徽章
日期:2014-10-08 15:15:25马上有对象
日期:2014-10-12 11:58:40马上有车
日期:2014-11-16 17:11:29慢羊羊
日期:2015-02-09 17:04:38沸羊羊
日期:2015-03-04 14:43:432015年新春福章
日期:2015-03-06 11:57:31ITPUB年度最佳版主
日期:2015-03-18 15:48:48
发表于 2009-3-14 17:58 | 显示全部楼层 |阅读模式
一张大表,导出的dmp文件达300多G
光copy数据文件到PC Server上就花了12个小时(100M网络)

目标是将这些数据文件中的数据导入到小型机上的数据库中
头天晚上正式开始导入,由于PC Server和小型机之间走了一堆乱七八糟的设备才通的
结果16个小时导入了1.6G,一小时100M,太慢了,一个数据文件都没导入完

受不了,重来,truncate table,同时将数据库设置到noarchivelog模式
PC Server直接接到小型机所在局域网
网卡立马显示1G,咔咔
开始重新导入,导入进去1G的数据,耗时17分钟,按20分钟算
一小时3G,300多G的文件至少需要100小时,就是4天还多的时间

数据文件有十来个,数据库为10G,目标表空间又是本地自动管理的
俺不免产生了并行导入的办法,咨询了老杨,可行
检查了一下网络利用率,天,1%都不到
太浪费这1G的网速了
于是开了仨进程,buffer开到512M
再同时ftp到俩小型机上(Oracle做的RAC)
将较大的几个数据文件分别传上去
然后每个小机各开两个进程导入dmp文件,buffer一样是开到512M
后台开启一个job,检测数据的导入情况
发现速度最高的时候,1小时竟然导入了20多G的数据,哈哈

第二天一看,差不多24小时的时间,完成了300多G数据的导入
再次感谢老杨



后记:
导入采用了commit=y参数
看了http://www.itpub.net/viewthread.php?tid=699653&highlight=imp 才知道
原来这是效率非常低的一种做法
不过想了一下,高峰时期7个进程同时导入数据,我那64G的UNDO表空间很可能不够
再说,要是用这种方式,就没法监测导入进度了


ps:途中问题处理
1、在导入期间出过一次问题,就是笔记本IP与PC Server冲突,结果直接导致数据文件导入进程失败
而且无法回退(因为加了commit=y参数),只好truncate再重来
2、ftp的时候没注意到默认是按ascii方式传输的,命令行的ftp不熟悉呀,结果在小机上导入的时候发现
导入了60条数据后失败鸟,才60条,这好处理。我重新传数据文件,然后新建一个test用户,将该数据文件
中的数据导入test用户下,大约导入几千条记录后中断imp进程。然后用delete从表中删除id与test用户下同名表中
id相重的记录,正好60条   commit,ok
论坛徽章:
11
会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB元老
日期:2008-09-01 13:12:41祖国60周年纪念徽章
日期:2009-10-09 08:28:002010新春纪念徽章
日期:2010-03-01 11:07:22蛋疼蛋
日期:2012-04-19 23:12:39
发表于 2009-3-14 20:04 | 显示全部楼层

使用道具 举报

回复
论坛徽章:
2
数据库板块每日发贴之星
日期:2009-03-12 01:01:03数据库板块每日发贴之星
日期:2009-03-14 01:01:02
发表于 2009-3-14 20:42 | 显示全部楼层
嘿嘿,谢谢分享

使用道具 举报

回复
论坛徽章:
184
BLOG每周发帖之星
日期:2011-05-22 01:35:42BLOG每周发帖之星
日期:2011-05-29 01:35:49BLOG每周发帖之星
日期:2011-06-05 01:35:36BLOG每周发帖之星
日期:2011-06-12 01:35:49BLOG每周发帖之星
日期:2011-06-19 01:35:29BLOG每周发帖之星
日期:2011-06-26 01:35:45BLOG每日发帖之星
日期:2011-05-15 01:01:01BLOG每日发帖之星
日期:2011-05-06 01:01:01BLOG每日发帖之星
日期:2011-05-18 01:01:01BLOG每日发帖之星
日期:2011-05-07 01:01:02
发表于 2009-3-14 21:50 | 显示全部楼层
大数据量的好参考

使用道具 举报

回复
论坛徽章:
311
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
发表于 2009-3-14 23:46 | 显示全部楼层
你说的数据文件,应该是各个子DMP文件吧,300G太大,化为10个30G的。

使用道具 举报

回复
论坛徽章:
55
马上加薪
日期:2014-02-19 11:55:142010广州亚运会纪念徽章:排球
日期:2011-04-27 13:27:19SQL大赛参与纪念
日期:2011-04-13 12:08:172011新春纪念徽章
日期:2011-02-18 11:43:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:01生肖徽章2007版:兔
日期:2011-01-20 12:58:49
发表于 2009-3-14 23:53 | 显示全部楼层
看来commit=y确实影响不小

使用道具 举报

回复
论坛徽章:
311
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
发表于 2009-3-15 00:13 | 显示全部楼层
文件散开来导入,我以前也想过,只是担心文件不连接着导入会有问题,没真正测试。要早知道可行,
也不用熬一个晚上来挨个导数据了。

使用道具 举报

回复
论坛徽章:
311
行业板块每日发贴之星
日期:2012-07-12 18:47:29双黄蛋
日期:2011-08-12 17:31:04咸鸭蛋
日期:2011-08-18 15:13:51迷宫蛋
日期:2011-08-18 16:58:25紫蛋头
日期:2011-08-31 10:57:28ITPUB十周年纪念徽章
日期:2011-09-27 16:30:47蜘蛛蛋
日期:2011-10-20 15:51:25迷宫蛋
日期:2011-10-29 11:12:59ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41鲜花蛋
日期:2011-11-09 20:33:30
发表于 2009-3-15 00:20 | 显示全部楼层
原帖由 xsmdel 于 2009-3-14 23:53 发表
看来commit=y确实影响不小


话是这么说,但也得自己测试后才能知道大小。

使用道具 举报

回复
论坛徽章:
55
马上加薪
日期:2014-02-19 11:55:142010广州亚运会纪念徽章:排球
日期:2011-04-27 13:27:19SQL大赛参与纪念
日期:2011-04-13 12:08:172011新春纪念徽章
日期:2011-02-18 11:43:332011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:41:01生肖徽章2007版:兔
日期:2011-01-20 12:58:49
发表于 2009-3-15 00:31 | 显示全部楼层
原帖由 ZALBB 于 2009-3-15 00:13 发表
文件散开来导入,我以前也想过,只是担心文件不连接着导入会有问题,没真正测试。要早知道可行,
也不用熬一个晚上来挨个导数据了。


这个我还真没有测试过,以前做个也不过几百M,感觉是有点慢,但业务系统没有要求,时间也不长。

使用道具 举报

回复
招聘 : 系统分析师
论坛徽章:
483
马上有钱
日期:2014-02-19 11:55:14itpub13周年纪念徽章
日期:2014-09-29 01:14:14itpub13周年纪念徽章
日期:2014-10-08 15:15:25itpub13周年纪念徽章
日期:2014-10-08 15:15:25马上有对象
日期:2014-10-12 11:58:40马上有车
日期:2014-11-16 17:11:29慢羊羊
日期:2015-02-09 17:04:38沸羊羊
日期:2015-03-04 14:43:432015年新春福章
日期:2015-03-06 11:57:31ITPUB年度最佳版主
日期:2015-03-18 15:48:48
 楼主| 发表于 2009-3-15 17:06 | 显示全部楼层
原帖由 ZALBB 于 09-3-14 23:46 发表
你说的数据文件,应该是各个子DMP文件吧,300G太大,化为10个30G的。


福哥,这里我想到了,不过上面忘记交待了
这点非常关键

对方提供的dmp文件是用exp导出的
而且我推测他们是用加了query参数的方式导出的
所以单独的十来个数据文件,可以分别加载






如果是采用
exp u/p@tns tables=xxx  filesize=1G file=f1,f2,f3,f4.....
的方式导出
则导入的时候也需要用类似的语法,即
imp u1/p1@tns1 file=f1,f2,f3,f4.....

如果单独指定file=f2,则imp会抛出错误
说需要序号为1的文件,但你却给的是2

如果单独指定file=f1,则imp不会出错
但会在f1导入完成后,提示你加载f2,etc

在这种情况下,就必须依次导入数据文件了

使用道具 举报

回复

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

本版积分规则 发表回复

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