【问题标题】:SQL*Loader error only when calling via Python subprocess仅在通过 Python 子进程调用时出现 SQL*Loader 错误
【发布时间】: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


【解决方案1】:

您应该设置了ORACLE_HOME 环境变量。例如,您可以在命令行中设置它:

subprocess.call('ORACLE_HOME=/path/to/oracle-home sqlldr user/pass@.../... control=config/update_processor.ctl data=data/data.dat')

【讨论】:

  • 那么在这种情况下,ORACLE_HOME 会指向即时客户端位置吗?
  • @RussellQuinlan 是的
  • 使用 Instant Client,不要设置 ORACLE_HOME
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-17
  • 2015-03-25
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多