lunes, 25 de abril de 2011

Bad Types (confusión con TO_CHAR, TO_DATE y tipos de dato)

Siempre he pensado que éste tema merece un póster...

Bad TypePor alguna razón, que debería ser motivo de reflexión, los formatos de fecha y especialmente el uso de las funciones TO_CHAR y TO_DATE suelen ser motivo de confusión...

Aunque lo he explicado ya unas pocas veces en persona, una consulta en la Comunidad de Oracle Hispana ha propiciado que escriba unas lineas sobre el tema...

No es el único caso, pero por lo que he visto el problema viene cuando se quieren comparar uno o varios campos y hay fechas por medio. Para empezar hay que dejar algo claro, cuando comparamos dos elementos deberían ser del mismo tipo, nada de peras con manzanas.

Es por eso que lo primero es revisar los Tipos de Dato en Oracle.

Pero no siempre lo tenemos todo fácil, o simplemente no le podemos pedir a un usuario que escriba día, mes, año, minuto, segundo (que es lo que incluye el tipo DATE en Oracle) en el formulario de nuestra aplicación, para buscar las facturas del mes pasado. Es por es eso que existen las funciones TO_CHAR y TO_DATE; pero vayamos al grano:

Si el campo es fecha y queremos los resultados anteriores al día 3 de enero de 2011, bastará con convertir la cadena '03/01/2011' a formato fecha de Oracle, el se encarga de completar hora, minutos y segundos con ceros:

WHERE campo_fecha < to_date('03/01/2011','DD/MM/YYYY')

Si el campo es una cadena de carácteres:

WHERE to_date(campo_cadena,'DD/MM/YYYY') < to_date('03/01/2011','DD/MM/YYYY')

Pero Oracle en contadas ocasiones realiza conversiones implícitas, por lo que es posible utilizar:

WHERE campo_fecha < '03/01/2011'

Pero lo recomendable es que controlemos nosotros las conversiones.

En otras ocasiones si queremos los resultados anteriores a un año y el campo es fecha, se puede utilizar:

WHERE to_char(campo_fecha,'YYYY')< '2011'

Extraemos del tipo DATE unicamente la información del año, y la comparamos con una cadena entrecomillada.

Es un tema sencillo, pero espero que le sirva a alguien. Para más detalles os dejo un enlace que comentaba Diego en la @cohispana : Funciones integradas de PL/SQL

Imagen: Bad Type

lunes, 18 de abril de 2011

Oracle Critical Patch Update - Abril 2011

Mañana día 19, Oracle publicará el CPU de Abril.

El tema de las actualizaciones es complicado, pero es interesante analizar de vez en cuando los Critical Patch Update de Oracle. Aunque actualizan cualquier producto de la marca, me centraré, como siempre, en la base de datos.

Como ya sabréis, Oracle publica parches en Enero, Abril, Julio y Octubre, avisando el jueves previo a su publicación. En esta ocasión hay 6 parches para la base de datos y 2 para Grid Control.

Oracle utiliza un sistema de puntuaciones para valorar la criticidad de los parches, el CVSS. Las puntuaciones van de 1 a 10 y en este caso para la base de datos llegan al 6,5 y para Grid Control al 5,5. Aunque cada unos puede valorar según su entorno, dos de las vulnerabilidades de la base de datos se pueden explotar remotamente, sin usuario ni clave de acceso.

Lo que dicten vuestras consciencias... =D

Para completar la información, versiones afectadas:
  • Oracle Database 11g Release 2, versiones 11.2.0.1, 11.2.0.2
  • Oracle Database 11g Release 1, versión 11.1.0.7
  • Oracle Database 10g Release 2, versiones 10.2.0.3, 10.2.0.4, 10.2.0.5
  • Oracle Database 10g Release 1, versión 10.1.0.5
Productos afectados:
Es evidente que el impacto en nuestros sistemas dependerá de los productos que tengamos instalados y donde "recaen" los dos bugs peligrosos, pero esa información todavía no la he encontrado.

Otras puntos a destacar, no afectan al cliente (vuelvo a comentar que solo me centro en la base de datos y grid control) y es el primer CPU que afecta a la versión 11.2.0.2 de Oracle.

Si os interesa, en Integrigy tienen un webinar preparado para el 5 de Mayo de 20.00h a 21.00h.

jueves, 14 de abril de 2011

Configurar el Entorno de Oracle [MICRO]

