前言

koa2项目中使用oracledb连接Oracle 11G数据库过程中,出现报错问题:

Failed to fetch data from the database: Error: NJS-138: connections to this database server version are not supported by node-oracledb in Thin mode

  • oracledb": "^6.4.0"

正文

一、错误原因

这个错误通常表示 node-oracledb 模块正在尝试在Thin模式下连接到 Oracle 数据库,但是数据库的版本不支持此连接方式。在“Thin”模式下,node-oracledb 使用基于 TCP/IP 的轻量级连接方式,而某些 Oracle 数据库版本可能不支持这种方式。

经过搜索,采取了降级使用node-oracledb的方法,降级为oracledb": "^5.2.0",降级后仍然无法连接。

二、解决方法

在查阅node-oracledb文档后得知:默认情况下,node-oracledb驱动程序以精简模式运行,直接连接到 Oracle 数据库 12.1 或更高版本。但是在连接12.1版本之前需要使用Thick模式。

解决这个问题的方法之一是将 node-oracledb 配置为使用 OCI(Oracle Call Interface)模式进行连接。OCI 模式依赖于 Oracle 客户端库,通常对于连接到各种 Oracle 数据库版本更为通用。

因此解决方法变成了安装Oracle instantclient客户端来支持使用Thick模式。

Oracle instantclient下载地址

https://www.oracle.com/database/technologies/instant-client/downloads.html

在这里选择对应的系统以及版本

下载后解压放置到某路径下

以下是在Windows系统上配置环境变量的步骤:

设置环境变量 PATH

  • 打开“控制面板” -> “系统与安全” -> “系统” -> “高级系统设置”。
  • 在弹出的窗口中,选择“高级”选项卡,然后点击“环境变量”按钮。
  • 在“系统变量”部分,找到名为“Path”的变量,并双击打开它。
  • 在编辑环境变量窗口中,点击“新建”按钮,然后添加Oracle Instant Client的安装路径,即E:\OracleInstantClient\instantclient-basic-windows.x64-11.2.0.4.0\instantclient_11_2
  • 确认添加后,点击“确定”保存更改,关闭所有打开的窗口。

配置完成后在项目中数据库配置启用Thick模式:

const oracledb = require('oracledb');
// 启用厚模式
oracledb.initOracleClient();

到此,项目可以正常连接远程数据库,问题解决。

参考资料

oracledb文档

https://node-oracledb.readthedocs.io/en/latest/user_guide/initialization.html#oracleclientloadingwindows

最后修改:2024 年 03 月 23 日
如果觉得我的文章对你有用,请随意赞赏