在SAS中,我们有一个实际上是ORACLE模式的库,今天我在尝试查询此库中的表时遇到了一个奇怪的事件。 常规SAS SQL查询:
proc sql;
delete from table where id=123;
quit;
挂了两个小时,通常需要几秒钟时间:
NOTE: PROCEDURE SQL used (Total process time):
real time 2:00:33.49
cpu time 0.03 seconds
在执行此操作时,我尝试删除ORACLE SQL DEVELOPER中的附近行,但它也挂起了处理删除请求。但是,删除不在这些行附近的行不会导致任何问题。那我怎么能找出可能的原因呢?我猜这是一种僵局。
答案 0 :(得分:1)
听起来有人锁定了您的会话尝试删除的行。您应该能够通过查询v $ session来发现这一点:
select sid, schemaname, osuser, terminal, program, event
from v$session
where type != 'BACKGROUND';
并检查您的会话是否有" enq:TX - 行锁争用" (或类似的)。如果是这样,那么你必须找出谁拥有阻止锁(如果你有权访问Toad的会话浏览器,这很容易做到,但谷歌应该放弃一些可以提供帮助的东西。或者,如果您的数据库是Oracle 11.2,那么有一个视图:v $ session_blockers应该查明阻塞会话),然后让他们提交或回滚他们的事务。