面对来自DB2的频繁连接丢失(使用ibm_db版本2.4.1)

时间:2019-06-13 08:11:48

标签: node.js db2

我正在使用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 OS上, 我正在使用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

0 个答案:

没有答案