如何避免与ORACLEDB断开连接? Nodejs的

时间:2019-03-18 11:16:07

标签: node.js node-oracledb

我有此数据库连接。在注释所在的函数内部,有一个用于rest api的数据更新周期。数据已更新,但是当Oracle数据库中的数据更新时,连接可能会失败,此后所有后续更新的数据将获得int main()。如何正确连接数据库,以确保没有故障?

undefined

2 个答案:

答案 0 :(得分:0)

通常,您在连接对象上添加侦听器,并在解除关联或失败时再次创建连接。进行较小的更改,您可以采用此方法,并使用侦听器检查连接是否可用(如果没有再次连接)。可能有多种原因导致连接关闭可以更好地处理异常,请检查是否仍处于连接状态并在出现错误的情况下重新连接。

或者您可以尝试此NPM,它将为您重新连接 https://www.npmjs.com/package/oracledb-autoreconnect

如果需要钙化,请ping我。

var dbConfig = {
    host: '----',
    user: '----',
    password: '----',
    database: '----',
    port: ----
};

var connection;
function handleDisconnect() {
connection = <obj>.getConnection(dbConfig);  
// Recreate the connection, since the old one cannot be reused.
connection.connect( function onConnect(err) {   
// The server is either down
    if (err) {                                  
// or restarting (takes a while sometimes).
        console.log('error when connecting to db:', err);
        setTimeout(handleDisconnect, 10000);
// We introduce a delay before attempting to reconnect,
    }                                           


 // to avoid a hot loop, and to allow our node script to
    });                                        
     // process asynchronous requests in the meantime.

     // If you're also serving http, display a 503 error.
        connection.on('error', function onError(err) {
        console.log('db error', err);
        if (err.code == 'PROTOCOL_CONNECTION_LOST') {
            handleDisconnect();                       
      // lost due to either server restart, or a
        } else {                                  
          // connnection idle timeout (the wait_timeout
            throw err;                          
            // server variable configures this)
            }
        });
    }
    handleDisconnect();

答案 1 :(得分:0)

您应该使用连接池。连接池具有built-in logic来检测有问题的连接并透明地创建新连接。有关更多详细信息,请参见关于创建REST API的本系列文章:https://jsao.io/2018/03/creating-a-rest-api-with-node-js-and-oracle-database/

请记住,问题仍然可能发生,因此您必须根据应用程序的需要处理错误。