Hi,
I am on database 10.2.0.5, windows x64.
A developer calls me and tells me there are locks on 3 tables, and the locks are not released.
So I run this to see which objects are locked by which session
select vlo.object_id, vlo.session_id, vlo.oracle_username, vlo.process
, DECODE(vlo.LOCKED_MODE, 0,'NONE', 1,'NULL', 2,'ROW SHARE', 3,'ROW EXCLUSIVE', 4,'SHARE', 5,'SHARE ROW EXCLUSIVE', 6,'EXCLUSIVE', NULL) LOCK_MODE
, do.owner, do.object_name, do.object_type
, vs.saddr, vs.serial#, vs.paddr, vs.username, vs.ownerid, vs.status, vs.server, vs.schemaname, vs.osuser, vs.machine, vs.program, vs.type, vs.logon_time, vs.last_call_et
, vs.blocking_session_status, vs.event#, vs.event, vs.wait_class#, vs.wait_class, vs.wait_time, vs.seconds_in_wait, vs.state
from v$locked_object vlo
inner join dba_objects do on (vlo.object_id = do.object_id)
left outer join v$session vs on (vlo.session_id = vs.sid)
-----------
I get (after finding out my table locks come from SID 514)
OBJECT_ID SESSION_ID ORACLE_USERNAME PROCESS LOCK_MODE OWNER OBJECT_NAME OBJECT_TYPE SADDR SERIAL# PADDR USERNAME OWNERID STATUS SERVER SCHEMANAME OSUSER MACHINE PROGRAM TYPE LOGON_TIME LAST_CALL_ET BLOCKING_SESSION_STATUS EVENT# EVENT WAIT_CLASS# WAIT_CLASS WAIT_TIME SECONDS_IN_WAIT STATE
---------------------- ---------------------- ------------------------------ ------------ ------------------- ------------------------------ -------------------------------------------------------------------------------------------------------------------------------- ------------------- ---------------- ---------------------- ---------------- ------------------------------ ---------------------- -------- --------- ------------------------------ ------------------------------ ---------------------------------------------------------------- ---------------------------------------------------------------- ---------- ------------------------- ---------------------- ----------------------- ---------------------- ---------------------------------------------------------------- ---------------------- ---------------------------------------------------------------- ---------------------- ---------------------- -------------------
373122 514 IRMFIN 22AB7298 ROW EXCLUSIVE IRMFIN IC_PRODUCT_STATUS TABLE 000007FF3E1A9070 1301 000007FF3E639120 IRMFIN 2147483644 INACTIVE DEDICATED IRMFIN IRMTEST IRM DSA0:[GEMBASE730.][RUN]GEM.EXE USER 2012/09/05 13:55:51 702 NO HOLDER 263 SQL*Net message from client 6 Idle 0 702 WAITING
373025 514 IRMFIN 22AB7298 ROW EXCLUSIVE IRMFIN IC_BIN_DETAIL_STATUS TABLE 000007FF3E1A9070 1301 000007FF3E639120 IRMFIN 2147483644 INACTIVE DEDICATED IRMFIN IRMTEST IRM DSA0:[GEMBASE730.][RUN]GEM.EXE USER 2012/09/05 13:55:51 702 NO HOLDER 263 SQL*Net message from client 6 Idle 0 702 WAITING
373055 514 IRMFIN 22AB7298 ROW EXCLUSIVE IRMFIN IC_LOT_STATUS TABLE 000007FF3E1A9070 1301 000007FF3E639120 IRMFIN 2147483644 INACTIVE DEDICATED IRMFIN IRMTEST IRM DSA0:[GEMBASE730.][RUN]GEM.EXE USER 2012/09/05 13:55:51 702 NO HOLDER 263 SQL*Net message from client 6 Idle 0 702 WAITING
-----------
I run it again and I get something different, this time the lock is still there, but no session. select * from v$session where sid= 514 returns nothing.
I get
OBJECT_ID SESSION_ID ORACLE_USERNAME PROCESS LOCK_MODE OWNER OBJECT_NAME OBJECT_TYPE SADDR SERIAL# PADDR USERNAME OWNERID STATUS SERVER SCHEMANAME OSUSER MACHINE PROGRAM TYPE LOGON_TIME LAST_CALL_ET BLOCKING_SESSION_STATUS EVENT# EVENT WAIT_CLASS# WAIT_CLASS WAIT_TIME SECONDS_IN_WAIT STATE
---------------------- ---------------------- ------------------------------ ------------ ------------------- ------------------------------ -------------------------------------------------------------------------------------------------------------------------------- ------------------- ---------------- ---------------------- ---------------- ------------------------------ ---------------------- -------- --------- ------------------------------ ------------------------------ ---------------------------------------------------------------- ---------------------------------------------------------------- ---------- ------------------------- ---------------------- ----------------------- ---------------------- ---------------------------------------------------------------- ---------------------- ---------------------------------------------------------------- ---------------------- ---------------------- -------------------
373122 514 ROW EXCLUSIVE IRMFIN IC_PRODUCT_STATUS TABLE
373025 514 ROW EXCLUSIVE IRMFIN IC_BIN_DETAIL_STATUS TABLE
373055 514 ROW EXCLUSIVE IRMFIN IC_LOT_STATUS TABLE
When I run the query later, I sometimes get another session, but the lock stays. It seems here, that I am catching the same SID on new sessions, but it is probably a different serial # than the original session locking the table rows.
I get nothing from
select * from dba_waiters;
select * from dba_blockers;
Now why are those 3 tables row locked on some rows and I can't find the session responsible? The developer tells me his application crashed and the rows are locked since.
So far ( keep in mind I am not a locking expert) the only way I found to release the locks is a DB bounce, its a test DB so no biggy.
Is this a bug? Am I missing something?
This is the second time this has happened. How can I solve this issue?
Best wishes to all.