TNS监听器找不到匹配协议栈的可用处理程序? 在使用node-oracledb的nodejs中

即使我完成我的查询执行后释放连接,它是抛出错误称为“TNS侦听器无法find可用的匹配协议栈处理程序”。 对于第2到5次,它工作正常。但是,经过几个请求(随机),它抛出这种types的错误。 你可以帮助我什么可能是问题。 我使用express,oracledb和oracle 10g express版本。

注:我是初学者节点和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(); } }) }); } }) } }) } }) 

  • 您的池默认值看起来像旧的示例/ webapp.js的默认值。 我会放弃最大池大小的初始testing,当作为一个单一的用户黑客入侵。 最近,示例应用程序被更改为使用与硬编码默认值相同的较低值。

  • 确保你是最新的节点oracledb。

  • 你可能会发现使用像“asynchronous”的东西,使处理错误更容易。 请参阅示例/ plsqlarray.js一个示例。

  • 如果您正在向configuration不足的数据库加载负载,则可能会看到ORA-12516错误。 你可能需要碰撞数据库的'进程'设置,例如'alter system set processes = 100 scope = spfile'' 运行PHP回归testing时,我用默认的Oracle XE 11g来查看错误。