消息:ORA-00060:在oracle事务中等待资源时检测到死锁
我有以下运行事务的代码。我不断收到错误消息,如:ORA-00060:在等待资源时检测到死锁。但如果第二次执行同样的操作,则效果良好。代码在任何地方看起来都有问题吗消息:ORA-00060:在oracle事务中等待资源时检测到死锁,oracle,node-oracledb,Oracle,Node Oracledb,我有以下运行事务的代码。我不断收到错误消息,如:ORA-00060:在等待资源时检测到死锁。但如果第二次执行同样的操作,则效果良好。代码在任何地方看起来都有问题吗 async transactionData(postData) { var options = { autoCommit: false }; return new Promise(async (resolve, reject) => {
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个查询是串行执行的,一个接一个?如果是这样,如果是相同的事务和相同的会话,那么不-我不认为它们可以相互阻止。