2011-09-21 27 views
8

突然我的更新查询没有执行。我可以让选择查询,但是当我尝试更新记录数据库无限地挂起。我甚至尝试从SQL加,没有任何反应。Oracle数据库在UPDATE查询中无限期地悬挂着

+1

请问,你能更明确吗?我们无法猜测您的系统上发生了什么。你知道什么?你检查了什么?你的系统如何工作,有多少用户等?更新查询是什么样的?什么样的DML在同一张桌子上同时运行? –

+0

您可以注销并再次打开行吗?您是否处于ARCHIVELOG模式?您是否在另一个会话中确定了当前更新的未提交更改?多一点的信息将得心应手.... – Ollie

回答

23

您很可能会为同一组记录创建另一个未提交的事务处理,因此它们被锁定以进行该事务处理。

最有可能的是,锁定它们,在另一个事务中运行相同的UPDATE

只要提交/回滚您的交易,你应该没问题。

+2

现在,**答案是我所说的一个受过教育的猜测;-) –

+3

是的。是的。当你有一段时间在你身边并且你是初学者的时候,你会得到那个力量是强有力的氛围,并且在他们告诉你所有事情之前你知道他们的问题。 :)但我并不总是对的,当然。 –

+0

我知道盛传。它与“说不再进一步观察”:) –

12

此查询将显示谁阻止您的更新。执行该挂更新,然后在运行此另一个会话:

select s1.username || '@' || s1.machine || 
    ' (SID=' || s1.sid || ') is blocking ' 
    || s2.username || '@' || s2.machine || ' (SID=' || s2.sid || ') ' AS blocking_status 
    from v$lock l1 join v$lock l2 on (l1.id1 = l2.id1 and l2.id2 = l2.id2) 
       JOIN v$session s1 ON (s1.sid = l1.sid) 
       JOIN v$session s2 ON (s2.sid = l2.sid) 
    WHERE l1.BLOCK=1 and l2.request > 0; 

编辑:

要正确地归因于这,它看起来像我这样那儿剽窃前阵子从ORAFAQ

+0

我必须为其中一个添加书签。非常好! –

+1

我用了很多。希望我能记得我在哪里找到那个。可能是Tom Kyte特别的。更新:我想我在这里:http://orafaq.com/node/854 – DCookie

+0

我们如何停止或终止任务? – user3141985