【发布时间】:2021-09-05 09:25:23
【问题描述】:
我有一个接收大型 csv 文件的 python 脚本,应该将数据加载到 Oracle 表中。计划是使用 SQL Loader 来完成。
我安装了带有 SQL Loader 的 Instant Client 19.8。我的 Python 代码是通过这个脚本运行的
#!/bin/sh
PY=py
APP_HOME=/C/Users/.../Projects/.../updates
APP_BIN=$APP_HOME/bin
APP_LIB=$APP_HOME/lib
APP_CONFIG=$APP_HOME/config
APP_LOGS=$APP_HOME/logs
APP_DATA=$APP_HOME/data
APP_OUTPUT=$APP_HOME/output
GLOBAL_ENV_DIR=$APP_HOME/ENV
export APP_HOME
export APP_BIN
export APP_LIB
export APP_CONFIG
export APP_LOGS
export APP_DATA
export APP_OUTPUT
export GLOBAL_ENV_DIR
export LD_LIBRARY_PATH=/C/Oracle/instantclient_19_8
export PYTHONPATH=$PYTHONPATH:$APP_HOME:$APP_BIN:$APP_LIB:$APP_LIB/util:$APP_CONFIG:$APP_LOGS:$APP_DATA:$APP_OUTPUT:
echo $PYTHONPATH
echo
echo $PY $APP_BIN/update/update_processor.py --globalenvdir $GLOBAL_ENV_DIR --apphomedir $APP_HOME --date 01012020 $1 $2 $3 $4
echo
$PY $APP_BIN/update/update_processor.py --globalenvdir $GLOBAL_ENV_DIR --apphomedir $APP_HOME --date 01012020 $1 $2 $3 $4
然后,我尝试像这样运行 SQL Loader
subprocess.call('sqlldr user/pass@.../... control=config/update_processor.ctl data=data/data.dat')
看到这个错误
Message 2100 not found; No message file for product=RDBMS, facility=ULMessage 2100 not found; No message file for product=RDBMS, facility=UL
我当然可以单独运行 SQL Loader,也可以从单独的 Python 脚本运行,所以我认为我的 shell 脚本中的某些配置不正确?
【问题讨论】:
-
我只是花了一些时间拼凑类似的东西,并没有看到那个错误。如果您可以使用runnable example 更新您的问题,那么我可以再看一遍。否则,请检查环境变量是否正在传播。您可能会发现使用 ldconfig 而不是设置 LD_LIBRARY_PATH 更安全(请参阅Instant Client installation instructions)。
-
我实际上只是创建了一个空的 /instantclient/rdbms/mesg 文件夹,我在一次运行后删除了它,它开始正常工作......不知道为什么它需要那个,因为我印象深刻只有完整安装 Oracle 客户端时才需要该文件夹。
标签: python oracle shell sql-loader