我现在遇到的问题的具体情况是这样的,我先将要加载的数据写入一个buffer文件,然后利用sqlldr将文件里面的数据导入数据库,sqlldr结束之后将buffer文件删除,在这个过程中,有部分数据既没有写入数据库,也没有写入bad文件,请问这样的情况是什么原因产生的?
解决方案 »
- oracle 10g 行转列(动态列)
- ORACLA联查2张相同结构的表报错?在线等~~急啊~~
- oracle 无法启动问题
- 急!高手帮忙写个存储过程!
- 分享:错误的驱动可能把你引入岔路
- 一个关于客户端配置的问题,请教各位老大
- 独占和共享启动方式中所谓的并行选件是在什么地方设置哟?
- exp问题
- 怎样对含有数组对象类型的表进行数据的插入和删除等操作呀?
- select f1 as 50岁人数 from tab where .....报错!如何让as 后面可以跟数字呢???
- 远程查询数据库的一个问题
- 一个是oracle数据库,一个是sysbase数据库,想要互想访问交换数据,有修改数据的可能,怎么办了?
当然还可以设置允许错误的数量。errors。默认是50。
你说的什么buffer文件。这个不管的。只要有控制文件*.ctl。里面配置好就好。你的数据源文件txt,csv,...逗可以的阿。只要格式是以你控制文件中指定的分割就好(符号,长度==)
CTL文件:
OPTIONS ( ERRORS=100000, ROWS=100000, BINDSIZE=10000, SKIP_UNUSABLE_INDEXES=TRUE, DATE_CACHE=5000)
LOAD DATA
INFILE '/home/oracle/data.dat'
BADFILE '/home/oracle/bad.bad'
DISCARDFILE '/home/oracle/dsc.dsc'
DISCARDMAX 100000000APPEND INTO TABLE "DIV_STA"
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\''
(a_id char(100) ,
b_id char(100) ,
name char(50) ,
time DATE(19) "YYYY/MM/DD HH24:MI:SS" ,
received DECIMAL EXTERNAL(40),
success DECIMAL EXTERNAL(40),
failed DECIMAL EXTERNAL(40)
)脚本主要是根据sqlldr产生的日志文件中的成功和失败的数目来统计:path变量是存放日志的路径,db是统计数据要写入的数据库
loaded=`cat $path | grep " successfully loaded." | awk '{print $db}'`;
error1=`cat $path | grep " not loaded due to data errors." | awk '{print $db}'`;
error2=`cat $path | grep "not loaded because all WHEN clauses were failed." | awk '{print $db}'`
error3=`cat $path | grep " not loaded because all fields were null." | awk '{print $db}'`