使用SQL Loader加载大CSV至Oracle遇物理记录超长错误求助
解决SQL*Loader加载大CSV时的物理记录长度超限问题
问题核心
使用SQL*Loader直接路径加载15GB、5000万行的CSV文件时,出现SQL_Loader-510错误,提示物理记录长度超过默认最大值1048576字节,调整readsize和concatenate参数后无效。
原因分析
- 直接路径加载模式下,
readsize参数不生效,该参数仅适用于常规路径加载; concatenate参数用于合并多条短物理记录,无法解决单条记录超长的问题;- 你提供的控制文件存在语法错误:
class_code字段后缺少逗号,会导致字段解析异常。
解决方案
方案一:改用常规路径加载
移除控制文件中的direct=true,同时设置足够大的readsize参数适配最长记录:
options (skip=1, readsize=3000000) LOAD DATA INFILE 'text.csv' BADFILE 'text.bad' DISCARDFILE 'text.dsc' INTO TABLE "user"."users_data" insert fields terminated by ',' Optionally enclosed by '"' TRAILING NULLCOLS ( refnum, parentrefnum, refcode, class_code, -- 补上缺失的逗号 full_address, country, city, suburbs, create_date, update_date )
执行命令示例:
sqlldr userid=用户名/密码@数据库 control=你的控制文件.ctl
方案二:直接路径下调整专属参数
若必须使用直接路径加载,通过direct_path_data_size参数增大允许的记录长度(该参数仅针对直接路径模式):
- 控制文件修改:
options (skip=1, direct=true, direct_path_data_size=3000000) LOAD DATA INFILE 'text.csv' BADFILE 'text.bad' DISCARDFILE 'text.dsc' INTO TABLE "user"."users_data" insert fields terminated by ',' Optionally enclosed by '"' TRAILING NULLCOLS ( refnum, parentrefnum, refcode, class_code, -- 补上缺失的逗号 full_address, country, city, suburbs, create_date, update_date )
- 命令行指定参数:
sqlldr userid=用户名/密码@数据库 control=你的控制文件.ctl direct_path_data_size=3000000
内容的提问来源于stack exchange,提问作者DISPLAY
相关产品推荐
相关产品推荐

