Oracle 10G : Pivotar una tabla

Para simular la función PIVOT (introducida en oracle 11), podemos simularla en Oracle 10g con lo siguiente

Partimos de la tabla con la estructura:

( category , year, valor )

Year es el valor que queremos pivotar y tiene valores entre 2003 y 2010. Estos valores habrá que ponerlos a mano



SELECT
category,
 MAX(DECODE(year,'2003',valor,NULL))  a2003
,MAX(DECODE(year,'2004',valor,NULL)) a2004
,MAX(DECODE(year,'2005',valor,NULL)) a2005
,MAX(DECODE(year,'2006',valor,NULL)) a2006
,MAX(DECODE(year,'2007',valor,NULL)) a2007
,MAX(DECODE(year,'2008',valor,NULL)) a2008
,MAX(DECODE(year,'2009',valor,NULL)) a2009
,MAX(DECODE(year,'2010',valor,NULL)) a2010
FROM tabla
where year >= 2003
group by category;





obtendremos una tabla  como

category,a2003,a2004,a2005,a2006,a2007,a2008,a2009,a2010


Montar imagen ISO en linux

Para montar un archivo iso podemos usar el siguiente comando.
1) Creamos un directorio donde se montará la ISO o bien usaremos uno existente:
mdkir /mnt/iso

2) Montamos la imagen
sudo  mount -o loop "/media/disk/Oracle DB for Linux v.10.2.0.1.0.iso"  -t iso9660 -o loop=/dev/loop0 /mnt/iso

en este caso estamos montando el archivo "/media/disk/Oracle DB for Linux v.10.2.0.1.0.iso", lleva comillas porque es un nombre con espacios. La imagen ISO se montará en el directorio /mnt/iso
El caso mas sencillo sería:

mount -o loop imagen.iso  /directorio_donde_se_montara

BASH: script para subir archivos por FTP con bash


El siguiente script de shell , recibe un sólo argumento que es el nombre de un archivo. Si el archivo existe, intenta conectarse mediante ftp al servidor, y subirlo.

Es útil para tareas de automatización

#!/bin/bash
# Copyright (C) 2012 dieguz2
# License: GNU GPL v2
# http://dieguz2.blogspot.com/
# Script: subirftp.sh
#  Este script recibe como argumento el nombre de un archivo y lo sube al servidor ftp

SERVER=192.168.1.1 #Ip del servidor
USER=ftpuser # usuario
PASSWD=password #password

#comprobar el numero de argumentos
if [ $# -ne 1 ]; then
        echo "Argumento incorrectos:e ejecuta $0 archivoasubir"
        exit 2;
fi

#comprobar si existe el archivo
if [ ! -e $1 ]; then
        echo "El archivo $1 no existe"
        exit 2;
fi


echo "Subiendo $1"

#automatización FTP
ftp -inv $SERVER << EOF
user $USER $PASSWD
binary
put $1
bye
EOF

exit 0;

Ubuntu : Activar Alt+tab para cambiar de ventana

Para activar Alt + Tabulador en Ubuntu  10.4 (puede desactivarse tras tocar compiz o desactivar efectos. Esta combinación de teclas sirve para cambiar entre ventanas.

1) Alt + F2  o desde un terminal lanzamos:
  gconf-editor
2) Buscamos la carpeta  app/metacity/global_keybinding y editamos la clave cycle_windows haciendo doble click sobre ella.

3) Ponemos el valor
Tab

Oracle : tamaño de todas las tablas de la base de datos

Consulta para obtener el tamaño de todas las tablas de la Base de datos:

SELECT
   owner propietario , table_name tabla , TRUNC(sum(bytes)/1024/1024)  MB
FROM
(SELECT segment_name table_name, owner, bytes
 FROM dba_segments
 WHERE segment_type = 'TABLE'
 UNION ALL
 SELECT i.table_name, i.owner, s.bytes
 FROM dba_indexes i, dba_segments s
 WHERE s.segment_name = i.index_name
 AND   s.owner = i.owner
 AND   s.segment_type = 'INDEX'
 UNION ALL
 SELECT l.table_name, l.owner, s.bytes
 FROM dba_lobs l, dba_segments s
 WHERE s.segment_name = l.segment_name
 AND   s.owner = l.owner
 AND   s.segment_type = 'LOBSEGMENT'
 UNION ALL
 SELECT l.table_name, l.owner, s.bytes
 FROM dba_lobs l, dba_segments s
 WHERE s.segment_name = l.index_name
 AND   s.owner = l.owner
 AND   s.segment_type = 'LOBINDEX')
--WHERE owner in UPPER('&owner')
GROUP BY table_name, owner
HAVING SUM(bytes)/1024/1024 > 10  /* Ignore really small tables */
ORDER BY SUM(bytes) desc
;


Oracle Listener poison : solución sin rac


Para solucionar la vulnerabilidad (sin aplicar parche) en un oracle en configuración sin rac, hay que  al listener.ora ($ORACLE_HOME/network/admin/listener.ora) la siguiente linea:

DYNAMIC_REGISTRATION_LISTENER = off

Más información en:

http://seclists.org/fulldisclosure/2012/Apr/204
https://forums.oracle.com/forums/thread.jspa?threadID=2381756&start=15&tstart=0
http://unaaldia.hispasec.com/2012/04/oracle-tns-poison-solucionada-4-anos.html

comtrend hg536+: Script para cambiar de ip sin resetear el router en python

Esta es la versión actualizada del script de este post comtrend hg536+: cambiar de ip sin resetear el router, script en python. La principal diferencia es que nos muestra la ip pública que teníamos antes de realizar el reseteo y después


