2013-08-30 41 views
-1

我有一個程序,它具有以下線甲骨文死鎖

if(some condition) 
    delete from table1; 

記錄數大約是:10000

我面臨的僵局問題頻繁運行此程序時。我想在運行此過程時嘗試更新/插入一些其他會話。請你讓我知道如何處理,以避免死鎖問題。

回答

1

首先,您可以創建一個TRUNCATE,它在截斷表之前取出表上的排它鎖。

或者您可以使用DBMS_Lock確保只有一個用戶可以運行執行刪除的代碼。

我想先嚐試前者。

+0

+1但是,如果其他會話正在修改表,則可能有其他會話正在從表中讀取。 'TRUNCATE'可能會導致其他會話失敗,我相信錯誤'ORA-08103:對象不再存在'。在你的兩個建議中,我會先嚐試後者。 –

+0

我想可以確保他們使用「SELECT ... FROM table FOR UPDATE OF ...」來獲得一個共享排他鎖,所以truncate將無法獲得它的排他鎖。對於那些不害怕一點編碼的人來說,DBMS_Lock是一個好方法。 –

+0

鎖定該表解決了我的問題。 – Srinivasan