Oracle数据库sqlload用法的相关知识是本文我们主要要介绍的内容,那么什么是sqlload呢?看完下面的例子我们就知道了。当用Oracle数据库处理百万级别数据时,选择sqlload应该是比较好的方案。下面是自学sqlload的例子,供初学者参考。
1、在哪儿运行sqlload?
首先,电脑上至少装有oracle客户端程序,在这里就可以执行sqlload,运行-->cmd--->sqlldr。里面有很多注释可以自己参考。
2、控制文件
写sqlload需要的控制文件.ctl或者.cvs格式。
control.ctl内容:
- LOAD?DATA ?
- INFILE?'f:\TL_FUND_MMS_BATCH.txt' ?
- BADFILE?'f:\BAD_TL_FUND_MMS_BATCH1.dat' ?
- APPEND ?
- INTO?TABLE?tl_fund_mms_batch ?
- Fields?terminated?by?","? ?
- Optionally?enclosed?by?'"' ?
- trailing?nullcols? ?
- (? ?
- ?NUMBATCHSEQID?, ?
- ?VC2BATCHNAME, ?
- ?VC2RESOURCEID, ?
- ?NUMCOUNTTOTAL?, ?
- ?NUMCOUNTSUCS, ?
- ?NUMCOUNTLONG?, ?
- ?NUMCOUNTFAILD?, ?
- ?VC2BILLPATH, ?
- ?NUMCREATEUSERID?, ?
- ?NUMSENDUSERID?,? ?
- ?NUMDEALFLAG, ?
- ?DATCREATETIME?DATE?"YYYY-MM-DD?HH24:MI:SS", ?
- ?DATSENDTIME?DATE?"YYYY-MM-DD?HH24:MI:SS" ?
- )?
3、数据文件
- TL_FUND_MMS_BATCH.txt内容:103,"肖测试",?"0111022109240241310006",?1,?1,?0,?0, ?
- ?"../webapps/billFiles\data(2).xml",?900000,?900000,?2,2011-4-28?15:50:26,2011-4-28?15:50:26?
4、执行命令
我把所有文件都放到了F盘:
执行命令:sqlldr [email protected] f:\control.ctl log=f:\log.log
5、查看日志
如果执行完命令,在指定的目录下就会生成日志信息,如果执行过程中有错误,就会在相应的目录下生成坏数据文件,有错误的时候也会打印这句话:达到提交点 - 逻辑记录计数 1。不要认为打印了这句就认为执行成功了。
log.log内容:
- SQL*Loader:?Release?10.2.0.1.0?-?Production?on?星期四?5月?12?17:01:38?2011 ?
- Copyright?(c)?1982,?2005,?Oracle.??All?rights?reserved. ?
- 控制文件:??????f:\control.ctl ?
- 数据文件:??????f:\TL_FUND_MMS_BATCH.txt ?
- 错误文件:????f:\BAD_TL_FUND_MMS_BATCH1.dat ?
- 废弃文件:????未作指定 ?
- (可废弃所有记录) ?
- 要加载的数:?ALL ?
- 要跳过的数:?0 ?
- 允许的错误:?50 ?
- 绑定数组:?64?行,?最大?256000?字节 ?
- 继续:????未作指定 ?
- 所用路径:???????常规 ?
- 表?TL_FUND_MMS_BATCH,已加载从每个逻辑记录 ?
- 插入选项对此表?APPEND?生效 ?
- TRAILING?NULLCOLS?选项生效 ?
- ???列名????????????????????????位置??????长度??中止?包装数据类型 ?
- ------------------------------?----------?-----?----?------------------------- ?
- NUMBATCHSEQID???????????????????????FIRST?????*???,??O?(")?CHARACTER???????????? ?
- VC2BATCHNAME?????????????????????????NEXT?????*???,??O?(")?CHARACTER???????????? ?
- VC2RESOURCEID????????????????????????NEXT?????*???,??O?(")?CHARACTER???????????? ?
- NUMCOUNTTOTAL????????????????????????NEXT?????*???,??O?(")?CHARACTER???????????? ?
- NUMCOUNTSUCS?????????????????????????NEXT?????*???,??O?(")?CHARACTER???????????? ?
- NUMCOUNTLONG?????????????????????????NEXT?????*???,??O?(")?CHARACTER???????????? ?
- NUMCOUNTFAILD????????????????????????NEXT?????*???,??O?(")?CHARACTER???????????? ?
- VC2BILLPATH??????????????????????????NEXT?????*???,??O?(")?CHARACTER???????????? ?
- NUMCREATEUSERID??????????????????????NEXT?????*???,??O?(")?CHARACTER???????????? ?
- NUMSENDUSERID????????????????????????NEXT?????*???,??O?(")?CHARACTER???????????? ?
- NUMDEALFLAG??????????????????????????NEXT?????*???,??O?(")?CHARACTER???????????? ?
- DATCREATETIME????????????????????????NEXT?????*???,??O?(")?DATE?YYYY-MM-DD?HH24:MI:SS ?
- DATSENDTIME??????????????????????????NEXT?????*???,??O?(")?DATE?YYYY-MM-DD?HH24:MI:SS ?
- 记录?1:?被拒绝?-?表?TL_FUND_MMS_BATCH?出现错误。 ?
- ORA-00001:?unique?constraint?(MJJZH.PK_TL_FUND_MMS_BATCH)?violated ?
- 注:ORA-00001:?unique?constraint?(MJJZH.PK_TL_FUND_MMS_BATCH)?violated,是因为主键重复。 ?
- 表?TL_FUND_MMS_BATCH: ?
- 0?行?加载成功。 ?
- 由于数据错误,?1?行?没有加载。 ?
- 由于所有?WHEN?子句失败,?0?行?没有加载。 ?
- 由于所有字段都为空的,?0?行?没有加载。 ?
- 为绑定数组分配的空间:????????????????214656?字节?(64?行) ?
- 读取???缓冲区字节数:?1048576 ?
- 跳过的逻辑记录总数:??????????0 ?
- 读取的逻辑记录总数:?????????????1 ?
- 拒绝的逻辑记录总数:??????????1 ?
- 废弃的逻辑记录总数:????????0 ?
- 从?星期四?5月??12?17:01:38?2011?开始运行 ?
- 在?星期四?5月??12?17:01:39?2011?处运行结束 ?
- 经过时间为:?00:?00:?01.20 ?
- CPU?时间为:?00:?00:?00.06?
6、注意事项:
①、日期格式转换:表中的最后两个字段是日期格式,这里需做?DATCREATETIME DATE "YYYY-MM-DD HH24:MI:SS", 转换,相当于to_date()。且数据文件中是2011-4-28 15:50:26格式,不是"2011-4-28 15:50:26"格式。否则会出错。(后来测试的时候发现带上也不会出错了,奇怪。)
②、插入数据库中的内容包含":如果数据文件中是"肖测试",控制文件中需加上Optionally enclosed by '"',这样在插入数据库时,内容就不包含"",下面是加Optionally enclosed by '"'与不加的效果。
?
关于Oracle数据库sqlload用法的相关知识就介绍到这里了,希望本次的介绍能够对您有所收获!