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