lunes, septiembre 29, 2008

Bugs Oracle



Si, los mejores productos también tienen sus fallos y muchas veces perduran durante mucho tiempo. Un bug puede convertirse en un auténtico quebradero de cabeza para un técnico de sistemas y además suele provocar las sonrisas de los de desarrollo (una vez solucionado el problema, claro está).

Suelen decir algo así como "no decían los de Oracle que mis SQL no estaban optimizadas, pues anda que su base de datos..."

Estamos probando todas nuestras aplicaciones en una versión Oracle superior a la que queremos migrar el entorno de producción (producción es Oracle 9.2 y el entorno de pruebas 10.2.0.3). En este entorno que ahora mismo es de pruebas, hace unos días hicimos un intento de migración a la 10.2.0.4 para solucionar un bug. Al final decidimos no migrar ya que se en la documentación de Oracle pedían como prerrequisito instalar dos parches del sistema operativo (HP-UX). Los parches se han instalado hoy y la migración Oracle será mañana.

El bug era para volverse loco. 
Una sentencia SQL perfectamente válida y que funcionaba en Oracle 9.2 ya no funcionaba en el nuevo entorno que se va a poner en producción en las próximas semanas.

SELECT '09',
DECODE (GROUPING (TH), 1, '00', TH) AS TH,
DEF04 AS DEF04,
DECODE (GROUPING (SEXO), 1,'10', SEXO) AS SEXOSUM (VALOR) AS VALOR
FROM VISTA9_2_DEFS
GROUP BY cube (TH, DEF04, SEXO)
HAVING DEF04 IS NOT NULL;

No voy a poner el script CREATE OR REPLACE VIEW de la vista, pero hay que remarcar que tiene una particularidad. En la Select que construye la vista hay una llamada a una función. En principio todo está bien construido.

Esta sentencia SQL pertenece a un PL-SQL que ejecuta una aplicación. En producción (Oracle 9.2) funciona sin problemas, pero en las pruebas de migración (Oracle 10.2.0.3) devuelve el siguiente error Oracle: ORA03001: Unimplemented Feature.

Sabíamos que la sentencia era correcta porque funcionaba correctamente en versiones anteriores de Oracle. Esto era un síntoma de tratarse de un bug. En esta situación pueden ocurrir tres cosas:
1.-El bug es conocido y existe un parche, 2.-el bug es conocido pero no hay parche que valga, o 3.-nadie sabe siquiera de su existencia.

En estos casos es necesario tener al menos el soporte básico que hasta ahora se llamaba "Metalink" y este mismo mes han cambiado la denominación por "My Oracle Support”. En ese sitio web oficial hay un enlace denominado “Bug Database”.

Buscando en el bug database, encuentras que el bug se conoce y tiene solución. El código del bug  es 5847881. Se trata de un bug que se puede producir cuando en la sentencia se utilizan funciones analíticas, lecturas de vistas y funciones pl/sql en la construcción de la vista. 

If a select query includes,

1. analytical function

2. view

3. pl/sql function within view

and  the select query  results with ora-3001  unimplemented feature during  unparsing  of  the pl/sql  function  then probably  you are hitting this bug.

En la incidencia que se encuentra documentada en el "bug database", el bug lo encontró un cliente al migrar de la versión 9.2 de Oracle a la 10.2.0.1.

En nuestro caso particular nos ha aparecido en las pruebas de migración de la 9.2 a la 10.2.0.3. Nos han informado desde Oracle que el problema se ha solucionado en la versión 10.2.0.4. Por eso mañana vamos a intentar la migración de la 10.2.0.3 a la 10.2.0.4.

Saludos.


No hay comentarios: