我的目标是从Ubuntu连接到VMWare来宾计算机(OpenSuse)上的oracle数据库。
目前我只安装了oracledb驱动程序,并尝试运行example connect program给定。
我关注的步骤来自github INSTALL页面。到目前为止我所做的是这些:
1)由于我已安装node.js,因此我跳过了step 3.1。
2)我已成功下载并解析了{{3}中提到的 基本 和 sdk }。
3)因为我找不到任何名为libaio
的包,但我找到了libaio1
。所以我安装了libaio1
。
4)我创建了环境变量LD_LIBRARY_PATH
,我的PC上的内容为/opt/oracle/instantclient
。
5)如step 3.2中所述;即使在我的情况下它不是强制性的;我创建了两个环境变量:OCI_LIB_DIR
包含内容/opt/oracle/instantclient
,OCI_INC_DIR
包含内容/opt/oracle/instantclient/sdk/include
。
6)已安装node-oracledb
。
我正在尝试运行示例连接程序。我正在使用的代码是step 3.3。当我运行node connect.js
时,我收到此错误。
/home/ishan/node.js/oracle-test/node_modules/oracledb/lib/oracledb.js:28
throw err;
^
Error: libclntsh.so.12.1: cannot open shared object file: No such file or directory
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object.<anonymous> (/home/ishan/node.js/oracle-test/node_modules/oracledb/lib/oracledb.js:23:15)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (modullibclntsh.so.12.1e.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
因为我还没有启动VMware客户机;我希望得到一个错误,没有找到这样的数据库实例。然后只有在运行VMWare机器并连接到其中的数据库之后。但我得到cannot open shared object file
的{{1}}错误。
答案 0 :(得分:17)
我的第一个怀疑是LD_LIBRARY_PATH实际上没有正确设置或导出。三重检查已设置,目录可由尝试启动节点的实际shell读取。
export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2
您需要在任何启动Node.js的shell中执行此操作。
我还会检查机器上安装的其他Oracle库,并确保没有冲突。
使用ldconfig全局设置路径几乎肯定比设置LD_LIBRARY_PATH更容易。你可以这样做:
sudo sh -c "echo /opt/oracle/instantclient_12_2 > /etc/ld.so.conf.d/oracle-instantclient.conf"
sudo ldconfig
有关详细信息,请参阅Instant Client install说明。
如果您有可选的Net配置文件,例如sqlnet.ora
或tnsnames.ora
,则可以将它们放在/opt/oracle/instantclient_12_2/network/admin
目录中,这是配置文件的默认位置。请参阅Optional Oracle Net Configuration。
更新:如果您安装Instant Client 19.3 RPM软件包,则ldconfig
步骤会自动完成。 (您仍需要/可能/应该为19.3 ZIP文件安装执行此操作)
答案 1 :(得分:6)
导出仅适用于一个进程。看起来,它并没有出现在您的终端窗口(这是一个单独的过程)。
因此,您应该在启动node connect.js
之前再次执行以下操作(在您要启动节点的同一终端窗口中):
export LD_LIBRARY_PATH=/opt/oracle/instantclient:$LD_LIBRARY_PATH