I had already tried the SQLNET feature of dead connection detection. I tried setting SQLNET.EXPIRE_TIME, but that does not seem to help. The delay which we see is still there. It takes Oracle some time to recognize that the session is dead and returning a FALSE from DBMS_SESSION.IS_SESSION_ALIVE.

Yes, as you righly pointed out and INACTIVE session does not mean that it is dead. We are only concerned with applications which have crashed.

Actually in our application we are using logical locking of rows. When a user takes a row for updating, we update a column in the row which signifies the sessionid of the person who has locked that row. When that user does a save the sessionid in the row is cleared. If that user crashes in between then that session id is left in that row. So when some other person tries to do something to that row and finds a sessionid there, we check to see if that session id is still alive(That is where DBMS_SESSION.IS_SESSION_ALIVE comes into picture) to check if the lock is a legitimate one.

Now the actual problem faced by us is that DBMS_SESSION.IS_SESSION_ALIVE still returns TRUE for sessions which have crashed for for as long as 5 minutes after the crash sometimes. I was looking if there was any way by which Oracle allows you to tune the PMON into doing this clearing more frequently.