When does a session which is "Marked for Kill" actually die?
Sessions which are active or using I/O or running a Transaction aren't killed instantly, but are Marked for kill.
Are they killed when they complete, or is there some kind of clean up process which runs periodically and kills them off?
Any help appreciated
Killing the session will not clear the locks. The session on the remote database will remain idle waiting for input until the network read times out. Only then the kill session is processed, and locks are released.
Refer to Doc ID: Note:100859.1
If you did not have access to metalink, let me know, I can send a copy of the same.
Many thanks, Prasad.
I've looked on Metalink and read the note (and some others).
It seems the recommended course is to use ORAKILL to remove the Server thread for the user which owns the KILLED process.
ORAKILL seems to be an NT Utility - whereas we're running 8i on HP-UX. I can't locate the utility yet. Don't know if it's NT only.
The other option (which is more for the future than the present) is to set SQLNET.EXPIRE_TIME in SQLNET.ORA which I shall do.
My particular problem is made slighly more tricky in that the client process which the server still thiks is pointing to the Killed Session has itself died, so there will be no further requests by which the server can inform it that it's session has died, thereby killing the thread.
The only solution may have to wait for it to complete or for the network connection to timeout.
Anyway, many thanks for your help. Metalink is a valuable resource.
Use ps -ef|grep <string>
to find the process you want to kill, where string is the session of the user you killed at databse level. Thats nothing but equivalent of 'orakill' on NT.