2011-09-21 51 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