我正在使用cx_oracle 7和python 3.6.7建立与远程服务器中oracle 11g的连接。我在Ubuntu 18.04中的操作系统
我已经用libclntsh.so安装了Oracle Instant Client库,但没有得到预期的输出。
这是我用来连接到Oracle数据库的代码
connection = cx_Oracle.connect("username/password@host/port")
print (connection.version)
connection.close()
当脚本运行时,我希望获得连接版本,而不是得到以下错误消息
文件“ script.py”,第13行,在 连接= cx_Oracle.connect(“用户名/密码@主机/端口”)cx_Oracle.DatabaseError:DPI-1047:无法找到64位Oracle 客户端库:“ libclntsh.so:无法打开共享库文件:否这样 文件或目录”。请参阅 https://oracle.github.io/odpi/doc/installation.html#linux寻求帮助
答案 0 :(得分:1)
我正面临着完全相同的问题。这对我有用:
$ sudo mkdir -p /opt/oracle
$ cd /opt/oracle
$ sudo unzip /opt/oracle/instantclient-basic-linux.x64-19.8.0.0.0dbru.zip
$ sudo apt-get install libaio1
LD_LIBRARY_PATH
$ vim ~/.bashrc
.bashrc
文件 export LD_LIBRARY_PATH=/opt/oracle/instantclient_19_8:$LD_LIBRARY_PATH
.bashrc
文件后,我找到了它: $ source ~/.bashrc
然后我的Python脚本再次运行良好。
另请参见 cx_oracle documentation
答案 1 :(得分:1)
我几乎放弃了这个错误。我可能尝试了互联网上的所有解决方案,但没有任何效果。
我在 Unix 中编写了一个类似的脚本,但遇到了同样的错误。我已经应用了我在 shell 脚本中使用的相同修复程序,它的效果非常好。
如果我直接执行 Python 脚本,它可以通过 cx_Oracle 很好地访问数据库。但是当我通过 crontab 安排它时,我不断收到错误“cx_Oracle.DatabaseError: DPI-1047”
这是修复。导入操作系统模块并添加以下代码。
os.environ["ORACLE_HOME"] = "你的 oracle 库"。就我而言,它是 /u01/oracle/product/12.1.0.2/
答案 2 :(得分:0)
经过更多研究,我从ubunu community获得了解决方案,在安装oracle Instantclient之后,您将必须按以下方式集成oracle库:
导出 LD_LIBRARY_PATH = / usr / lib / oracle /
<version>
/ client(64)/ lib / $ {LD_LIBRARY_PATH:+:$ LD_LIBRARY_PATH}例如,用于Linux x86_64的12.1版本:
导出 LD_LIBRARY_PATH = / usr / lib / oracle / 12.1 / client64 / lib / $ {LD_LIBRARY_PATH:+:$ LD_LIBRARY_PATH}
其中<version>
表示您的oracle intantclient版本,例如11.2、12.2
连接参数应如下connection = cx_Oracle.connect("username/password@host/service_name e.g orcl")
要获取侦听器/服务名,请在oracle sqlplus中键入以下内容
SQL> show parameter local_listener
值是侦听器
答案 3 :(得分:0)
如果您正在使用aws lambdas连接到RDS / OracleDB,请尝试使用此方法使用Docker自动构建aws lambda层-https://medium.com/@sabithvm/building-up-on-lambda-layers-a4771d3b9c7
答案 4 :(得分:0)
对于Ubuntu Linux 20.04 LTS服务器,对我有用的(可能很明显,但对我而言不是!)是1)执行导出时,您需要位于要运行app /命令的文件夹中在从SSH终端关闭到EC2服务器后,从该服务器连接到Oracle,尽管这可行,但是仍然无法使用,此问题已解决,方法是2)将其添加到〜/ .bashrc中 完整步骤:
使用Oracle Instant Client解压缩时,例如:/ opt / oracle / instantclient_19_9
sudo apt-get install libaio1
cd ~/your-project-folder
export LD_LIBRARY_PATH=/opt/oracle/instantclient_19_9
然后我使用以下命令将其添加到〜/ .bashrc中:
sudo nano ~/.bashrc
并添加以下行:
export LD_LIBRARY_PATH=/opt/oracle/instantclient_19_9
然后在终端中运行:
source ~/.bashrc
我的矿山按预期方式安装在EC2服务器上,并以“ ubuntu”用户身份安装了必需的nvm / nodeJs
在nodeJs中,示例连接可能类似于:
const testOracleConnection = async () => {
let conn;
try {
conn = await oracledb.getConnection(oracleConfig);
const query1 = 'select ID, anotherColumn from someTable where ID = 1111';
const result = await conn.execute(query1);
console.log(result);
} catch (err) {
console.error(err);
} finally {
if (conn) {
try {
await conn.close();
} catch (err) {
console.error(err);
}
}
}
};