Fechas en formato Epoch

Recientemente he tenido que juguetear con el formato de fecha EPOCH que es el número de segundos desde el 1 de enero de 1970. Este formato se emplea generalmente en sistemas unix como formato nativo de fecha y como era mi caso fecha en ficheros de intercambio entre sistemas.

Para convertir el clásico SYSDATE de Oracle a este formato es muy sencillo, basta con restarle la fecha de referencia y pasarlos a segundos:


SELECT to_number(
sysdate - to_date('01/01/1970','DD/MM/YYYY')
) * (24 * 60 * 60)
FROM DUAL

uptime en oracle

Existe una manera muy sencilla de saber cuanto tiempo lleva una instancia de bbdd dando servicio, dos sencillas consultas:

O bien consultando la primera sesión de la tabla v$session.

select min(logon_time) from v$session;

O bien consultando la tabla de información de la instancia:

select * from v$instance;

Duda resuelta.

Actualizar a Karmic

Para actualizar a una versión superior de ubuntu… muy sencillo. Desde la linea de comandos:

sudo update-manager -d

El gestor de actualizaciones se da cuenta que tienes el sistema actualizado pero te sugiere una versión superior.

A tener en cuenta que un backup previo de los datos sensibles /home/var/etc.. te da más garantias de que nada malo nos sacará de la circulación por un tiempo.

Instalando Oracle SQL Developer en Ubuntu

Siempre he sido un poco rústico instalando SQL Developer de Oracle. De hecho, siempre bajaba el package genérico lo descomprimia y lo lanzaba sin preocuparme de más en Windows y MacOS.

Sin embargo en Ubuntu me percaté que no era forma de proceder OS-Friendly. Investigué un poco y llegué a la conclusion que la mejor manera es descargar la versión de RedHat (rpm) sqldeveloper-1.XXX.noarch.rpm y convertir este rpm en un package Debian. Es una operación basica pero que yo nunca había necesitado emplear. Veamos los pasos:

  1. Instalamos la Linux Standard Base (lsb) que permite compatibilizar la estructura entre distintas versiones linux
  2. sudo apt-get install lsb

  3. Instalamos el JRE de Sun, si no lo tememos ya…
  4. sudo apt-get install sun-java6-jre

  5. Y por último Alien que nos permite convertir packages RPM en DEB entre otras opciones.
  6. sudo apt-get install alien

  7. Convertimos el rpm a deb
  8. sudo alien --scripts sqldeveloper*rpm

  9. y finalmente instalamos el deb que hemos obtenido.
  10. sudo dpkg -i sqldeveloper*deb

Ya está, ya tenemos correctamente instalado Oracle SQL Developer, con sus entradas de menú y todo.

Duplicando un disco en Sun VirtualBox

Una de las cosas que mas me ha costado a la hora de empezar a utilizar VirtualBox es lo laborioso que hace el registro de maquinas y discos virtuales. Acostumbrado a otros productos, clonar una maquina no es tan sencillo como copiar y abrir. Virtualbox registra internamente con un identificador único el disco duro quejándose de que ya existe.

Bueno, mediante la instrucción VBoxManage podemos duplicar un disco de la siguiente manera.

$> VBoxManage clonehd Centos5.2.template.data00.vdi Centos5.2.oracle.vdi

Ya sólo nos queda registrar el disco y crear una maquina virtual nueva de características similares.

Como manejar ficheros tar.gz

Supongamos que tenemos un directorio en un entorno *nix del que queremos hacer una copia rápida de seguridad. Lo habitual es preparar un tar y una vez empaquetado se comprime con un gzip.

Para comprimir el directorio en una sola instrucción basta con hacer.

tar czf nombreFichero.tar.gz carpetaAComprimir

Para descomprimir el directorio

tar -zxvf /path/a/la/carpeta/nombreFichero.tar.gz

Para ver un listado de todos los ficheros del tar

gunzip -c nombreFichero.tar.gz | tar -tvf -

Para recuperar un solo fichero del tar.gz

gunzip -c nombreFichero.tar.gz | tar -xvf - path/dentro/del/fichero/index.html

