Evo par SQL upita pomoću koji je moguće vidjeti korisne informacije o korisničkim sesijama na Oracle bazi podataka.
Broj trenutnih sesija na na bazi:
set lin 1000
select count(s.status) TOTAL_SESSIONS
from v$session s;
Ukupan broj NEAKTIVNIH korisničkih sesija:
set lin 1000
select count(s.status) INACTIVE_SESSIONS
from v$session s, v$process p
where
p.addr=s.paddr and
s.status='INACTIVE';
Broj sesija koje su NEAKTIVNE više od jedan sat:
select count(s.status) "INACTIVE SESSIONS > 1HOUR "
from gv$session s, v$process p
where
p.addr=s.paddr and
s.last_call_et > 3600 and
s.status='INACTIVE';
Broj svih AKTIVNIH korisničkih sesija:
select count(s.status) ACTIVE_SESSIONS
from gv$session s, v$process p
where
p.addr=s.paddr and
s.status='ACTIVE';
Detalji o svim korisničkim sesijama koje su NEAKTIVNE duže od jedan sat:
set pagesize 40
col INST_ID for 99
col spid for a10
set linesize 150
col PROGRAM for a10
col action format a10
col logon_time format a16
col module format a13
col cli_process format a7
col cli_mach for a15
col status format a10
col username format a10
col last_call_et_Hrs for 9999.99
col sql_hash_value for 9999999999999col username for a10
set linesize 152
set pagesize 80
col "Last SQL" for a60
col elapsed_time for 999999999999
select p.spid, s.sid,s.last_call_et/3600 last_call_et_Hrs ,s.status,s.action,s.module,s.program,t.disk_reads,lpad(t.sql_text,30) "Last SQL"
from gv$session s, gv$sqlarea t,gv$process p
where s.sql_address =t.address and
s.sql_hash_value =t.hash_value and
p.addr=s.paddr and
s.status='INACTIVE'
and s.last_call_et > (3600)
order by last_call_et;
Na kraju ukoliko odlučite da prekinete neku NEAKTIVNU korisničku sesiju uradite sledeće.
Saznajte potrebne parametre:
spool Inactive_sessions.txt
set lin 1000
select sid, serial#, username, lockwait, status, schemaname, logon_time, seconds_in_wait, state from v$session where status='INACTIVE';
spool off
Zabilježite parametre SID i SERIAL# za onu sesiju koju želite prekinuti i izvršite komandu:
ALTER SYSTEM KILL SESSION 'sid,serial#';