You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SQL*Loader导入含多行CLOB列的CSV至Oracle表报错

故障原因
  • 现有控制文件未配置双引号字段识别规则,会把INFO字段(双引号包裹的多行日志)里的内嵌逗号、换行符误判为字段/行分隔符,直接触发字段错位、类型不匹配、长度超限类报错
  • 未配置跳过CSV首行表头,会把server_name,database_name...这类表头文本当成数据写入,触发日期、CLOB字段类型校验错误
  • CLOB字段未指定读取缓冲区规则,无法正确加载长文本多行内容
  • TIMESTAMP字段配置末尾多余的:timestamp绑定变量写法会导致字段映射逻辑异常
修正后可用的SQL*Loader控制文件
OPTIONS (SKIP=1, READSIZE=10485760, STREAMSIZE=10485760)
load data
infile '/tmp/daily_hot_backup.csv'
append
into table BACKUP_POSTGRESQL_LOGS
fields terminated by "," OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
SERVER_NAME CHAR(120),
DATABASE_NAME CHAR(52),
TIMESTAMP DATE "DD-MON-YYYY HH24:MI:SS",
INFO CHAR(32767) CLOB,
BACKUP_ERROR CHAR(1)
);
配置说明
  • SKIP=1:跳过CSV第一行表头,避免表头文本作为数据加载触发类型错误
  • READSIZE=10485760、STREAMSIZE=10485760:将读缓冲区、流加载缓冲区调整为10MB,适配pg_basebackup长日志的加载需求,避免字段截断
  • OPTIONALLY ENCLOSED BY '"':识别双引号包裹的字段边界,双引号内部的逗号、换行符不会被判定为字段/行分隔符,从根源解决多行INFO字段解析错位的问题
  • INFO CHAR(32767) CLOB:指定INFO字段先按最长32KB字符串读取,再写入CLOB类型字段,兼容多行文本加载逻辑
  • 移除了TIMESTAMP字段后多余的:timestamp绑定配置,避免字段映射错误。如果实际数据中存在仅带日期、不带时分秒的时间值,可以将日期格式掩码调整为DD-MON-YYYY HH24:MI:SS,搭配TIMESTAMP DEFAULTIF TIMESTAMP=BLANKS配置默认时间值,避免日期解析报错
加载注意事项
  • 执行sqlldr命令前,确认Oracle运行用户对/tmp/daily_hot_backup.csv有可读权限,避免文件读取失败
  • 如果单条备份日志长度超过32KB,可以同步调大INFO CHAR()括号内的长度值,以及READSIZE、STREAMSIZE参数值,最大支持到2GB
  • 加载完成后检查同目录下生成的.bad、.log文件,排查是否存在个别行格式异常导致加载失败的问题

内容的提问来源于stack exchange,提问作者vinoth kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 18:27:34