龙空技术网

ORA-00060:等待资源时检测到死锁

爱码僧 59

前言:

如今朋友们对“oraclepragma”都比较珍视,朋友们都想要剖析一些“oraclepragma”的相关知识。那么小编在网上搜集了一些有关“oraclepragma””的相关内容,希望我们能喜欢,朋友们一起来了解一下吧!

场景描述:

在一个函数或者存储过程中调用另一个含有自治函数的函数或者过程时,则极有可能出现报错:ORA-00060: 等待资源时检测到死锁

问题现象:

1、在更新A表的某一条记录S1、并且未提交;

2、然后再调用一个含有自治函数(procedure ***(serialno VARCHAR2,boType VARCHAR2) IS PRAGMA AUTONOMOUS_TRANSACTION;)的存储过程或函数,且该被调函数会更新A表的同一条记录S1;

此时会发生Oracle 系统报错“ORA-00060: 等待资源时检测到死锁”,

原因分析:

由于主调函数或过程中被更新的那条记录S1更新后未被提交,Oracle 会自动锁定该行数据,及发生行锁行为,被调函数再去更新已经被锁定的数据时会获取不到行锁,导致该错误的发生。

解决办法:不调用含有自治函数的函数或存储过程,将逻辑搬到主调函数中,和主调函数使用同一个事务。即可解决该错误

ps: Oracle目前还未公开自己的数据库锁!

标签: #oraclepragma