Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
Oracle中长存储过程中的锁表_Oracle_Stored Procedures_Table Lock - Fatal编程技术网

Oracle中长存储过程中的锁表

Oracle中长存储过程中的锁表,oracle,stored-procedures,table-lock,Oracle,Stored Procedures,Table Lock,我在oracle中有一个存储过程,可以从8-10个表中删除行。 我必须从say table Person中删除一行。它有很多关系,如Person\u Health、Person\u Claims、Person\u Bills等。同样,子表与其他表也有关系 我编写了一个存储过程,并通过子表循环删除子记录,然后最终删除父表中的记录。我没有使用任何类型的锁/等待机制,我是一个初学者,不知道该使用哪一种 有时,这一程序会失败。正在转换SQL状态为“61000”、错误代码为“60”的SQLExceptio

我在oracle中有一个存储过程,可以从8-10个表中删除行。 我必须从say table Person中删除一行。它有很多关系,如Person\u Health、Person\u Claims、Person\u Bills等。同样,子表与其他表也有关系

我编写了一个存储过程,并通过子表循环删除子记录,然后最终删除父表中的记录。我没有使用任何类型的锁/等待机制,我是一个初学者,不知道该使用哪一种

有时,这一程序会失败。正在转换SQL状态为“61000”、错误代码为“60”的SQLException,消息[ORA-00060:在等待资源时检测到死锁

问题是,它经常失败,因为在执行此存储过程时,select/insert/UPDATERESQUEST从应用程序的不同部分访问这些表

是否有一种方法可以在删除时单独锁定表?或者有其他更好的方法可以做到这一点


注意:对于这些表,一种方法可能是启用DELETE CASCADE,这将自动删除子记录,但这是不可能的。

在您的过程中了解这一点,在更新之前,您可以检查V$Locked_对象并决定是否更新失败是什么意思?您是否尝试选择NOWAIT和NOWAIT进行更新获取ORA-00054:资源正忙,并在指定NOWAIT或超时过期的情况下获取?或其他情况?如果您只是删除child1、删除child2,…则在等待其他会话提交时等待很长时间不会出错。由于访问这些表的select/insert/updaterequests,该会话经常失败从应用程序的不同部分-嗯,如果您长时间锁定表,然后您的应用程序开始失败,或者最后挂起。Usesr可能开始比较..为什么不能进行删除级联?@tbone,因为DBA这么说