客戶付款過程中客戶端斷電,重新登入後無法繼續付款,報錯 FRM-40501: ORACLE error: unable to reserve record for update or delete。顯為斷電導致 Client Process 未釋放鎖。
在 Forms 執行參數加入 DEBUG=YES 或設定 FORMS90_TRACE_PATH、FORMS90_TRACE_FILE。
關鍵片段:
PARSING IN CURSOR #70 ...
SELECT LAST_DOCUMENT_NUM+1 FROM AP_CHECK_STOCKS
WHERE CHECK_STOCK_ID=:b1 FOR UPDATE OF LAST_DOCUMENT_NUM NOWAIT
...
ERROR #70: err=54
$ oerr ora 54
00054: resource busy and acquire with NOWAIT specified
Cause: Interested resource is busy.
Action: Retry if necessary.
明確為 FOR UPDATE NOWAIT 遭遇資源鎖定。
DBA_OBJECTS 確認 AP_CHECK_STOCKS 為視圖;USER_VIEWS) 找出基表 (如 AP_CHECK_STOCKS_ALL);V$LOCKED_OBJECT 找到 SESSION_ID;ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE; 釋放鎖。CLIENT_INFO 環境參數的視圖,V$LOCKED_OBJECT 僅顯示基表鎖,需透過視圖定義反推;FOR UPDATE NOWAIT 適合高併發短交易,但需應用層處理 ORA-00054 重試邏輯;ERP 死鎖排查核心:Trace 定位 SQL → 識別視圖基表 → 查鎖殺 Session → 根因修正 (應用重試邏輯/心跳機制)。建立標準化排查手冊,可將類似故障 MTTR 從小時級降至分鐘級。