Para seros sinceros, soy de los que va re-configurando el entorno a mano, una, y otra vez... Pero no nos engañemos, no es la mejor forma.

Lo primero de todo, las variables del entorno son básicas cuando hablamos de trabajar con bases de datos Oracle. Son vitales durante la instalación, la administración y para los clientes. Es por ello que les dedico un poco de atención.

Empecemos con las variables básicas de Sistema:
  • TEMP, TMP y TMPDIR, configura el directorio temporal, básicos durante la instalación.
  • LANG, para definir el idioma con el que trabajamos.
Hasta aquí fácil, ahora toca las variables de Oracle. Basta con lanzar el siguiente script:

$ . /usr/local/bin/oraenv

Nos preguntará el SID (Sytem IDentifier) de la instancia con la que queremos trabajar y voilá! nuestro entorno configurado como por arte de magia...

Durante la instalación Oracle nos pide cambiar al usuario root y ejecutar un script que, entre otras cosas, instala estos scripts: oraenv, dbhome y coraenv (no me digáis que no os suenan).

El script oraenv, con ayuda de dbhome, configura la siguientes variables:
  • ORACLE_SID, con el SID que hayamos indicado
  • ORACLE_BASE, directorio base de instalación del sotware de Oracle
  • ORACLE_HOME, directorio del producto con el que queremos trabajar: database, grid, agent,
  • LD_LIBRARY_PATH, interesante sobretodo si tenemos librarías de 32 y 64 bits
  • PATH, se añade $ORACLE_HOME/bin al final del PATH
Todos estaremos pensando lo mismo ¿hay que poner el SID, cada vez? Bastará con configurar en el ~/.bash_profile:

ORACLE_SID=
ORAENV_ASK=NO
. /usr/local/oraenv


Listo, entorno configurado, sin preguntas y basado en la instalación (/etc/oratab). Como anécdota comentar que podemos utilizar otra variable: ORACLE_TRACE=T que nos permite debugar la ejecución de los scripts (opción -x de bash).

Otras variables interesantes:
  • TNS_NAMES, directorio donde ubicaremos el archivo tnsnames.ora con nuestras conexiones
  • NLS_LANG, idioma, región y mapa de caracteres que utilizaremos como clientes
  • CLASSPATH, por si tenemos problemas con Java (la mayoría de entornos gráficos son Java)
  • DISPLAY, para la instalación "old style"
Para los que quieran profundizar: TWO_TASK, ORA_NLS10, ORA_TZFILE.


También lo puedes leer en prinsepac.

domingo, 10 de abril de 2011

Bienvenido a La Nube

Quizás para muchos ya llegó hace tiempo, pero puedo he de decir que para mi ha sido todo un placer probar la nube de Amazon. Lo segundo es aclarar que no tengo ningún tipo de relación con la gente de Amazon y seguiré criticándolos por no abrir una tienda en España (por mucho buy·v!p que hayan comprado).

Primero hace falta una definición, y es que el tema puede llevar a más discusiones de las que parece, en este caso la he robado de los mejores:


"Cloud Computing es el término paraguas bajo el que se encuentras un conjunto de métodos para ofrecer recursos informáticos a través de la red."



Sin profundizar demasiado, encontramos tres tipos:
  • Software as a Service (SAAS), no confundir con el Shave as a Service =) , el más simple... pensemos en el correo web, pues simplemente eso, usar una aplicación de un tercero, que está en la red.
  • Platform as a Service (PAAS), si lo complicamos un poco más, la aplicación en este caso es nuestra, pero necesitamos añadir funciones a nuestra plataforma: autenticación, una base de datos relacional, un servicio de intercambio de archivos.
  • Infrastructure as a Service (IAAS), el hosting/housing de toda la vida, si... pero con las soluciones de virtualización la flexibilidad es mayor, disponemos de equipos a demanda y con los recursos ajustados. Si queremos crecer: click!

Nubes en TaburienteLas nubes nos invaden, pero yo me he concentrado en Amazon por una razón muy simple, y es que parece que Oracle le da soporte. Los "Amazon Web Services" AWS están soportados por Oracle del mismo modo que Oracle soporta cualquier otra plataforma de virtualización: para temas especificos del equipo virtual... llamar a Amazon. Tampoco me voy a concentrar en los usos que podamos dar a la "nube", pero si volviera a ser profesor, creo que las practicas las haría... allí arriba.


