domingo, 26 de febrero de 2012

La emoción de llevar a final un gran Proyecto...

Cuando entré a la empresa donde estoy laborando actualmente, vine con la idea de hacer grandes cambios, tanto en ella como en mi persona. Antes de ello, solo me dedicaba a la programación y soporte técnico y ahí me hubiese "estancado" de no ser por esta oportunidad de ser DBA.

Si, no ha sido fácil, entre la falta de capacitación y apoyo en cuestiones críticas de mis homólogos, he tenido que picar piedra mucho tiempo. ¿Para qué? Mi proyecto actual es la migración de la base de datos de la empresa, de una versión ya veterana a una nueva.

En el momento de estar escribiendo este post, me encuentro a la mitad de ella, aún no puedo decir que es un éxito, falta lo principal, que todo funcione. Aunque para serles sincero, no tengo miedo de que no se cumplan las expectativas, ya que el proceso lo he hecho muchas veces, aprendiendo de cada vez que lo realizo. Al principio, como todo, tenía errores, pero con un poco de investigación, estos fueron mitigados.

Las pruebas con los usuarios aunque tardías, ya en las últimas ocasiones, se pusieron las pilas y se llevaron a cabo en tiempo y forma.

Hoy me encuentro con una enorme emoción, mi primer proyecto de gran impacto, tanto para mi área como para mi empresa, al fin podré terminarlo.

También he de agradecer a mi esposa que me ha dado gran apoyo moral, así como a mi jefe de área, que me dió la confianza de llevar ese proyecto a mi, que soy un novato en esto y a mis compañeros de área, que se han puesto las pilas para realizar este proyecto en conjunto.

Ya posteriormente les daré a conocer el proceso que se siguió para realizar la migración.

jueves, 23 de febrero de 2012

Consultas para obtener información de bloqueos de Objetos e Interbloqueos de Usuarios

Hay ocasiones que el abrir tu Console Manager para resolver un bloqueo o un interbloqueo, puedes mejor ejecutar unas sentencias para obtener la información que necesitas y así tomar las medidas que sean pertinentes.

Dejo las consultas que hasta ahora tengo para obtener esa información

-- Consulta de Bloqueo de Objetos por Sesiones
select substr(a.os_user_name,1,8) "OS User"
, substr(b.object_name,1,30) "Object Name"
, substr(b.object_type,1,8) "Type"
, substr(c.segment_name,1,10) "RBS"
, e.process "PROCESS"
, substr(d.used_urec,1,8) "# of Records"
, e.sid
, e.serial#
, e.username
, p.spid
from v$locked_object a
, dba_objects b
, dba_rollback_segs c
, v$transaction d
, v$session e
, v$process p
where a.object_id = b.object_id
and a.xidusn = c.segment_id
and a.xidusn = d.xidusn
and a.xidslot = d.xidslot
and d.addr = e.taddr
and p.addr = e.paddr;

-- Consulta de Objetos Bloqueados por usuarios
select
l.oracle_username,
l.session_id,
l.os_user_name,
o.owner,
o.object_name,
dl.lock_type,
dl.mode_held
from v$locked_object l, dba_objects o, dba_locks dl
where o.object_id = l.object_id
and dl.session_id = l.session_id;

--Consulta para Interbloqueos
select lock1.sid, ' BLOQUEA ', lock2.sid
from v$lock lock1, v$lock lock2
where lock1.block =1 and lock2.request > 0
and lock1.id1=lock2.id1
and lock1.id2=lock2.id2;


-- Consulta de SPID
select v.sid, a.SPID, v.serial#, v.username, v.OSUSER, v.program, v.MACHINE, v.LOGON_TIME
from dba_users u, v$session v, v$process a
where v.user# = u.user_id
and v.paddr = a.addr;

-- Consulta sesiones pendientes de rollback o commit
SELECT s.username,
       s.sid,
       s.serial#,
       t.used_ublk,
       t.used_urec,
       rs.segment_name,
       r.rssize,
       r.status
FROM   v$transaction t,
       v$session s,
       v$rollstat r,
       dba_rollback_segs rs
WHERE  s.saddr = t.ses_addr
AND    t.xidusn = r.usn
AND    rs.segment_id = t.xidusn
ORDER BY t.used_ublk DESC;