Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
消息:ORA-00060:在oracle事务中等待资源时检测到死锁_Oracle_Node Oracledb - Fatal编程技术网

消息:ORA-00060:在oracle事务中等待资源时检测到死锁

消息:ORA-00060:在oracle事务中等待资源时检测到死锁,oracle,node-oracledb,Oracle,Node Oracledb,我有以下运行事务的代码。我不断收到错误消息,如:ORA-00060:在等待资源时检测到死锁。但如果第二次执行同样的操作,则效果良好。代码在任何地方看起来都有问题吗 async transactionData(postData) { var options = { autoCommit: false }; return new Promise(async (resolve, reject) => {

我有以下运行事务的代码。我不断收到错误消息,如:ORA-00060:在等待资源时检测到死锁。但如果第二次执行同样的操作,则效果良好。代码在任何地方看起来都有问题吗

async transactionData(postData) {
        var options = {
            autoCommit: false
        };
        return new Promise(async (resolve, reject) => {
            try {
                let transactionError = false;
            let connection = await this.getConnection();
                let transactionErrorMsg = '';
                for (let i = 0; i < postData.length; i++) {
                    const sql = postData[i].query;
                    const binds = postData[i].binds;

                    try {
                        await connection.execute(sql, binds, options);
                    } catch (e) {
                        transactionErrorMsg = e.message;
                        transactionError = true;
                        console.log('Transaction error', transactionErrorMsg);
                        logger.error(transactionErrorMsg);
                        break;
                    }
                }
                if (transactionError) {
                    connection.rollback((err) => {
                        if (err) {
                            resolve({ "status": false, "message": err })
                        } else {
                            resolve({ "status": false, "message": `Transaction failed due to ${transactionErrorMsg}` })
                        }
                    });
                } else {
                    connection.commit((err) => {
                        if (err) {
                            resolve({ "status": false, "message": err })
                        } else {
                            resolve({ "status": true, "message": 'Transaction passed' })
                        }
                    });
                }
                connection.release();
            } catch (e) {
                resolve({ "status": false, "message": e.message })
            }
        })
    }
async transactionData(postData){
变量选项={
自动提交:错误
};
返回新承诺(异步(解析、拒绝)=>{
试一试{
让transactionError=false;
让connection=等待这个。getConnection();
让transactionErrorMsg='';
for(设i=0;i{
如果(错误){
解析({“状态”:false,“消息”:err})
}否则{
解析({“status”:false,“message:`Transaction由于${transactionErrorMsg}`}而失败)
}
});
}否则{
connection.commit((err)=>{
如果(错误){
解析({“状态”:false,“消息”:err})
}否则{
解析({“status”:true,“message”:“事务已通过”})
}
});
}
连接。释放();
}捕获(e){
解析({“status”:false,“message”:e.message})
}
})
}

您是当时唯一访问同一表的用户吗?因为,你不能自己死锁,你需要其他人。是的,我是唯一的用户,我正在发送8-10个查询以在事务中执行。这有关系吗?如果这些查询使用单独的会话,它可能会使用相同的会话。理想情况下,它使用相同的会话,因为我只使用一个连接,在执行所有查询之后,我会释放该连接。这是否意味着那些8-10个查询是串行执行的,一个接一个?如果是这样,如果是相同的事务和相同的会话,那么不-我不认为它们可以相互阻止。