【问题标题】:NodeJS : What happen if not close oracle connectionNodeJS:如果不关闭 oracle 连接会发生什么
【发布时间】:2015-05-25 14:27:33
【问题描述】:

我正在构建一个将连接到 Oracle 数据库的 NodeJS 应用程序。

我想知道如果我不关闭连接并且我多次调用fiftycent() 函数会发生什么?

var i=50;
function fiftycent() {
var oracledb = require('oracledb');

 oracledb.getConnection(
  {
    user          : "hr",
    password      : "welcome",
    connectString : "localhost/XE"
  },
  function(err, connection)
  {
    if (err) {
      console.error(err.message);
      return;
    }
    connection.execute(
      "SELECT department_id, department_name "
    + "FROM departments "
    + "WHERE department_id = :did",
      [180],
      function(err, result)
      {
        if (err) {
          console.error(err.message);
          return;
        }
        console.log(result.rows);
      });
  });
 i=i-1;
 if (i>0) fiftycent();
}

节点服务器运行几天后,会不会导致内存故障之类的?

请注意,此示例的部分内容来自https://github.com/oracle/node-oracledb,它们不包括

connection.release( function(err){
 if (err) console.error(err.message);
});

在他们的代码中。

提前感谢您的回答。

【问题讨论】:

    标签: node.js oracle memory


    【解决方案1】:

    每次调用getConnection 时,它都会为您的数据库创建一个新的(完整的)连接。如果你不调用release它可能会导致你的应用程序内存泄漏,因为连接仍然被分配。并且可能取决于您的数据库服务器设置,您可能会达到最大打开连接总数。

    在这种情况下,最好将您的连接集中在connection pool 中。调用 release 会将连接返回到池并使其可供其他调用使用。

    所有示例都使用release 函数来释放连接。看看here

    【讨论】:

    • 感谢您的回答。你是对的 !经过一些测试,我得到了这个错误:TNS-12516 TNS:listener could not find instance with matching protocol stack。你有一些“连接池”的例子吗?
    • 连接池有一个完整的web app例子:github.com/oracle/node-oracledb/blob/…关于连接池的文档是github.com/oracle/node-oracledb/blob/…
    • 您好!非常感谢。我是新手,我正在研究您的示例脚本,并搜索如何将池连接应用于我的需求。首先谢谢你,等我的问题解决了我会回来的
    • 你好斯塔尔。我现在了解连接池是如何工作的。就我而言,当我释放连接时,我收到一个错误:数据库连接丢失。这是因为节点异步工作。我怎么解决这个问题 ?非常感谢。
    • 我得到这个错误:err [Error: NJS-003: invalid connection]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 2017-08-20
    • 1970-01-01
    相关资源
    最近更新 更多