Matando sesiones desde el sistema operativo

Como comenté en un post anterior, la mejor manera de matar una sesión de Oracle es desde dentro del servicio.

ALTER SYSTEM KILL SESSION 'sid,serial#' [IMMEDIATE];

Al recibir este Alter, la sesión pasa a modo KILLED, estado en el que intenta liberar los recursos empleados aunque, lamentablemente, no siempre lo consigue.

Para rematar una sesión marcada como KILLED que realmente no muere con el paso del tiempo hay que operar desde el sistema operativo.

El primer paso es identificar el proceso del sistema operativo conociendo el SID:

select p.spid, s.sid, s.serial#, s.username
from v$session s, v$process p
where p.addr = s.paddr and
s.sid= &SID;

La estructura de los procesos Oracle en Windows y Unix es un poco distinta, por ello para Unix se ejecutará la instrucción:

KILL -9 {spid}

Y desde windows:

orakill {S*I*D} {spid}

IMPORTANTE: este ultimo {S*I*D} es el identificador de la bbdd, no de la sesión.

SQL: Minutos entre dos fechas

Es muy rápido averiguar los minutos que separan dos fechas en Oracle.

Como todos sabemos el tipo DATE en Oracle se almacena internamente en números enteros. La unidad es el día, luego para conocer el día de mañana “a la misma hora” basta con sumar (sysdate + 1).

Si tenemos dos date A y B, siendo A>B, los minutos aproximados que las separan se calcula como:

Select ROUND ((A - B) * 24 * 60)
From DUAL;

Alter current schema y los objetos cualificados

Una de las características que se hecha de menos en Oracle es poder cambiar de usuario una vez iniciada la sesión, algo simple al estilo de Unix: ‘su - menganito‘ donde, siendo administrador, puedes llegar a comportarte como cualquier usuario, sin saber ninguna contraseña.

Vale, pensarás que en Oracle basta con abrir una nueva conexión, pero ¿qué pasa si no sabes la contraseña pero sí tienes los permisos necesarios para manipular los objetos de este otro esquema?

Existe una alternativa que permite esto. Al inicial la sesión lanzar:

ALTER SESSION CURRENT_SCHEMA=SCOTT;

Esta sentencia no te concede los permisos que tenga SCOTT, de hecho no te da ningún privilegio que no poseyeras con el esquema original, simplemente te evita tener que preceder cualquier objeto cualificado como “SCOTT.*”.

No es un “su -” pero también puede ser útil.

He comprobado que funciona desde la versión 9i2, pero puede que desde antes.

El bug del dock

Durante unos días he tenido problemas con el dock de leopard.

Cuando la máquina volvía del reposo, el dock se mostraba transparente y los nombres de los ficheros en los abanico simplemente estaban en blanco, no se podían leer. No obstante los objetos estaban allí y mucho me temo que era un problema estetico pero de los incomodos.

Aprendí a matar el proceso del dock desde la terminal, pero esto no resolvía nada.

killall Dock

De refilón descubrí en un foro, que me perdonen no recuerdo donde lo lei, que desde soporte de Apple recomendaban resetear la PRAM (⌥⌘PR al reiniciar). Dicho y hecho, reset y saludo de vulcano.

Creo que no es recomendable realizar esta maniobra sin necesidad, ya que elimina parte de la configuracion de la maquina, no obstante lo cierto es que lo resolvio.