0

我有一个使用 oracledb 模块连接许多 oracle 数据库的 nodejs 应用程序。此应用程序在一个地方监视所有数据库。

但有一个问题。我正在创建一个文件来连接到 oracle db 并执行 sql。我正在使用此文件连接到数据库。例如:

let conections = [];
function connectToDb(dbid, connStr){
   const oracledb = require('oracledb');
   oracledb.outFormat = oracledb.OUT_FORMAT_OBJECT;
   oracledb.poolMax = 10;
   oracledb.poolMin = 1;
   oracledb.createPool(connStr).then((conn) => {
      conections[dbid] = dbid;
   });
}

function executeSql(dbid, sql, callback){
    conections[dbid].getConnection().then(conn => {
        conn.execute(qry, params, function(err, rows) {
            callback(rows);
        });
    });
}

connectToDb(1, {......});
connectToDb(2, {......});
connectToDb(3, {......});

executeSql(1, 'select * from ....', function(){...}); //response time 1 sn everthing is okey
executeSql(2, 'select * from ....', function(){...}); //response a long time. Than i am getting queue timeout error
executeSql(3, 'select * from ....', function(){...}); //it not working a while time!!
executeSql(1, 'select * from ....', function(){...}); //it not working a while time!!

//this functions are async. Please assume that there is setInterval function.

在这段代码中,一切都很好,但是当一个数据库NJS-040: connection request timeout. Request exceeded queueTimeout of 60000出现一个数据库错误时,所有数据库都会受到这种情况的影响。

我认为这些连接不是孤立的,我认为如果我可以创建孤立的连接,这种情况就会得到解决。例如,我可以使用 import 而不是 require 吗?

谢谢你的帮助

4

1 回答 1

0

在某些时候,您必须:

await connection.close();

否则,您实际上是在打开与数据库池的新连接,而不关闭其他连接。我自己重新编码 API 时遇到了这个问题。

于 2021-08-10T01:27:56.773 回答