如何在 Linux 服务器上使用 Nodejs 连接远程 Oracle 数据库
# 安装 Node.js 环境
可查看 CentOS 7上安装 Node.js 的 4 种方法 (opens new window) 这篇文章。
# 下载oracle客户端 'Basic' 和 'SDK' zip包
官方下载
进入 官方下载地址 (opens new window),下载
instantclient-basic-linux.x64-12.1.0.1.0.zip
和instantclient-sdk-linux.x64-12.1.0.1.0.zip
两个包,并安装在同一个目录百度云盘下载
链接地址:https://pan.baidu.com/s/1iMUaaCXie1oxo0mVtctXJw (opens new window),提取码:r38s
# 安装oracle客户端 'Basic' 和 'SDK' zip包
以本机测试为例,我的安装位置(可自定义)为 /opt/oracle
# 进入目录
cd /opt/oracle
2
下载的两个文件上传并解压
unzip instantclient-basic-linux.x64-12.1.0.1.0.zip
unzip instantclient-sdk-linux.x64-12.1.0.1.0.zip
2
重命名解压的文件并添加软连接
mv instantclient_12_1 instantclient
cd instantclient
ln -s libclntsh.so.12.1 libclntsh.so
2
3
# 设置环境变量
方法一 :
在/etc/profile
文件中添加变量【对所有用户生效(永久的)】,用vim
在文件/etc/profile
文件中增加变量,该变量将会对Linux
下所有用户有效,并且是“永久的”。打开配置文件:
vim /etc/profile
把以下环境变量添加至当前文件下
export LD_LIBRARY_PATH=/opt/oracle/instantclient:$LD_LIBRARY_PATH
export OCI_LIB_DIR=/opt/oracle/instantclient
export OCI_INC_DIR=/opt/oracle/instantclient/sdk/include
2
3
执行以下代码,使其生效
source /etc/profile
方法二:
在用户目录下的.bash_profile
文件中增加变量【对单一用户生效(永久的)】,用vim
在用户目录下的.bash_profile
文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。打开配置文件:
cd ~
vim .bash_profile
2
把以下环境变量添加至当前文件下
export LD_LIBRARY_PATH=/opt/oracle/instantclient:$LD_LIBRARY_PATH
export OCI_LIB_DIR=/opt/oracle/instantclient
export OCI_INC_DIR=/opt/oracle/instantclient/sdk/include
2
3
执行以下代码,使其生效
source .bash_profile
# 安装 oracledb 测试示例
安装oracle库
npm install oracledb --save
输出:
> oracledb@1.13.1 install /opt/oracletest/node_modules/oracledb
> node-gyp rebuild
make: Entering directory `/opt/oracletest/node_modules/oracledb/build'
CXX(target) Release/obj.target/oracledb/src/njs/src/njsOracle.o
CXX(target) Release/obj.target/oracledb/src/njs/src/njsPool.o
CXX(target) Release/obj.target/oracledb/src/njs/src/njsConnection.o
CXX(target) Release/obj.target/oracledb/src/njs/src/njsResultSet.o
CXX(target) Release/obj.target/oracledb/src/njs/src/njsMessages.o
CXX(target) Release/obj.target/oracledb/src/njs/src/njsIntLob.o
CXX(target) Release/obj.target/oracledb/src/dpi/src/dpiEnv.o
CXX(target) Release/obj.target/oracledb/src/dpi/src/dpiEnvImpl.o
CXX(target) Release/obj.target/oracledb/src/dpi/src/dpiException.o
CXX(target) Release/obj.target/oracledb/src/dpi/src/dpiExceptionImpl.o
CXX(target) Release/obj.target/oracledb/src/dpi/src/dpiConnImpl.o
CXX(target) Release/obj.target/oracledb/src/dpi/src/dpiDateTimeArrayImpl.o
CXX(target) Release/obj.target/oracledb/src/dpi/src/dpiPoolImpl.o
CXX(target) Release/obj.target/oracledb/src/dpi/src/dpiStmtImpl.o
CXX(target) Release/obj.target/oracledb/src/dpi/src/dpiUtils.o
CXX(target) Release/obj.target/oracledb/src/dpi/src/dpiLob.o
CXX(target) Release/obj.target/oracledb/src/dpi/src/dpiCommon.o
SOLINK_MODULE(target) Release/obj.target/oracledb.node
COPY Release/oracledb.node
make: Leaving directory `/opt/oracletest/node_modules/oracledb/build'
npm WARN saveError ENOENT: no such file or directory, open '/opt/oracletest/package.json'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN enoent ENOENT: no such file or directory, open '/opt/oracletest/package.json'
npm WARN oracletest No description
npm WARN oracletest No repository field.
npm WARN oracletest No README data
npm WARN oracletest No license field.
+ oracledb@1.13.1
added 2 packages in 42.994s
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
在当前目录新建app.js
测试连接:
var oracledb = require('oracledb');
var config = {
user:'******', //用户名
password:'******', //密码
//IP:数据库IP地址,PORT:数据库端口,SCHEMA:数据库名称
connectString : "IP:PORT/SCHEMA"
};
oracledb.getConnection(
config,
function(err, connection)
{
if (err) {
console.error(err.message);
return;
}
//查询某表十条数据测试,注意替换你的表名
connection.execute("SELECT * FROM ( SELECT A.*, ROWNUM RN FROM (SELECT * FROM 你的表名) A WHERE ROWNUM <= 10 ) WHERE RN >= 0",
function(err, result)
{
if (err) {
console.error(err.message);
doRelease(connection);
return;
}
//打印返回的表结构
console.log(result.metaData);
//打印返回的行数据
console.log(result.rows);
});
});
function doRelease(connection)
{
connection.close(
function(err) {
if (err) {
console.error(err.message);
}
});
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
执行:
node app.js
# 执行错误处理方案
1、错误一:
若执行后报错
DPI-1047: Cannot locate a 64-bit Oracle Client library: "libaio.so.1: cannot open shared object file: No such file or directory". See https://oracle.github.io/node-oracledb/INSTALL.html for help
Node-oracledb installation instructions: https://oracle.github.io/node-oracledb/INSTALL.html
You must have 64-bit Oracle Client libraries configured with ldconfig, or in LD_LIBRARY_PATH.
If you do not have Oracle Database on this computer, then install the Instant Client Basic or Basic Light package from
https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
2
3
4
5
意思就是缺少libaio
这个软件。
由于我的linux
版本是ubuntu
所以直接:
sudo apt-get install libaio-dev
如果你的版本是CentOS
或者redcat
,输入:
yum install libaio*
然后此问题即可解决。
2、错误二:
若执行后报错
ORA-24454: client host name is not set
这里需要设置主机名到 /etc/hosts
$ sudo /bin/bash -c "echo '127.0.1.1 ${HOSTNAME}' >> /etc/hosts"
设置后重新执行 node app.js
返回打印结果成功。
如果pm2管理项目时报错:Error: NJS-045: cannot load the oracledb add-on binary for Node.js **** (linux, x64)
请记得pm2 restart *** --update-env
来更新环境变量
参考地址: https://github.com/oracle/node-oracledb/blob/master/INSTALL.md#instzip
- 01
- Node与GLIBC_2.27不兼容解决方案08-19
- 02
- Git清空本地文件跟踪缓存08-13