-1
我有一個程序,它具有以下線甲骨文死鎖
if(some condition)
delete from table1;
記錄數大約是:10000
我面臨的僵局問題頻繁運行此程序時。我想在運行此過程時嘗試更新/插入一些其他會話。請你讓我知道如何處理,以避免死鎖問題。
我有一個程序,它具有以下線甲骨文死鎖
if(some condition)
delete from table1;
記錄數大約是:10000
我面臨的僵局問題頻繁運行此程序時。我想在運行此過程時嘗試更新/插入一些其他會話。請你讓我知道如何處理,以避免死鎖問題。
首先,您可以創建一個TRUNCATE,它在截斷表之前取出表上的排它鎖。
或者您可以使用DBMS_Lock確保只有一個用戶可以運行執行刪除的代碼。
我想先嚐試前者。
+1但是,如果其他會話正在修改表,則可能有其他會話正在從表中讀取。 'TRUNCATE'可能會導致其他會話失敗,我相信錯誤'ORA-08103:對象不再存在'。在你的兩個建議中,我會先嚐試後者。 –
我想可以確保他們使用「SELECT ... FROM table FOR UPDATE OF ...」來獲得一個共享排他鎖,所以truncate將無法獲得它的排他鎖。對於那些不害怕一點編碼的人來說,DBMS_Lock是一個好方法。 –
鎖定該表解決了我的問題。 – Srinivasan