挑战极限,怎样将3000W数据倒到ORACLE里去
3000W条文本数据,而且还要对数据做一定简单的规则变换
我现在试着用VB写了个导入程序,算了一下要倒12天,狂FT!
问题点数:100、回复次数:10Top
1 楼solidpanther(╃╄╃我爱机器猫╄╃╄)回复于 2004-09-01 20:28:50 得分 10
尽量用insert /*+append*/ into tablename nologging (fld1,fld2...) select ....
语句,这样会很快,因为不走回滚段,不记录日志,
还有将数据库设置为非归档模式会快一些.
oracle导入文本的语句没见过,但是sqlserver的可以,建议用tsql先将规范化的文本导入到sqlserver中,然后再在oracle中建立sqlserver的透明网关,然后建立dblink for sqlserver,然后用plsql将sqlserver的数据导入进oracle中,导入两亿的关系数据需要2个小时就行,不要用sqlserver的dts工具
有关sqlserver怎么导入文本文件,请参阅:
http://community.csdn.net/Expert/topic/3325/3325653.xml?temp=.2895166Top
2 楼solidpanther(╃╄╃我爱机器猫╄╃╄)回复于 2004-09-01 20:47:26 得分 20
还有优化的地方:先将索引都去掉,如果是分区表的话就没办法了,并且在导入的时候最好用分段的方法,或者是用游标(迫不得已),因为想一次提交是不现实的,
利用循环能记录下来导到哪个阶段了,这样可以避免全部都白导的情况,
导失败了可一继续导,Top
3 楼trytoremember(忘了你 便忘了自己)回复于 2004-09-01 21:47:26 得分 0
“plsql将sqlserver的数据导入进oracle中”?plsql developer??
SQL SERVER估计没法用,因为数据库的管理权不在我这里
我主要的目标有三个
1是想处理速度尽可能快,3-5天内能倒完
2是想自动化程度尽量高些,因为以后经常要倒,而且估计以后这个量还会进一步扩大
3是还得考虑回退,3000w里回退个2-3百万估计会经常遇到。
Top
4 楼solidpanther(╃╄╃我爱机器猫╄╃╄)回复于 2004-09-01 22:14:49 得分 10
你跟踪一下,看慢在了哪里?然后总结一下发过来,大家帮你解决Top
5 楼trytoremember(忘了你 便忘了自己)回复于 2004-09-01 23:16:19 得分 0
慢就慢在VB的ADO调用ADDNew方法插入数据时,我测算了一下每秒钟大概只有50条左右
我估计如果是ODBC接口的程序都会有这个毛病Top
6 楼drabit(square)回复于 2004-09-01 23:28:51 得分 10
先用vb将文件“做一定简单的规则变换”之后生成另外一个格式化的文本文件,然后用sqlloader导入。
重新导入比回退2-3百万要快
Top
7 楼KingSunSha(弱水三千)回复于 2004-09-02 02:59:11 得分 20
我们的系统都要做这样的操作,用sqlloader无疑是最快的。
倒入150M纪录的文本文件,用sqlloader导入,导入前去掉index,用24个进程并行操作,耗时15分钟,重建index耗时20分钟。
重建文本文件最快的是用perl,用vb太慢了Top
8 楼freddy2003()回复于 2004-09-02 08:14:57 得分 10
用sqlloaderTop
9 楼zmgowin(hermit)回复于 2004-09-02 08:33:27 得分 10
sqlldr,用direct方式导入,一分钟导入几百兆的文件都是可能的Top
10 楼zwj0712(阿张)回复于 2004-09-02 08:35:42 得分 10
看看DTS啊,SQL SERVER的导入导出工具!!!可以是图形化的操作!!!转换什么都可以!!!Top




