dba:oracle:oracle_sql_querys:sessions
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
oracle:oracle_sql_querys:sessions [2018/11/14 11:14] – created dodger | dba:oracle:oracle_sql_querys:sessions [2023/01/31 08:15] (current) – removed dodger | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== ORACLE SQL QUERIES : Sessions ====== | ||
- | ======SECCIÓN : Sesiones====== | ||
- | =====Listar numero de sesiones===== | ||
- | <code sql> | ||
- | rpad(' | ||
- | ' | ||
- | ' | ||
- | from | ||
- | | ||
- | | ||
- | | ||
- | where | ||
- | | ||
- | </ | ||
- | |||
- | ===== Usuarios conectados ===== | ||
- | <code sql> | ||
- | col ID format a15; | ||
- | col USERNAME FORMAT A30 ; | ||
- | col OSUSER FORMAT A40 ; | ||
- | COL MACHINE FORMAT A20 WORD WRAPPED; | ||
- | COL " | ||
- | SELECT USERNAME, | ||
- | SID || ',' | ||
- | STATUS, | ||
- | OSUSER, | ||
- | MACHINE, | ||
- | SQL_ID, | ||
- | LAST_CALL_ET "Last Activity" | ||
- | from v$session | ||
- | where username is not null | ||
- | order by status desc, last_call_et desc | ||
- | / | ||
- | </ | ||
- | |||
- | |||
- | |||
- | ===== Numero de sesiones por usuario ===== | ||
- | <code sql> | ||
- | COLUMN USERNAME FORMAT A35 WORD_WRAPPED ; | ||
- | COLUMN num_of_sessions FORMAT 99999999999 ; | ||
- | SELECT ses.username username, | ||
- | count(*) num_of_sessions | ||
- | FROM V$SESSION SES, V$PROCESS P | ||
- | WHERE SES.paddr = p.addr | ||
- | AND ses.username IS NOT NULL | ||
- | group by ses.username | ||
- | ORDER BY num_of_sessions | ||
- | / | ||
- | </ | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | =====Listar sesiones===== | ||
- | |||
- | <code sql> | ||
- | COLUMN SID_SERIAL FORMAT A20 ; | ||
- | COLUMN OSPID FORMAT A7; | ||
- | COLUMN SQLID FORMAT A15 WORD_WRAPPED ; | ||
- | COLUMN USERNAME FORMAT A25 WORD_WRAPPED ; | ||
- | COLUMN OSUSER FORMAT A45 WORD_WRAPPED ; | ||
- | COLUMN HOSTNAME FORMAT A33 WORD_WRAPPED ; | ||
- | col client_info format a40 ; | ||
- | COLUMN PROGRAM FORMAT A70 WORD_WRAPPED; | ||
- | SELECT ses.sid || ',' | ||
- | p.spid as OSPID, | ||
- | SES.SQL_ID SQLID, | ||
- | SES.USERNAME USERNAME, | ||
- | SES.OSUSER OSUSER, | ||
- | SES.MACHINE HOSTNAME, | ||
- | SES.PROGRAM PROGRAM, | ||
- | SES.CLIENT_INFO | ||
- | FROM V$SESSION SES, V$PROCESS P | ||
- | WHERE SES.paddr = p.addr | ||
- | ORDER BY SES.MACHINE | ||
- | / | ||
- | </ | ||
- | |||
- | Con usuario inicializado: | ||
- | <code sql> | ||
- | COLUMN SID_SERIAL FORMAT A20 ; | ||
- | COLUMN OSPID FORMAT A7; | ||
- | COLUMN SQLID FORMAT A15 WORD_WRAPPED ; | ||
- | COLUMN USERNAME FORMAT A25 WORD_WRAPPED ; | ||
- | COLUMN OSUSER FORMAT A45 WORD_WRAPPED ; | ||
- | COLUMN HOSTNAME FORMAT A33 WORD_WRAPPED ; | ||
- | COLUMN PROGRAM FORMAT A70 WORD_WRAPPED; | ||
- | SELECT ses.sid || ',' | ||
- | p.spid as OSPID, | ||
- | SES.SQL_ID SQLID, | ||
- | SES.USERNAME USERNAME, | ||
- | SES.OSUSER OSUSER, | ||
- | SES.MACHINE HOSTNAME, | ||
- | SES.PROGRAM PROGRAM, | ||
- | SES.CLIENT_INFO | ||
- | FROM V$SESSION SES, V$PROCESS P | ||
- | WHERE SES.paddr = p.addr | ||
- | and ses.username is not null | ||
- | ORDER BY SES.MACHINE | ||
- | / | ||
- | </ | ||
- | |||
- | |||
- | Más: | ||
- | <code sql>col " | ||
- | col username format a15 | ||
- | col osuser format a15 | ||
- | col program format a80 | ||
- | select s.sid || ',' | ||
- | from v$session s, v$process p | ||
- | Where s.paddr = p.addr | ||
- | order by to_number(p.spid) | ||
- | / | ||
- | </ | ||
- | =====Listar sesiones ACTIVAS===== | ||
- | Con status=ACTIVE y SIN sqltext | ||
- | <code sql> | ||
- | set linesize 280; | ||
- | COLUMN SID_SERIAL FORMAT A20 ; | ||
- | COLUMN OSPID FORMAT A7; | ||
- | COLUMN SQLID FORMAT A15 WORD_WRAPPED ; | ||
- | COLUMN USERNAME FORMAT A35 WORD_WRAPPED ; | ||
- | COLUMN HOSTNAME FORMAT A40 WORD_WRAPPED ; | ||
- | COLUMN PROGRAM FORMAT A20 WORD_WRAPPED ; | ||
- | COLUMN EVENT FORMAT A60 WORD_WRAPPED ; | ||
- | col OSUSER format a30 ; | ||
- | COLUMN WAITCLASS HEADING ' | ||
- | COLUMN WAITINGSECS HEADING ' | ||
- | COLUMN QUERY HEADING ' | ||
- | select ses.sid || ',' | ||
- | p.spid OSPID, | ||
- | SES.SQL_ID SQLID, | ||
- | SES.USERNAME USERNAME, | ||
- | SES.OSUSER OSUSER, | ||
- | SES.MACHINE HOSTNAME, | ||
- | lpad(SES.PROGRAM, | ||
- | LPAD(WA.EVENT, | ||
- | WA.WAIT_CLASS WAITCLASS, | ||
- | WA.SECONDS_IN_WAIT WAITINGSECS | ||
- | from V$SESSION SES, V$SQLAREA SQL, V$SESSION_WAIT WA, V$PROCESS P | ||
- | where SES.STATUS=' | ||
- | AND SES.SQL_ID=SQL.SQL_ID | ||
- | AND SES.SID=WA.SID | ||
- | and SES.paddr = p.addr | ||
- | / | ||
- | CLEAR COLUMNS ; | ||
- | </ | ||
- | |||
- | |||
- | Con status=ACTIVE | ||
- | <code sql> | ||
- | set linesize 280; | ||
- | COLUMN SID FORMAT 99999 ; | ||
- | COLUMN SERIAL FORMAT 999999 ; | ||
- | COLUMN OSPID FORMAT A5; | ||
- | COLUMN SQLID FORMAT A15 WORD_WRAPPED ; | ||
- | COLUMN USERNAME FORMAT A20 WORD_WRAPPED ; | ||
- | COLUMN HOSTNAME FORMAT A40 WORD_WRAPPED ; | ||
- | COLUMN PROGRAM FORMAT A20 WORD_WRAPPED ; | ||
- | COLUMN EVENT FORMAT A60 WORD_WRAPPED ; | ||
- | COLUMN P1TEXT FORMAT A20 WORD_WRAPPED; | ||
- | COLUMN WAITCLASS HEADING ' | ||
- | COLUMN WAITINGSECS HEADING ' | ||
- | COLUMN QUERY HEADING ' | ||
- | select SES.SID SID, | ||
- | SES.SERIAL# SERIAL, | ||
- | p.spid OSPID, | ||
- | SES.SQL_ID SQLID, | ||
- | SES.USERNAME USERNAME, | ||
- | SES.MACHINE HOSTNAME, | ||
- | lpad(SES.PROGRAM, | ||
- | LPAD(WA.EVENT, | ||
- | WA.P1TEXT P1TEXT, | ||
- | WA.WAIT_CLASS WAITCLASS, | ||
- | WA.SECONDS_IN_WAIT WAITINGSECS, | ||
- | SQL.SQL_TEXT QUERY | ||
- | from V$SESSION SES, V$SQLAREA SQL, V$SESSION_WAIT WA, V$PROCESS P | ||
- | where SES.STATUS=' | ||
- | AND SES.SQL_ID=SQL.SQL_ID | ||
- | AND SES.SID=WA.SID | ||
- | and SES.paddr = p.addr | ||
- | / | ||
- | CLEAR COLUMNS ; | ||
- | </ | ||
- | |||
- | Mediante SQL_ID: | ||
- | <code sql> | ||
- | SET linesize 280; | ||
- | COLUMN SID_SERIAL FORMAT A20 ; | ||
- | COLUMN OSPID FORMAT A7; | ||
- | COLUMN SQLID FORMAT A15 WORD_WRAPPED ; | ||
- | COLUMN USERNAME FORMAT A20 WORD_WRAPPED ; | ||
- | COLUMN HOSTNAME FORMAT A40 WORD_WRAPPED ; | ||
- | COLUMN PROGRAM FORMAT A20 WORD_WRAPPED ; | ||
- | COLUMN EVENT FORMAT A60 WORD_WRAPPED ; | ||
- | COLUMN P1TEXT FORMAT A20 WORD_WRAPPED; | ||
- | COLUMN WAITCLASS HEADING ' | ||
- | COLUMN WAITINGSECS HEADING ' | ||
- | COLUMN QUERY HEADING ' | ||
- | SELECT ses.sid || ',' | ||
- | p.spid OSPID, | ||
- | SES.SQL_ID SQLID, | ||
- | SES.USERNAME USERNAME, | ||
- | SES.MACHINE HOSTNAME, | ||
- | lpad(SES.PROGRAM, | ||
- | LPAD(WA.EVENT, | ||
- | WA.P1TEXT P1TEXT, | ||
- | WA.WAIT_CLASS WAITCLASS, | ||
- | WA.SECONDS_IN_WAIT WAITINGSECS, | ||
- | SQL.SQL_TEXT QUERY | ||
- | FROM V$SESSION SES, V$SQLAREA SQL, V$SESSION_WAIT WA, V$PROCESS P | ||
- | WHERE SES.SQL_ID IS NOT NULL | ||
- | AND SES.SQL_ID=SQL.SQL_ID | ||
- | AND SES.SID=WA.SID | ||
- | AND SES.paddr = p.addr | ||
- | / | ||
- | </ | ||
- | |||
- | ===== Tiempo desde la última actividad ===== | ||
- | <code sql> | ||
- | SELECT username, MACHINE, last_call_et seconds, STATUS | ||
- | FROM v$session | ||
- | WHERE username IS NOT NULL | ||
- | ORDER BY last_call_et | ||
- | / | ||
- | </ | ||
- | |||
- | |||
- | =====Listar sesiones de usuario===== | ||
- | <code sql> | ||
- | =====Matar sesion===== | ||
- | <code sql> | ||
- | </ | ||
- | =====Matar todas las sesiones de un usuario===== | ||
- | <code sql> | ||
- | select 'ALTER SYSTEM KILL SESSION ''' | ||
- | FROM V$SESSION | ||
- | WHERE USERNAME IN (' | ||
- | </ | ||
- | |||
- | |||
- | =====Bloqueos / locks===== | ||
- | ==== HARD LOCKS ==== | ||
- | |||
- | * **v$lock** based: | ||
- | ^ Human readable ^ plain mode ^ | ||
- | | <code sql> | ||
- | select 'SID ' || l1.sid || ' is blocking ->' || l2.sid blocking | ||
- | from v$lock l1, v$lock l2 | ||
- | where l1.block =1 and l2.request > 0 | ||
- | and l1.id1=l2.id1 | ||
- | and l1.id2=l2.id2 | ||
- | / | ||
- | </ | ||
- | FROM V$LOCK L1, V$LOCK L2 | ||
- | WHERE | ||
- | | ||
- | AND L2.REQUEST > 0 | ||
- | AND L1.ID1=L2.ID1 | ||
- | AND L1.ID2=L2.ID2 ; | ||
- | </ | ||
- | |||
- | * **v$session** based: | ||
- | <code sql> | ||
- | col wait_class format a40 | ||
- | col event format a60 | ||
- | |||
- | SELECT | ||
- | sid || ' | ||
- | username, | ||
- | osuser, | ||
- | wait_class_id, | ||
- | wait_class#, | ||
- | wait_class, | ||
- | event | ||
- | FROM | ||
- | v$session | ||
- | WHERE | ||
- | state = ' | ||
- | AND | ||
- | wait_class = ' | ||
- | </ | ||
- | |||
- | |||
- | |||
- | ==== Bloqueos de usuario (Soft locks) ==== | ||
- | |||
- | Formateo: | ||
- | <code sql> | ||
- | COL USERNAME FORMAT A23 | ||
- | COL OSUser FORMAT A23 | ||
- | COL Machine FORMAT A33 | ||
- | COL mode_held FORMAT A23 | ||
- | COL mode_requested FORMAT A23 | ||
- | COL lock_type format A25 | ||
- | COL lock_id1 format A10 | ||
- | COL lock_id2 format a10 | ||
- | COL object_name format a33 | ||
- | col object_type format a20 | ||
- | </ | ||
- | |||
- | * Tx enqueue ready2kill: | ||
- | <code sql> | ||
- | COLUMN SID_SERIAL FORMAT A15 ; | ||
- | SELECT | ||
- | lk.sid || ',' | ||
- | se.username, | ||
- | se.OSUser, | ||
- | se.Machine, | ||
- | DECODE(lk.TYPE, | ||
- | DECODE(lk.lmode, | ||
- | DECODE(lk.request, | ||
- | TO_CHAR(lk.id1) lock_id1, | ||
- | TO_CHAR(lk.id2) lock_id2, | ||
- | DECODE(block, | ||
- | se.lockwait | ||
- | FROM | ||
- | v$lock lk, | ||
- | v$session se | ||
- | WHERE | ||
- | lk.type | ||
- | AND lk.SID = se.SID | ||
- | ; | ||
- | </ | ||
- | |||
- | * Transaction enqueue (original): | ||
- | <code sql> | ||
- | SELECT | ||
- | lk.SID, | ||
- | se.username, | ||
- | se.OSUser, | ||
- | se.Machine, | ||
- | DECODE(lk.TYPE, | ||
- | DECODE(lk.lmode, | ||
- | DECODE(lk.request, | ||
- | TO_CHAR(lk.id1) lock_id1, | ||
- | TO_CHAR(lk.id2) lock_id2, | ||
- | DECODE(block, | ||
- | se.lockwait | ||
- | FROM | ||
- | v$lock lk, | ||
- | v$session se | ||
- | WHERE | ||
- | lk.type | ||
- | AND lk.SID = se.SID | ||
- | ; | ||
- | </ | ||
- | |||
- | |||
- | |||
- | * DML enqueue & User supplied: | ||
- | <code sql> | ||
- | SELECT | ||
- | lk.SID, | ||
- | se.username, | ||
- | se.OSUser, | ||
- | se.Machine, | ||
- | DECODE (lk.TYPE, ' | ||
- | DECODE (lk.lmode, 0, ' | ||
- | DECODE (lk.request, | ||
- | TO_CHAR (lk.id1) lock_id1, | ||
- | TO_CHAR (lk.id2) lock_id2, | ||
- | ob.owner, | ||
- | ob.object_type, | ||
- | ob.object_name, | ||
- | DECODE(lk.Block, | ||
- | se.lockwait | ||
- | FROM | ||
- | v$lock lk, | ||
- | dba_objects ob, | ||
- | v$session se | ||
- | WHERE | ||
- | lk.TYPE IN (' | ||
- | AND lk.SID = se.SID | ||
- | AND lk.id1 = ob.object_id | ||
- | ; | ||
- | </ | ||
- | |||
- | ==== Sid,SERIAL# de los bloqueantes primarios ==== | ||
- | Sesiones que inician la cadena de bloqueos: | ||
- | <code sql> | ||
- | SELECT SID || ',' | ||
- | FROM V$SESSION | ||
- | WHERE SID IN ( | ||
- | SELECT l1.sid | ||
- | FROM v$lock l1, v$lock l2 | ||
- | WHERE l1.block =1 AND l2.request > 0 | ||
- | AND l1.id1=l2.id1 | ||
- | AND l1.id2=l2.id2 | ||
- | AND l1.id1 not IN ( | ||
- | SELECT l2.sid | ||
- | FROM v$lock l1, v$lock l2 | ||
- | WHERE l1.block =1 AND l2.request > 0 | ||
- | AND l1.id1=l2.id1 | ||
- | AND l1.id2=l2.id2 | ||
- | ) | ||
- | ) | ||
- | / | ||
- | </ | ||
- | |||
- | ==== Bloqueadores ==== | ||
- | Extrictamente bloqueadores (sesiones que bloquean otras): | ||
- | <code sql> | ||
- | </ | ||
- | ==== lock de DDLS ==== | ||
- | Mirar objetos que se están accediendo: | ||
- | <code sql> | ||
- | col object format a50 ; | ||
- | col type format a20 ; | ||
- | col owner format a20 ; | ||
- | select * from V$ACCESS where type LIKE ' | ||
- | </ | ||
- | |||
- | Y el propio bloqueo en sí: | ||
- | <code sql> | ||
- | COL SESSION_ID FORMAT 999999; | ||
- | COL OWNER FORMAT A20; | ||
- | COL NAME FORMAT A30; | ||
- | COL TYPE FORMAT A20; | ||
- | SELECT * FROM DBA_DDL_LOCKS ; | ||
- | </ | ||
- | |||
- | ==== lock de DML ==== | ||
- | Casi lo mismo que el anterior: | ||
- | <code sql> | ||
- | COL SESSION_ID FORMAT 999999; | ||
- | COL OWNER FORMAT A20; | ||
- | COL NAME FORMAT A30; | ||
- | COL TYPE FORMAT A20; | ||
- | SELECT * FROM DBA_DML_LOCKS ; | ||
- | </ | ||
- | |||
- | ==== Links bloqueos==== | ||
- | * http:// | ||
- | |||
- | =====Consumo por sesiones===== | ||
- | <code sql> | ||
- | |||
- | SELECT TO_CHAR(m.END_TIME, | ||
- | ROUND(m.cpu) cpu100, m.physical_reads prds, m.logical_reads lrds, m.pga_memory pga, m.hard_parses hp, m.soft_parses sp, m.physical_read_pct prp, | ||
- | m.logical_read_pct lrp | ||
- | FROM v$sessmetric m, v$session s | ||
- | WHERE (m.physical_reads > 100 OR m.cpu > 100 OR m.logical_reads > 100) AND m.session_id = s.sid AND m.session_serial_num = s.serial# | ||
- | ORDER BY m.physical_reads DESC, m.cpu DESC, m.logical_reads DESC; | ||
- | </ | ||
- | |||
- | A partir del *SID*, podemos saber qué _query_ están lanzando mediante: | ||
- | <code sql> | ||
- | SELECT c.sid, d.piece, c.serial#, c.username, d.sql_text | ||
- | FROM v$session c, v$sqltext d | ||
- | WHERE c.sql_hash_value = d.hash_value | ||
- | and c.sid = &SID | ||
- | ORDER BY c.sid, d.piece; | ||
- | </ | ||
- | |||
- | ===== QUERYS activas ===== | ||
- | <code sql> | ||
- | set feedback off | ||
- | set serveroutput on size 9999 | ||
- | column username format a20 | ||
- | column sql_text format a55 word_wrapped | ||
- | begin | ||
- | for x in | ||
- | | ||
- | to_char(LOGON_TIME,' | ||
- | to_char(sysdate,' | ||
- | sql_address, | ||
- | sql_hash_value | ||
- | from v$session | ||
- | where status = ' | ||
- | and rawtohex(sql_address) <> ' | ||
- | and username is not null ) loop | ||
- | for y in (select sql_text | ||
- | from v$sqlarea | ||
- | where address = x.sql_address ) loop | ||
- | if ( y.sql_text not like ' | ||
- | y.sql_text not like ' | ||
- | dbms_output.put_line( ' | ||
- | dbms_output.put_line( x.username ); | ||
- | dbms_output.put_line( x.logon_time || ' ' || x.current_time || ' SQL#=' || x.sql_hash_value); | ||
- | dbms_output.put_line( substr( y.sql_text, 1, 250 ) ); | ||
- | end if; | ||
- | end loop; | ||
- | end loop; | ||
- | end; | ||
- | / | ||
- | </ |
dba/oracle/oracle_sql_querys/sessions.1542194075.txt.gz · Last modified: 2018/11/14 11:14 by dodger