我有此数据库连接。在注释所在的函数内部,有一个用于rest api的数据更新周期。数据已更新,但是当Oracle数据库中的数据更新时,连接可能会失败,此后所有后续更新的数据将获得int main()
。如何正确连接数据库,以确保没有故障?
undefined
答案 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/
请记住,问题仍然可能发生,因此您必须根据应用程序的需要处理错误。