[英]What is the reason for ORA-00054 error?
來自Oracle的文檔: -
ORA-00054 resource busy and acquire with NOWAIT specified
Cause: Resource interested is busy.
Action: Retry if necessary.
在我們的代碼中,我們發出一個SELECT FOR UPDATE NOWAIT
命令來鎖定我們即將更新的行。
現在的邏輯是,如果它返回SQL錯誤54
,則假定另一個用戶正在嘗試更新同一記錄。 這個邏輯有效嗎?
從Oracle的文檔看起來更像是如果數據庫不堪重負,那么這也可能導致拋出此錯誤。
當我們只使用上面的SQL命令時,出現此錯誤的可能原因是什么?
SELECT ... FOR UPDATE嘗試獲取表上的RS(行共享)鎖和行上的X(eXclusive)鎖。 如果另一個會話對表具有獨占鎖(例如,創建索引)或對行執行獨占鎖(更新,刪除或選擇更新),則查詢將等待另一個事務釋放鎖(提交或回滾)通常)除非你指定了NOWAIT。
所以一種可能性是不指定NOWAIT。
我不承認數據庫可能因為“不堪重負”而拋出此錯誤的情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.