You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS使用node-oracledb连接Oracle数据库遇超时及TNS解析错误求助

解决node-oracledb连接Oracle的超时与TNS解析问题

先修正代码里的基础错误,再逐步排查网络和配置问题:

1. 代码错误修正

变量名拼写错误

你写的connetionString少了一个字母c,应该改为connectionString——这个拼写错误会直接导致连接字符串无法被识别,引发TNS解析错误。

避免async/await与回调函数混用

oracledb.getConnection支持两种调用逻辑:要么用async/await配合try/catch捕获错误,要么用回调函数,不能同时混用,否则会导致逻辑混乱、错误处理失效。

修正后的代码示例:

const oracledb = require('oracledb')

async function test(){
    let con;
    // 修正变量名拼写
    let connectionString = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=你的实际数据库IP)(PORT=实际端口))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=实际服务名)))';
    
    try {
        oracledb.initOracleClient({libDir: 'C:\\oracle\\instantclient_19_16'});
        // 使用try/catch处理异步错误,移除冗余的回调函数
        con = await oracledb.getConnection({
            user: "你的数据库用户名",
            password: "你的数据库密码",
            connectionString: connectionString
        });
        console.log('连接成功:', con);
        // 连接使用完毕后记得释放
        await con.close();
    } catch (err) {
        console.error('连接失败:', err);
    }
}

// 调用测试函数
test();

2. 超时错误排查(使用host_ip:port连接时)

  • 确认数据库服务器的IP、端口是否正确,Oracle默认监听端口为1521,不要填错
  • 测试网络连通性:Windows命令行执行Test-NetConnection 你的数据库IP -Port 端口号,如果显示tcp测试成功说明网络通畅,否则是网络或防火墙问题
  • 检查数据库服务器防火墙:确保开放了对应端口,且允许你的客户端IP访问
  • 确认数据库监听状态:在数据库服务器上执行lsnrctl status,查看监听服务是否正常运行,且监听了目标端口与服务

3. TNS解析错误排查(使用连接字符串或服务名时)

  • 确认SERVICE_NAME正确性:不要混淆SID和服务名,在数据库服务器执行SQL语句SELECT value FROM v$parameter WHERE name = 'service_names';,得到的结果就是正确的服务名
  • 如果直接用服务名(如url_service)连接,需配置tnsnames.ora文件:
    1. 在你的instantclient目录下创建network/admin文件夹
    2. 创建tnsnames.ora文件,内容示例:
      URL_SERVICE =
        (DESCRIPTION =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 你的数据库IP)(PORT = 端口))
          (CONNECT_DATA =
            (SERVER = DEDICATED)
            (SERVICE_NAME = 实际服务名)
          )
        )
      
    3. 可通过环境变量TNS_ADMIN指向该network/admin目录,或在代码中指定:
      oracledb.initOracleClient({
          libDir: 'C:\\oracle\\instantclient_19_16',
          tnsAdmin: 'C:\\oracle\\instantclient_19_16\\network\\admin'
      });
      
  • 检查连接字符串格式:确保所有括号配对完整,无语法错误,替换为实际参数值

内容的提问来源于stack exchange,提问作者Pedro Gabriel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 20:25:30