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

将CSV文件导入Oracle数据库失败,日志文件为空求助

CSV导入Oracle失败且日志为空的排查方案

问题背景

尝试将CSV文件导入Oracle数据库表,但操作失败,且日志文件始终为空。相关文件如下:

CSV示例

SendingFri,LoggingTime,RenewalNumber,TransactionType,Status,Duration
22997186945,2023-07-25-00:05:56.301,23900032093333,Payment,SUCCESS,null
22951547347,2023-07-25-00:04:12.794,23900336289912,Payment,SUCCESS,null

Shell脚本

#!/bin/bash

# Oracle Database Connection Details
USERNAME='abc'
PASSWORD="abc"
HOST="myip"
PORT="1521"
SERVICE_NAME="abc"

# CSV File Details
CSV_FILE="/home/hdegboevi/modified5.csv"
TABLE_NAME="myCANALINFORMATION"

# Control File
CONTROL_FILE="my_control_file.ctl"

# Create a control file
cat <<EOF > $CONTROL_FILE
LOAD DATA
INFILE '$CSV_FILE'
APPEND INTO TABLE $TABLE_NAME
FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
SENDINGFRI,
LOGGINGTIME,
RENEWALNUMBER,
TRANSACTIONTYPE,
STATUS,
DURATON
)
EOF

# Run SQL*Loader
sqlldr $USERNAME/$PASSWORD@$HOST:$PORT/$SERVICE_NAME control=$CONTROL_FILE log=/home/hdegboevi/sqlldr.log  /home/hdegboevi

# Check the log for errors
if grep "ORA-" sqlldr.log; then
    echo "Error occurred during data load. Please check sqlldr.log for details."
else
    echo "Data loaded successfully."
fi

排查要点

  • sqlldr命令参数错误:原命令末尾多余的/home/hdegboevi会被当作无效参数,导致sqlldr无法正常启动,甚至无法生成日志。需删除该多余路径,修正后的命令:
    sqlldr $USERNAME/$PASSWORD@$HOST:$PORT/$SERVICE_NAME control=$CONTROL_FILE log=/home/hdegboevi/sqlldr.log
    
  • 控制文件字段拼写错误:CSV中的字段为Duration,但控制文件中误写为DURATON(缺少字母i),这会导致字段映射失败,需修正为DURATION。
  • 日志文件权限问题:检查/home/hdegboevi/sqlldr.log所在目录的读写权限,确保当前用户拥有写入权限,避免sqlldr无法生成日志。
  • 数据库连接验证:手动使用sqlplus测试连接:
    sqlplus $USERNAME/$PASSWORD@$HOST:$PORT/$SERVICE_NAME
    
    确认连接正常,排除因连接失败导致无日志输出的情况。
  • 控制文件路径问题:当前脚本生成的控制文件在执行脚本的当前目录,若执行目录不是/home/hdegboevi,sqlldr可能找不到控制文件。建议指定控制文件的绝对路径:
    CONTROL_FILE="/home/hdegboevi/my_control_file.ctl"
    
  • 跳过CSV表头:当前控制文件会将CSV的第一行表头当作数据导入,需在控制文件中添加SKIP=1跳过表头,修改后的控制文件片段:
    LOAD DATA
    INFILE '$CSV_FILE'
    APPEND INTO TABLE $TABLE_NAME
    FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'
    TRAILING NULLCOLS
    SKIP 1
    (
    SENDINGFRI,
    LOGGINGTIME,
    RENEWALNUMBER,
    TRANSACTIONTYPE,
    STATUS,
    DURATION
    )
    
  • sqlldr命令可用性:执行which sqlldr确认命令存在,且当前用户有权限调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 04:41:02