TNS 侦听器找不到具有匹配协议栈的可用处理程序?在 nodejs 中使用 node-oracledb
TNS listener could not find available handler with matching protocol stack? in nodejs using node-oracledb
即使我在完成查询执行后释放连接,它也会抛出名为 "TNS listener could not find available handler with matching protocol stack" 的错误。
对于前 2 到 5 次它正在工作 fine.But,在几次请求(随机)之后,它会抛出这种类型的错误。你能帮我看看可能是什么问题吗?
我正在使用 express、oracledb 和 oracle 10g 快捷版。
注意:我是node和oracledb的初学者
以下是我的代码,当我收到请求时:
oracledb.createPool({
user : "harsha",
password : "harsha",
connectString : "localhost/XE",
poolMax : 44,
poolMin : 2,
poolIncrement : 5,
poolTimeout : 4
}, function(err, pool) {
if(err) {
errorHandler(res);
console.log("Error in pooling with oracledb"+err);
return false;
}else {
console.log("Connected to oracledb successfully");
//select r, v1.* from (select rownum r , v.* from (select * from employee) v) v1 where r>0 and r<=10;
var gen_query = "select r, v1.* from (select rownum r , v.* from ("+query+") v) v1 where r>"+start_sequence+" and r<="+(end_sequence)+"";
// connection.execute("select count(*) c from "+tname, function(err, result) {
// if(err) {
// res.json({
// dbStatus: 'E',
// data:"Invlaid syntax "+err
// });
// return false;
// }else {
// console.log(result);
// totalRows = result.rows[0].C;
// console.log(totalRows);
// connection.execute(gen_query , function(err, result) {
// if(err) {
// console.log("Error in results"+err);
// res.json({
// dbStatus: 'E',
// data:"Invlaid syntax "+err
// });
// //res.status(200).send(err);
// //errorHandler(res);
// return false;
// }else {
// console.log(result);
// console.log(totalRows);
// if(end_sequence < totalRows)
// {
// res.json({
// dbStatus: 'S',
// data: result,
// moreRowsToFetch: true
// });
// }else {
// res.json({
// dbStatus: 'S',
// data: result,
// moreRowsToFetch: false
// });
// }
// }
// });
// }
// })
pool.getConnection(function(error, connection) {
if(err) {
console.log("Error in connecting to oracledb"+err);
}else {
connection.execute("select count(*) c from "+tname, function(err, result) {
if(err) {
res.json({
dbStatus: 'E',
data:"Invlaid syntax "+err
});
connection.release(function(err) {
if(err) {
console.log("Wrong with releasing connection");
}else {
console.log("Connection is released");
//res.end();
}
})
return false;
}else {
console.log(result);
totalRows = result.rows[0].C;
console.log(totalRows);
connection.execute(gen_query , function(err, result) {
if(err) {
console.log("Error in results"+err);
res.json({
dbStatus: 'E',
data:"Invlaid syntax "+err
});
//res.status(200).send(err);
//errorHandler(res);
}else {
if(end_sequence < totalRows) {
res.json({
dbStatus: 'S',
data: result,
moreRowsToFetch: true
});
}else {
res.json({
dbStatus: 'S',
data: result,
moreRowsToFetch: false
});
}
}
connection.release(function(err) {
if(err) {
console.log("Wrong with releasing connection");
}else {
console.log("Connection is released");
//res.end();
}
})
});
}
})
}
})
}
})
您的池默认值看起来像旧的 example/webapp.js 默认值。我会在初始测试和作为单个用户进行黑客攻击时放弃最大池大小。最近,示例应用已更改为使用与硬编码默认值相同的较低值。
确保您使用的是最新的 node-oracledb。
您可能会发现使用 'async' 之类的东西可以更轻松地处理错误。参见 examples/plsqlarray.js 的一个示例。
如果您向配置不足的数据库施加负载,您可能会看到 ORA-12516 错误。您可能需要更改 DB 'processes' 设置,例如'alter system set processes=100 scope=spfile;' 我曾经在 运行 PHP 回归测试时看到默认 Oracle XE 11g 的错误。
即使我在完成查询执行后释放连接,它也会抛出名为 "TNS listener could not find available handler with matching protocol stack" 的错误。 对于前 2 到 5 次它正在工作 fine.But,在几次请求(随机)之后,它会抛出这种类型的错误。你能帮我看看可能是什么问题吗? 我正在使用 express、oracledb 和 oracle 10g 快捷版。
注意:我是node和oracledb的初学者
以下是我的代码,当我收到请求时:
oracledb.createPool({
user : "harsha",
password : "harsha",
connectString : "localhost/XE",
poolMax : 44,
poolMin : 2,
poolIncrement : 5,
poolTimeout : 4
}, function(err, pool) {
if(err) {
errorHandler(res);
console.log("Error in pooling with oracledb"+err);
return false;
}else {
console.log("Connected to oracledb successfully");
//select r, v1.* from (select rownum r , v.* from (select * from employee) v) v1 where r>0 and r<=10;
var gen_query = "select r, v1.* from (select rownum r , v.* from ("+query+") v) v1 where r>"+start_sequence+" and r<="+(end_sequence)+"";
// connection.execute("select count(*) c from "+tname, function(err, result) {
// if(err) {
// res.json({
// dbStatus: 'E',
// data:"Invlaid syntax "+err
// });
// return false;
// }else {
// console.log(result);
// totalRows = result.rows[0].C;
// console.log(totalRows);
// connection.execute(gen_query , function(err, result) {
// if(err) {
// console.log("Error in results"+err);
// res.json({
// dbStatus: 'E',
// data:"Invlaid syntax "+err
// });
// //res.status(200).send(err);
// //errorHandler(res);
// return false;
// }else {
// console.log(result);
// console.log(totalRows);
// if(end_sequence < totalRows)
// {
// res.json({
// dbStatus: 'S',
// data: result,
// moreRowsToFetch: true
// });
// }else {
// res.json({
// dbStatus: 'S',
// data: result,
// moreRowsToFetch: false
// });
// }
// }
// });
// }
// })
pool.getConnection(function(error, connection) {
if(err) {
console.log("Error in connecting to oracledb"+err);
}else {
connection.execute("select count(*) c from "+tname, function(err, result) {
if(err) {
res.json({
dbStatus: 'E',
data:"Invlaid syntax "+err
});
connection.release(function(err) {
if(err) {
console.log("Wrong with releasing connection");
}else {
console.log("Connection is released");
//res.end();
}
})
return false;
}else {
console.log(result);
totalRows = result.rows[0].C;
console.log(totalRows);
connection.execute(gen_query , function(err, result) {
if(err) {
console.log("Error in results"+err);
res.json({
dbStatus: 'E',
data:"Invlaid syntax "+err
});
//res.status(200).send(err);
//errorHandler(res);
}else {
if(end_sequence < totalRows) {
res.json({
dbStatus: 'S',
data: result,
moreRowsToFetch: true
});
}else {
res.json({
dbStatus: 'S',
data: result,
moreRowsToFetch: false
});
}
}
connection.release(function(err) {
if(err) {
console.log("Wrong with releasing connection");
}else {
console.log("Connection is released");
//res.end();
}
})
});
}
})
}
})
}
})
您的池默认值看起来像旧的 example/webapp.js 默认值。我会在初始测试和作为单个用户进行黑客攻击时放弃最大池大小。最近,示例应用已更改为使用与硬编码默认值相同的较低值。
确保您使用的是最新的 node-oracledb。
您可能会发现使用 'async' 之类的东西可以更轻松地处理错误。参见 examples/plsqlarray.js 的一个示例。
如果您向配置不足的数据库施加负载,您可能会看到 ORA-12516 错误。您可能需要更改 DB 'processes' 设置,例如'alter system set processes=100 scope=spfile;' 我曾经在 运行 PHP 回归测试时看到默认 Oracle XE 11g 的错误。