手動取消Request時出現下圖的錯誤:Could not lock request
無法取消就只能執行SQL來取消Request,因為該Request的Session已經完成,於是執行下列的SQL來修改狀態:
update fnd_concurrent_requests set phase_code='C',status_code='X' where request_id in (186153,186133);
等了三分多鐘還沒有完成,只updtae兩筆資料不應該會等這麼久,於是再開另一個Toad並執行下列檢查Lock的SQL:
select distinct vs.sid,vs.serial#, vs.username,vs.status,vs.osuser,vs.process,vs.machine,vs.terminal,vs.program,vs.sql_address,
vs.module, vs.logon_time,vs.blocking_session,vl.block as "Lock BLOCK",vq.sql_text
from v$session vs,v$lock vl ,v$sql vq
where vl.sid=vs.sid
and vq.sql_id=vs.sql_id
and vs.blocking_session in (select sid from v$lock where block>0)
union
select distinct vs.sid,vs.serial#,vs.username,vs.status,vs.osuser,
vs.process,vs.machine,vs.terminal,vs.program,vs.sql_address,vs.module,
vs.logon_time,vs.blocking_session,
vl.block as "Lock BLOCK",
vq.sql_text
from v$session vs,v$lock vl,v$sql vq
where vl.sid=vs.sid
and vq.sql_id=vs.sql_id
and vl.block>0
order by logon_time;
發現update的session被另一個session卡住,等待事件是SQL*Net message from client,猜測應該是當時RPM程式卡住造成沒有回應。
所以Request被卡住無法更新訊息,把Lock的Session kill掉之後, 本來想由EBS來取消Request,結果出現下列的錯誤:
只好重新執行update Request的SQL,來更新狀態就成功了。
update fnd_concurrent_requests set phase_code='C',status_code='X' where request_id in (186153,186133);
後續補充:
因為系統是Solarix 10,所以後續有發現還有系統的process需要刪除,如下圖可以發現有兩個相關的process,一個是FNDLIBR(Concurrent的Processor),另一個是由FNDLIBR延伸出來有zut8zht語系轉換程式,並且可以知道使用者與Request ID,如下圖的110024.41412619。
接著在搜尋Request ID:41412619,可以發現還有lp的Solaris列印程式,所以要將這些process也一併刪掉