Site icon ScriptDBA.com

Query sessioni Oracle recuperate dalla DATA

Query per recuperare le sessioni Oracle antecedenti una determinata DATA e ora.

Nell’articolo Query sessioni Oracle recuperate dalla DATA, possiamo controllare le sessioni Oracle antecedenti una determinata data o ora, utilizzando la seguente query.

Qualche volta mi è capitato di dover individuare le sessioni più “vecchie” presenti nel database. Fino a qui nulla di complicato. Tuttavia per via delle numerose sessioni può risultare difficile individuarle.

Come possiamo fare?

Con la seguenti query, possiamo individuare con facilità le sessioni per esempio antecedenti un mese.

Basta impostare la data che vogliamo nella condizione di where e avremo a video tutte le sessioni precedenti la data che abbiamo impostato.

Inoltre possiamo vedere le prime righe che riguardano la formattazione delle tabelle, per avere una visuale accettabile.

Inoltre i campi che andremo a selezionare sono:

LOGON_TIME – Indica l’orario in cui è iniziata la sessione.
STATUS – Lo stato della sessione se ACTIVE o INACTIVE.
INST_ID – Nel caso di un RAC (Real Application Cluster), il numero dell’istanza dove è presente la sessione.
SQL_ID – Il codice identificativo della query.
PROCESS – Il processo del sistema operativo.
PROGRAM – Il client che state utilizzando.
SCHEMANAME – L’utente con è partita la sessione Oracle.
SID – Il codice identificativo della sessione Oracle.
SERIAL# – Il codice seriale univoco di una sessione Oracle.
Succesivamente:

SPID – Processo del sistema operativo legato alla sessione Oracle.
OSUSER – L’utente del sistema operativo con cui è partita la sessione Oracle.
MACHINE – Il nome del client da dove parte la sessione Oracle.
TERMINAL – Il nome del sistema operativo da dove parte la sessione Oracle.
LAST_CALL_ET – L’orario in cui la sessione ha cambiato stato da ACTIVE a INACTIVE e vice versa.
USERNAME – Nome dell’utente Oracle.
COMMAND – Il comando che è stato eseguito sul database Oracle.

Pertanto per estrapolare queste informazioni dal database Oracle, abbiamo messo in relazione tre tabelle:

GV$SESSION
GV$PROCESS
DBA_USERS

Dunque nella WHERE condition,
abbiamo messo in relazione le viste
V$PROCESS e
V$SESSION attraverso la JOIN P.ADDR=S.PADDR.

Inoltre abbiamo messo in relazione la vista V$SESSION
con la vista DBA_USERS
attraverso la JOIN
S.USER#=U.USER_ID.

Infine dopo la relazione delle tabelle V$PROCESS,
V$SESSION e
DBA_USERS,
Pertanto per controllare le informazioni che abbiamo selezionato antecedenti un determinata data, gli passiamo la condizione to_char(S.logon_time,'DD-MM-YY HH24:MI')con il formato indicato nella funzione to_char.

Per esempio:
to_char(S.logon_time,'DD-MM-YY HH24:MI') < '15-01-17 12:30'

Query sessioni Oracle recuperate dalla DATA:

Set lines 300
Set pages 60
Col LAST_CALL for a18
Col LOGON_TIME for a18
Col schemaname for a16
Col command for a24
Col machine for a16
Col action for a12
Col username for a16
Col osuser for a16
Col terminal for a16
select to_char(S.logon_time,'DD-MON-YY hh24:mi:ss') LOGON_TIME, s.status, s.inst_id, 
s.sql_id, s.process,s.program, s.schemaname, s.sid, s.serial#, p.spid, p.pid, s.osuser, S.machine, S.terminal,to_char(sysdate -(LAST_CALL_ET/86400),'DD-MON-YY hh24:mi:ss') LAST_CALL , U.username, S.ACTION, decode(S.command,0, 'No command in progress.', 1, 'CREATE TABLE',2, 'INSERT', 3, 'SELECT', 4, 'CREATE CLUSTER', 5, 'ALTER CLUSTER', 6, 'UPDATE', 7, 'DELETE') COMMAND from gv$session S, dba_users U, gv$process P where P.ADDR = S.PADDR and S.user# = U.user_id and to_char(s.logon_time,'DD-MM-YY HH24:MI') < '&data';

Resta aggiornato sulle nostre attività entrando a far parte della nostra community:
Facebook
Youtube
Linkedin

Exit mobile version