Troubleshooting | ExpoDBA

Troubleshooting

Oracle Scripts para identificación y solución de problemas. Locks, Transacciones en Pending, estado de procesos, etc.

Identificar BIND variables de una consulta

Este script nos permite obtener los valores de una instancia de bind variables de una consulta a partir de un sql_id. Queda en manos del lector modificar el script a su criterio para obtener las mismas bind variables filtrando por sesion, hash_value o lo que necesite en cada caso
select s.sid,
s.username,
s.sql_hash_value,
s.sql_id,
s.sql_child_number,
sbc.name,
sbc.value_string,
last_captured
from v$sql_bind_capture sbc, v$session s,v$sql sq
where s.sql_hash_value = sbc.hash_value
and s.sql_address = sbc.address
and sq.sql_id=s.sql_id

Locks (Esperas y Bloqueadores)

Muestra las sesiones que generan lock y las sesiones que esperan por que el lock se libere.
Con este script se puede identificar a que programa pertenece la sesion, a que usuario, por que evento espera, hace cuanto tiempo, etc.

 

top sessions por cpu en rac.

Lista las sessiones con mayor consumo de cpu en un rac.

select
ss.inst_id,
ss.username,
se.sid,
ss.program,
value/100 cpu_usage_seconds
from
gv$session ss,
gv$sesstat se,
gv$statname sn
where se.statistic#=sn.statistic#
and name like '%CPU used by this session%'
and se.sid=ss.sid

Locks (identifiacion de bloqueador y bloqueados)

Este script no solo muestra si hay locks, sino también quien tiene tomado el recurso que genera el lock, quienes esperan por la liberación de ese recurso.
Con estos datos se puede identificar el tipo de espera, la sesion , el comando que ejecuta, cuanto tiempo tiene tomado el Lock, etc.

set linesize 250
col sess format a20
col event format a40
col mata format a40
col osuser format a10
col username format a11


SELECT /*+ RULE */
a.sid,b.serial#,

Espacio ocupado en tablespace temporal

Si alguno de los tablespaces temporales se encuentra en uso este script mostrará datos de la sesion que lo tiene el uso además del espacio que ocupa y el porcentaje respecto al total.

set pagesize 10000
set linesize 133
col tablespace format a15 heading 'Tablespace Name'
col "Mb OCUP" format 9999999999.99
col username format a15
col osuser format a15
col "% ocupado" format 99.99
select 
	b.tablespace, 

Espacio ocupado en TEMP por SID

Muestra espacio en MB ocupado por el SID indicado, el espacio total disponible del Temporary tablespace en uso y el porcentaje ocupado por el sid actual sobre el total de espacio en el tablespace.

set pagesize 10000
set linesize 133
col tablespace format a15 heading 'Tablespace Name'
col "Mb OCUP" format 9999999999.99
col username format a15
col osuser format a15
col "% ocupado" format 99.99
select 
	b.tablespace, 

Sql a partir de un HASH

Con este Script podemos averiguar el SQL correspondiente a un HASH sin importar la longitud del sql.
Este script es útil cuando el SQL en cuestión tiene más de 1000 caracteres y no puede ser visto correctamente por la v$sql.sql_text

SET LINESIZE 500
SET PAGESIZE 1000
 
SELECT a.sql_text
FROM v$sqltext a
WHERE a.hash_value = &hash
ORDER BY a.piece;

Activar trace de un proceso en ejecución

Se describen los pasos y distintos modos que hay de activar un trace para un proceso de la base de datos, que ya se encuentra en ejecución

Activar un trace a un proceso que se está ejecutando Necesito el Sid y el Serial, y con el paquete dbms_system activo el trace

Obtener el sid, serial# a partir del pid

Cantidad de esperas por tipo en RAC

Muestra cantidad de sesiones en cada espera teniendo en cuenta las sesiones de todos los nodos del RAC

select w.event,count(9)
from gv$session s, gv$session_wait w
where s.sid=w.sid
group by w.event
order by 2;