El servicio de Amazon que permite la provisión de equipos virtuales se llama "Elastic Compute Cloud" (EC2), donde contratamos cierta CPU con cierta capacidad de I/O, en una arquitectura de 32 o 64 bits y el almacenamiento que necesitemos. Un poco de teoría:

  • Amazon Machine Image (AMI), Amazon dispone una gran cantidad de "imagenes" preparadas con una gran variedad de S.O. y Software, entre ellas OEL con una base de datos Oracle pre-instalada.
  • Región AWS, podemos elegir entre varias ubicaciones geográficas. En función de a quien le demos servicio nos puede ir bien una u otra, o incluso un cluster que atraviese medio mundo. Hay que tener en cuenta que no todas las imágenes están disponibles en todas las regiones.
  • Grupos de Seguridad, aquí es donde empecé a sorprenderme: un firewall para nuestro equipo completamente configurable.
  • Claves de Seguridad, acceso con certificados, parece evidente, pero encima lo han hecho sencillo.
  • Tipo de Instancia, ya he comentado que para nuevos clientes hay un tipo "micro" de oferta... luego dependerá de la capacidad que queramos.
goingDejémonos de cháchara:
  • Si todavía no tienes cuenta, date de alta en el AWS. Necesitarás una tarjeta de crédito y un teléfono (llamada automática para confirmar tu identidad).
  • Luego entramos en la Management Console for EC2. Existe incluso un plugin para firefox llamado Elasticfox, pero el entorno web hay que verlo.
  • Buscar el botón de "Lounch Instance"
  • Podéis buscar la imagen de "oraclexe"
  • Elegir el tipo, esta vez "Micro"
  • Crear las claves privada y pública.
  • Definir los puertos abierto en "nuestro" firewall (22 y 1521 mínimo)
  • Darle al Start
  • Darle al Connect, una de las opciones es el commando ssh preparado con la clave privada que ya hemos creado.


La dirección IP cambia cada vez que levantemos el equipo (lo del DNS dinámico os lo dejo a vosotros. El espacio es volátil si "terminamos" con la instancia, debemos pararla para que se mantenga... aunque ahora solo estamos jugando, para cosas serias tocará pagar.

Podemos crear nuestro propio segmento privado de equipos, gestionar el almacenamiento con snapshots, ... para mi es como un CPD en la nube... ¿ésto no estaba en la lista de arriba, no?

Para más detalles:

PD: yo no he dejado de preguntarme ¿qué utilizarán para la virtualización? la respuesta: Xen

Imagen: going, Nubes en Taburiente

domingo, 3 de abril de 2011

Oracle Database 11.2 Express Edition Beta

Este fin de semana aparece la primera beta de Oracle XE 11.2.

Para quien no lo conozca, Oracle Express Edition es una versión gratuita de la base de datos Oracle con ciertas limitaciones, ideal para:
  • Instalarte en tu PC si eres Desarrollador o DBA
  • Montar embebido en tus productos, por reducción de costes, y mientras no crecas demasiado...
  • Dar formación

Las limitaciones son:
  • 1 Instancia
  • 1 Procesador
  • 1 GBytes de RAM
  • 11 GBytes de datos

Lo primero que necesita un "early adopter" (y esta versión solo es para ellos) es localizar las principales fuentes de información (la poca que exista).

Fuentes oficiales:

No habrá versiónes para Linux x86 y MacOS. Que hayan lanzado la versión de Windows para 32 bits y la de Linux para 64 intuyo que es parte de la estrategia de Oracle para competir contra SQL Server con MySQL y no con su producto estrella. ¿Demasiado sutil? cosas de un kinestésico...

Comentar que en esta versión funcionan cosas como el modo ARCHIVELOG, o el Edition-Based Redefinition. Éste último me ha sorprendido bastante y habrá que probarlo. Una buena excusa para instalarlo aunque haya tenido que tirar de una máquina virtual Windows (tengo linux de 32 bits).



Para acabar, algunos enlaces: las entradas en los blogs de los mejores:

Y una "inestimable" guía de "¿y como lo hago en Ubuntu?":

Si has llegado hasta aquí, no hay duda, eres un "early adopter". En ese caso, dejes de atender la llamada del blog de OTN y difundida por @fcomunoz en busca de feedback.

PD: Un cotilleo... parece que hay algún problema en la instalación de Windows si tenemos un antivirus instalado (algo impensable!).