Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 面临来自DB2的频繁连接丢失(使用ibm_db版本-2.4.1)_Node.js_Db2 - Fatal编程技术网

Node.js 面临来自DB2的频繁连接丢失(使用ibm_db版本-2.4.1)

Node.js 面临来自DB2的频繁连接丢失(使用ibm_db版本-2.4.1),node.js,db2,Node.js,Db2,我正在使用一个NodeJS应用程序,使用来自npm的ibm_db包创建与DB2服务器的连接。当应用程序首次启动时,连接成功,查询数据库将提供适当的结果。然而,经过一段时间后,应用程序不知何故失去了与数据库的连接 我正在使用连接池,在每次查询后都执行db.close()。 下一次对于后续查询,我再次执行pool.open(),我可以看到池仍然包含连接字符串,并且池大小为2 然而,我怀疑连接不知何故会过时,因为在这个时间点之后,查询数据库不会立即给出任何错误,也不会返回任何结果,我不断地看到空数组作

我正在使用一个NodeJS应用程序,使用来自npm的ibm_db包创建与DB2服务器的连接。当应用程序首次启动时,连接成功,查询数据库将提供适当的结果。然而,经过一段时间后,应用程序不知何故失去了与数据库的连接

我正在使用连接池,在每次查询后都执行db.close()。 下一次对于后续查询,我再次执行pool.open(),我可以看到池仍然包含连接字符串,并且池大小为2

然而,我怀疑连接不知何故会过时,因为在这个时间点之后,查询数据库不会立即给出任何错误,也不会返回任何结果,我不断地看到空数组作为响应,几分钟后它会记录日志-

SQL30081N检测到通信错误。沟通 正在使用的协议:“TCP/IP”。正在使用的通信API: “插座”。检测到错误的位置:“9.21.85.159”。 检测错误的通信功能:“发送”。协议 特定的错误代码:“10032”、“”、“”。SQLSTATE=08001

DB2实例托管在IBM Cloud-LINUX操作系统上, 我使用的是NodeJS版本-8,特别是8.11.5。我正在使用npm的ibm_db包进行间接TCP/IP连接

要解决此问题,我必须再次手动重新启动应用程序。但过了一段时间,这个问题再次出现

这个过程不断重复。 我不确定这是什么原因造成的。请帮帮我。我被这个问题困住了

下面是我用来连接数据库的代码。并处理查询

我已经尝试过更新ibm_db模块版本,但仍然不起作用

let Pool = ibmdb.Pool;
pool = new Pool({autoCleanIdle: true});
pool.setMaxPoolSize(2);
let cn = null;

if(process.env.NODE_ENV == 'production') {

    if(process.env.IBMDB2_CONN_STRING) cn = process.env.IBMDB2_CONN_STRING;
    else {
      console.error('##############################################################');
      console.error('##############################################################');
      console.error('##############################################################');
      console.error('Connection String for DB is Undefined.');
      console.error('##############################################################');
      console.error('##############################################################');
      console.error('##############################################################');
      process.exit(1);
    }
}

const runQuery= (query,paramsValueArray)=>{
  
    console.log('inside runQuery');
     return new Promise(async (resolve,reject)=>{
       console.log('inside promise')
       try {
         
        console.log(pool, '---POOL---');
        pool.open(cn, (err, db) => {
        console.log('inside pool.open')
        if(err) {
            console.log(err, '---error inside runQuery---');
            reject(err);
            return;
        }
        console.log(query, '----runquery----');
        console.log(paramsValueArray, '---params  value array---');
        db.query(query,paramsValueArray,function(err,data){
 
           if(err)  {
             console.log('error in executing Query, ----in runQuery----')
             db.close(() => {
               console.log('connection Disconnected');
             });
             reject(err);
             return;
           }
           
           console.log('no error in query')
            resolve(data);
            db.close(() => {
              console.log('connection Disconnected');
             
              return;
            });
            
               
            });
        })
       }
       catch(err) {
         reject(err);
       }
     });
 }; 
目前没有显示错误。但结果显示空数组

经过一段时间的查询处理后,一个错误显示-

SQL30081N检测到通信错误。沟通 正在使用的协议:“TCP/IP”。正在使用的通信API: “插座”。检测到错误的位置:“9.21.85.159”。 检测错误的通信功能:“发送”。协议 特定的错误代码:“10032”、“”、“”。SQLSTATE=08001


编辑您的问题以添加新的事实:您的Db2服务器操作系统(z/OS、i-series、linux/unix/windows)是什么?运行node.js的操作系统(给出确切版本)是什么?TCP/IP连接是直接连接到目标Db2数据库,还是间接连接(例如通过像Db2 connect这样的网关)?@mao,我已经编辑了这个问题,并添加了Db2服务器操作系统详细信息和Node.js版本。然而,我使用ibm_db包连接到DB2,所以我认为这是间接的,对吗?所以您的TCP/IP连接(来自一些未指定的Linux发行版/版本)是到ibm cloud上托管的DB2 LUW。可能是由于不活动或其他原因导致与Db2数据库的连接超时,并且池软件没有自动重新连接。您可能需要为自动重新连接配置db2dsdriver.cfg。您的node.js版本很旧,您是否在测试环境中尝试过10.16或更高版本?此问题可能与配置有关,您可能会从github上的node-ibm_db issues列表中获得更具体的建议。@mao如何配置db2sdriver.cfg?Db2实例服务取自IBM云。如何访问其配置文件。文件?请参阅github node-ibm_db上与“池”和“重新连接”相关的建议。IBM文档位于。