SQL Loader加载289150条数据时1条失败,请求排查原因
问题分析:SQL Loader加载单条记录失败
问题概述
通过SQL Loader加载约289150条记录时,仅1条记录插入失败,需判断是加载方式问题还是数据问题。
失败详情
- 失败记录:
200511734,"동발"사향만응고(ALL-MuschusPlaster), - 错误信息(原英文):
no terminator found after TERMINATED and ENCLOSED field - 错误信息(中文翻译):
在指定的终止符和包围符字段后未找到终止符
CTL文件内容
options(PARALLEL = TRUE, DIRECT = TRUE, skip=1) UNRECOVERABLE LOAD DATA APPEND INTO TABLE TEST_1234 FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS ( Item_serial_number char(1000), Item_name char(4000) )
原因判断及解决方案
原因:数据格式不符合CTL约定
这是数据问题,而非加载方式问题。
CTL文件中配置了OPTIONALLY ENCLOSED BY '"',意味着:
- 字段可选择用双引号包围;
- 若字段内部需出现双引号,必须用**连续两个双引号("")**转义,否则SQL Loader会将第一个双引号视为字段起始标记,直到找到下一个双引号才判定字段结束,之后再寻找逗号作为字段分隔符。
这条失败记录里的"동발"사향만응고...,字段内部的双引号未做转义,SQL Loader读到第一个"后,错误地将동발视为被包围的字段内容,后续的"사향만응고(ALL-MuschusPlaster)被当作无效内容,无法找到对应字段的终止逗号,最终触发报错。
解决方案
- 修正单条数据:将字段内的单个双引号替换为连续两个双引号,符合CSV格式规范。修正后记录示例:
若业务上该字段无需整体用双引号包围,也可直接移除开头的双引号,修正为:200511734,"동발""사향만응고(ALL-MuschusPlaster)",200511734,동발"사향만응고(ALL-MuschusPlaster), - 批量处理(若同类数据多):如果存在大量类似格式错误的记录,可通过脚本批量替换字段内的单个双引号为连续双引号后再加载。
内容的提问来源于stack exchange,提问作者rahul1234a
相关产品推荐
相关产品推荐

