Yesterday, I had started a script with two long-running queries before I my shift ended, and it was finished when I got back, as expected. The session was still connected to the database and waiting for some time. I was curious how long time the SQL took, and I forgot to set timing on in sqlplus.
SELECT S.SID, S.SERIAL#, S.STATUS "status", S.LOGON_TIME "logon time", S.PREV_EXEC_START "last op started", Q.LAST_ACTIVE_TIME "last op ended", S.STATE "state", S.EVENT "event", ROUND((S.WAIT_TIME_MICRO/1000000)/60/60,1) "total wait hrs", DECODE(S.TIME_REMAINING_MICRO,'-1', 'indefinite', '0','Wait timed out',NULL,'session not waiting') "remaining wait time", DECODE(S.TIME_SINCE_LAST_WAIT_MICRO, '0','Still waiting') "current status" FROM V$SESSION S JOIN V$SQL Q ON (S.SQL_ID = Q.SQL_ID) WHERE SID=1758;
The output below shows that my session was established at 14:33, and the last operation ended at 19:20. In other words, it took approximately 5 hours for the two statements in my script to finish:
SID | SERIAL# | status | logon time | last op started | last op ended | state | event | total wait hrs | remaining wait time | current status |
---|---|---|---|---|---|---|---|---|---|---|
1758 | 35360 | INACTIVE | 14.03.2017 14:33:42 | 14.03.2017 19:10:31 | 14.03.2017 19:20:52 | WAITING | SQL*Net message from client | 13,2 | indefinite | Still waiting |
Note that v$session column "seconds_in_wait" has been deprecated. You should use "wait_time_micro" instead.