El script usa lo mismo que lo explicado en Comtrend hg536+: cambiar de ip sin resetear el router.

Podremos ejecutarlo siempre y cuando tengamos instalado python en nuestro SO (linux, windows ...). Podemos crear el archivo con el comando
cat > ~/bin/resetear.py
chmod u+x ~/bin/resetear.py


El script es el siguiente:
#!/usr/bin/python
#
# Copyright (C) 2012 dieguz2
# License: GNU GPL v2
# http://dieguz2.blogspot.com/
# Script for comtrend hg536+ ( firmware A101-302JAZ-C03_R21.A2pB021g.d15h )
# This  scripts connect to router and reset ip in 40s. In this example use default values for jazztel .

import getpass
import sys
import telnetlib
import time
import urllib2
import re


HOST = "192.168.1.1"
LOGIN = "admin"  
PASS = "admin"
PROMPT = " -> "
WAITTIME = 40  # Number of second
CONNECTIONNAME = "0.8.35 2"  # to see your connections, manually connect to router (telnet 192.168.1.1) and use "wan show" .You should choose you PPPoE connection Use a combination of  VCC + Con Id. For example ""0.8.35 2""


def resetear():
    tnt = telnetlib.Telnet(HOST)

    tnt.read_until("Login: ")
    tnt.write(LOGIN + "\n")

    tnt.read_until("Password: ")
    tnt.write(PASS + "\n")

    tnt.read_until(PROMPT)
    tnt.write("ppp config " + CONNECTIONNAME + " down\n")

    time.sleep(3)
    tnt.write("\n")
    tnt.write("ppp config  " + CONNECTIONNAME + " up\n")

    time.sleep(WAITTIME)

    tnt.read_until(PROMPT)
    tnt.write("ppp config  " + CONNECTIONNAME + " up\n")

    tnt.write("\n")

    tnt.read_until(PROMPT)
    tnt.write("13\n") # press option to exit

    tnt.close()
    return
def getip():
    try:
        ip = re.findall( r'[0-9]+(?:\.[0-9]+){3}' ,urllib2.urlopen('http://checkip.dyndns.org/').read())
        salida = ip[0];
    except:   
        salida = '(Error al obtener la ip)'
    return salida

#programa
ip_current = getip()
print 'Current ip -> ' + ip_current
resetear()
ip_new = getip()
print 'New ip -----> ' + ip_new

Sublime text 2 : multiples ventanas

En versiones antiguas de algunas distribuciones como Ubuntu 10.4, sublime text abre múltiples instancias o múltiples ventanas cada vez que hacemos click en algún documento.

Es un problema de la versión de libgio que viene en esa distribución (es < 2.26). Para solucionarlo vamos a bajar una versión actualizada de libgio, la copiaremos en un directorio y haremos que sublime cargue dicha librería antes de empezar.

Realizamos lo siguiente para compilar nuestra propia versión de la librería
git clone git://git.gnome.org/glib
cd glib
git checkout 2.26.1
./autogen.sh --prefix=/opt/lib/glib2.26 make
sudo make install
Ahora creamos un ejecutable (en nuestro home/bin)que cargue la librería antes de ejecutar sublime. Usamos cualquier editor (ej: vi ~/bin/sublime2 ). Y añadimos lo siguiente:
#!/bin/bash LD_LIBRARY_PATH=/opt/lib/glib2.26/lib:$LD_LIBRARY_PATH /path_sublime/sublime_text "$*"
Le damos permisos de ejecución:
chmod +x ~/bin/st
A partir de ahora los archivos se nos abrirán en una sola instancia.

A diferencia del post original  $* va entrecomillado porque si no lo está no se abren correctamente rutas y archivos con espacios.

Fuente: http://mashingwachine.tumblr.com/post/4414279415/sublime-text-2-on-an-old-ubuntu-and-libgio-2-26

Postgres : Ejecutar script en psql sin password

Cuando ejecutamos un script en psql no hay opciones para pasar el password como parámetro. PostgreSQL ofrece dos mecanismos para que no pregunte la constraseña. Esto es útil cuando vamos a ejecutar algún tipo de script.

  1. Variable. La primera opción es definir la variable PGPASSWORD en nuestro script. Podemos poner export PGPASSWORD=miContraseña

  2. Archivo.  Podemos crear el archivo ~/.pgpass (está el home), hay que darle los permisos 600 ( chmod 600 ~/.pgpass ) . Si tiene otros permisos postgreSQL lo ignora.El formato del archivo es el siguiente:
    hostname:port:database:username:password
    Podemos utilizar el * como comodín en lugar de alguna de las partes
    Podemos cambiar la ruta del archivo cambiando la variable PGPASSFILEpara que apunte a otra ruta
Usando cualquiera de estos métodos de postgres  no nos pedirá la contraseña al ejecutar los script. Se recomienda por motivos de seguridad almacenar la constraseña en el archivo, porque las variables podrían ser visibles por otros usuarios, mientras que el archivo no.

FUENTE:
http://www.postgresql.org/docs/9.1/interactive/libpq-envars.html

http://www.postgresql.org/docs/9.1/interactive/libpq-pgpass.html

Añadir texto al comienzo de un archivo

Para añadir texto al inicio de un archivo de texto podemos  generar un archivo nuevo con el texto

echo "texto al comienzo"|  cat  -  cuerpo.txt  >  salida.txt

Es importante indicar que - indica a cat que use la entrada estándar.

 También podemos  concatenar dos archivos también con cat

cat cabecera.txt cuerpo.txt > salida.txt
Para añadir texto al final usamos >>
cat cuerpo.txt >> cabecera.txt

En este último ejemplo se añade cuerpo.txt al final de cabecera.txt