En un único paso, sencillo ¿no?

Matando sesiones con seguridad

El método más seguro de matar una sesión es desde una sesión del administrador de la bbdd. Con alguna referencia sobre el proceso a matar se realiza una búsqueda con la consulta:

SELECT s.sid, s.serial#, s.osuser, s.program
FROM v$session s;

Con el sid y serial# se lanza la instrucción:

ALTER SYSTEM KILL SESSION 'sid,serial#';

Es posible que el proceso no termine con facilidad, por lo que conviene lanzar esta misma llamada con el modificador IMMEDIATE. De este modo el proceso fuerza también, de un modo seguro, la finalización del proceso del sistema operativo.

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

Este es el único método seguro ya que si se opta por matar directamente la sesión del sistema operativo es posible que se vea afectada la integridad de los datos.

No obstante en situaciones de autentica necesidad se podrá también matar los procesos del sistema operativo.

Para sistemas Unix el clásico KILL -9 {spid} o desde windows orakill {sid} {spid}, donde {spid} se deduce del cruce de v$session y v$process y el {sid} es el identificador de la bbdd.

Perdiendo la conexión al servidor Oracle

De un tiempo a esta parte he tenido problemas de conexión a Oracle y cualquier tipo de servidores: era capaz de conectar con el servicio pero inexplicablemente, e incluso en mitad de una instrucción, perdía la conexión. En la ultima semana se había vuelto insoportable ya que debía reconectarme cada pocos minutos.

Estuve chequeando una serie de posibles causas y soluciones y todo hacia indicar que era un problema de mi tarjeta de red. Hice pruebas con varias pcmcia y todo parecía seguir igual.

Sin descartar del todo el problema de hard intente limpiar el ordenador buscando algún spyware que lei provocaban el mismo efecto. El resultado: nada de nada.

De casualidad y sobre el tema de los spyware leí sobre el reset del winsock y encontré esta herramienta, XP TCP/IP Repair. ¡¡¡Cuidado con lanzar a ciegas!!!

Según parece, si se juega como es mi caso con la configuración de red o debido a algunos tipos de software de no se sabe que propósito tienen, se puede corromper la configuración Winsock y/o Layered Service Providers (LSP) del sistema Operativo, degradando o bloqueando la conexión de red. Esta aplicación en cuestión no deja de ser una interfaz a un par de instrucciones, requiere reiniciar la máquina para ver los cambios aplicados.

En mi caso funcionó. Debo advertir que debe de ser una práctica con cierto riesgo ya que elimina posibles configuraciones correctas que en teoría dejarán de funcionar pero es esto o nada.

Actualización: Después de varios días funcionando sin problemas, volvieron a dar varios timeout en una conexión a Oracle. Esta vez el problema estaba limitado a este tipo de cliente con lo que realicé una traza de SQL*NET y descubrí problemas de timeout. Según Metalink  estos problemas pueden ser debidos a algún tipo de congestión de red y pueden solucionarse ampliado el valor de un parametro del registro TcpMaxDataRetransmissions. Lo subí hasta 10, el doble del valor por defecto. A ver cuanto dura.

Simplebackup en perl

Llevaba tiempo usando cobian backup como aplicación de copias de seguridad de cabecera.

Funciona muy bien, es flexible y fácil, muy fácil de usar. Sin embargo era muy laborioso preparar una configuración que vaya al detalle de lo que quieres guardar. Personalmente, odio abrir ventanas por que sí y si querias añadir mascaras, está aplicacion era un dolor.
Buscando algo similar en sourceforge me encontré con simplebackup.

Es una aplicación espartana, hecha en perl, pero en su sencillez reside su encanto.

No entraré en detalles de cómo se hacen las cosas en este momento, pero decir que hace copias de seguridad limpiamente y las recuperaciones funcionan muy bien permitiendo limpiamente recuperar ficheros en un momento del tiempo. Supongo que su creador esta familiarizado con la gestión de bases de datos ya que utiliza técnicas y terminología similar a Oracle lo que ha hecho mucho más sencilla mi adaptación.

Recomendado si te gusta configurar al estilo fichero unix.