通过 Oracledb Driver 使用 Nodejs 连接到远程 Oracle DB

Posted

技术标签:

【中文标题】通过 Oracledb Driver 使用 Nodejs 连接到远程 Oracle DB【英文标题】:Connecting to a remote Oracle DB with Nodejs through Oracledb Driver 【发布时间】:2017-09-24 13:03:17 【问题描述】:

嘿,我真的想弄清楚如何连接到远程 Oracle 测试数据库,但我没有使用 Java 的经验。因此,如果我能得到您的帮助,我将永远感激不尽。

我有一个正在尝试连接的远程测试数据库,并且我有一个带有旧式 SID 的 jdbc 连接。根据这个链接:https://github.com/oracle/node-oracledb/blob/master/doc/api.md#notjdbc,我应该创建一个 tnsnames.ora 文件来放置连接,如下所示:

tnsnames.ora:

appDB =
 (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))
   (CONNECT_DATA =
     (SID = ORCL)
   )
 )

然后我应该在我的节点 server.js 文件中引用它,就像这样

server.js:

const oracledb = require('oracledb');
oracledb.getConnection(
  
    user          : process.env.ORACLE_USER,
    password      : process.env.ORACLE_PASSWORD,
    connectString : "appDB"
  ,
  function(err, connection)
  
    if (err) 
      console.error(err.message);
      return;
    
    connection.execute(
      "SELECT * " +
        "FROM BOS_course",
      function(err, result)
      
        if (err) 
          console.error(err.message);
          doRelease(connection);
          return;
        
        console.log(result.rows);
        doRelease(connection);
      );
  );

module.exports = 
    oracledb
;

但是,我不知道应该将 tnsnames.ora 文件放在哪里。我在网上找到了这个链接$ORACLE_HOME/network/admin,但我不知道它指的是什么。我对数据库的访问权限有限。请原谅我对 Java 的无知。如何在我的节点应用程序中使用这个连接,它与数据库完全分开?我的应用如何知道“appDB”是什么以及如何在 tnsnames.ora 文件中找到它?

提前致谢!

【问题讨论】:

【参考方案1】:

将完整的连接地址放入connectString变量中

user : process.env.ORACLE_USER, password : process.env.ORACLE_PASSWORD, connectString : "(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))(CONNECT_DATA =(SID= ORCL)))"

【讨论】:

你现在是我最喜欢的人。谢谢@Isalamon! 这比使用 tnsnames.ora 更好,而且更便携。你是冠军!【参考方案2】:

要从技术上回答问题,请设置环境变量TNS_ADMIN。然后 node-oracledb(以及其他基于 OCI 的语言 API,如 Python cx_Oracle、php OCI8、Ruby ruby​​-oci8 等)将查找 $TNS_ADMIN/tnsnames.ora

【讨论】:

【参考方案3】:

我有一个类似的情况,我在 azure 上有两个 VM。一个用于 Oracle12c DB,另一个用于带有 Oracle 客户端库的 nodejs oracledb 包。这是我从客户端连接到远程数据库的连接字符串。

module.exports = 
  user          : process.env.NODE_ORACLEDB_USER || "hr",
  password      : process.env.NODE_ORACLEDB_PASSWORD || "welcome",
  connectString : process.env.LOCAL || "myipaddress:1521/servicename",
;

【讨论】:

以上是关于通过 Oracledb Driver 使用 Nodejs 连接到远程 Oracle DB的主要内容,如果未能解决你的问题,请参考以下文章

通过 Android 应用程序连接到 OracleDB

通过 OracleDB sqlplus 在 shell 脚本中使用 for 循环

Spring Boot 无法从数据源确定 jdbc url

Oracle DB:java.sql.SQLException:关闭连接

npm install node-oracledb 失败

如何解决“无法解析某些模块 oracledb”?