Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Posible bug Oracle???

Estas en el tema de Posible bug Oracle??? en el foro de Oracle en Foros del Web. Hola, tengo un job programado en varios servidores 9i. El contenido del mismo es el siguiente: begin sys.dbms_job.change(job => :job, what => :what, next_date => ...
  #1 (permalink)  
Antiguo 25/01/2008, 01:24
 
Fecha de Ingreso: marzo-2005
Mensajes: 189
Antigüedad: 19 años, 1 mes
Puntos: 0
Posible bug Oracle???

Hola, tengo un job programado en varios servidores 9i. El contenido del mismo es el siguiente:


begin
sys.dbms_job.change(job => :job, what => :what, next_date => :next_date, interval => :interval);
end;


:JOB=41
:WHAT=perfstat.statspack.snap();
:NEXT_DATE=14/01/2008 10:00:00
:INTERVAL=TRUNC(SYSDATE+1)+10/24


En principio, lo programo y durante unos dias está funcionando correctamente, pero de repente un dia comienza a dar el siguiente error:

Dump file c:\orant\admin\omi\udump\omi_s001_3540.trc
Thu Jan 24 10:26:41 2008
ORACLE V9.2.0.7.0 - Production vsnsta=0
vsnsql=12 vsnxtr=3
Windows 2000 Version 5.2 Service Pack 2, CPU type 586
Oracle9i Enterprise Edition Release 9.2.0.7.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.7.0 - Production
Windows 2000 Version 5.2 Service Pack 2, CPU type 586
Instance name: omi

Redo thread mounted by this instance: 1

Oracle process number: 10

Windows thread id: 3540, image: ORACLE.EXE


*** SESSION ID:(56.6072) 2008-01-24 10:26:41.557
*** 2008-01-24 10:26:41.557
ORA-12012: error en la ejecución automática del trabajo 42
ORA-00001: restricción única (PERFSTAT.STATS$SQL_SUMMARY_PK) violada
ORA-06512: en "PERFSTAT.STATSPACK", línea 1361
ORA-06512: en "PERFSTAT.STATSPACK", línea 2471
ORA-06512: en "PERFSTAT.STATSPACK", línea 91
ORA-06512: en línea 1

La poca información que he podido encontrar me hace pensar que puede ser un bug de Oracle, pero no sabria como se puede solucionar.
Los servidores son prácticamente idénticos, y como ya digo, este fallo tampoco se da en todos, pero si en la mayoria.
La única forma de solucionarlo es eliminando el job y volviendo a programarlo, si intento modificarlo no funciona... Y a los pocos dias vuelve a fallar.
  #2 (permalink)  
Antiguo 25/01/2008, 13:08
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Re: Posible bug Oracle???

Hola,

Sip, confirmado, es un bug grande como una casa :(

Si estas en un entorno de RAC tienes el Bug No.2784796, si no estas en un entorno RAC puedes ver la Nota: 393300.1, las dos estan publicados en Metalink.

Pd, creo que por cuestiones legales no puedo hacer un copy/paste de la informacion de metalink.

Saludos
  #3 (permalink)  
Antiguo 04/03/2008, 10:24
 
Fecha de Ingreso: marzo-2005
Mensajes: 189
Antigüedad: 19 años, 1 mes
Puntos: 0
Re: Posible bug Oracle???

Gracias, ya he podido acceder a la nota de Metalink, pero ahora me asalta un duda.
Resulta que he instalado un nuevo servidor y le he creado el Job.
Al ejecutarlo me da el mismo error de siempre, pero en el fichero de traza del log me muestra el siguiente mensaje:

*** 2008-03-04 17:07:56.944
ORA-12012: error en la ejecución automática del trabajo 2
ORA-04063: tiene errores
ORA-04063: package body "PERFSTAT.STATSPACK" tiene errores
ORA-06508: PL/SQL: no se ha encontrado la unidad de programa llamada
ORA-06512: en línea 1


También he observado que en los servidores que tienen este job desde hace un tiempo, en TOAD lo marca con una X y el mensaje de BROKEN, sin embargo cuando borro el job, lo creo exactamente igual y lo ejecuto esto no ocurre, solo cuando pasa un tiempo, me da la impresión.

Bueno, eso era solo una curiosidad, lo que queria saber realmente es si el mensaje que he puesto mas arriba se debe al mismo bug de Oracle, es decir, si debo tratarlo con la misma nota de Metalink que el anterior.
  #4 (permalink)  
Antiguo 04/03/2008, 10:31
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Re: Posible bug Oracle???

Hola,

Primero, debes ver el estado del package STATSPACK, en la vista dba_objects, el campo status, si es invalid intenta compilar el package y el body.

Segundo, para ver el estado de un job, puedes utilizar la siguiente consulta conectado como el usuario propietario de la tarea.

Código:
select job, last_date, next_date, next_sec, total_time, failures, broken
from user_jobs
Donde

job: Identificador de la tarea
last_date: fecha de la ultima ejecucion exitosa
next_date: fecha de la proxima ejecucion
next_sec: hora de la proxima ejecucion
total_time: tiempo de ejecucion de la tarea
failures: cantidad de veces que fallo la tarea
broken: Y/N estado activado/suspendido de la tarea, si es broken no se ejecuta

El job entra en estado broken cuando se ejecuta N veces y falla, probablemente por el estado del package STATSPACK.

Saludos
  #5 (permalink)  
Antiguo 04/03/2008, 11:01
 
Fecha de Ingreso: marzo-2005
Mensajes: 189
Antigüedad: 19 años, 1 mes
Puntos: 0
Re: Posible bug Oracle???

Efectivamente el estado de Statspack es invalid, pero aunque a estas alturas parezca una bobada, no entiendo eso de volver a compilar el package y el body, si te refieres a borrar el job y volver a crearlo, eso lo he hecho bastantes veces.

Tambien tenias razón, como no, en lo de broken, tras ejecutarlo 20 veces ha cambiado a este estado.

La duda mia sigue siendo la misma, me sigue dando en el fichero de traza errores diferentes al que menciona la nota de Metalink,en ella habla del error ORA-12012, ORA-00001 y ORA-06512. Y en el log de este servidor, cuando ejecuto el mismo job me muestra los errores ORA-12012, ORA-04063, ORA-06508 y ORA-06512.

Yo pienso que sique podria tratarse del mismo fallo, aunque puede que por algún motivo de errores diferentes, de todas formas, como no tengo mucha experiencia en esto me gustaria estar del todo seguro....

Un saludo y muchas gracias por la ayuda.
  #6 (permalink)  
Antiguo 04/03/2008, 11:06
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Re: Posible bug Oracle???

Hola,

No se puede ejecutar un package si la definicion o el body estan invalidos, por eso es que el job debe estar fallando, para compilarlo

Código:
alter package statspack compile;
alter package statspack compile body;
Despues vuelve a validar el estado en la vista dba_objects, si esta en estado valido, prueba el job.

Saludos

Última edición por matanga; 05/03/2008 a las 03:35
  #7 (permalink)  
Antiguo 05/03/2008, 07:01
 
Fecha de Ingreso: marzo-2005
Mensajes: 189
Antigüedad: 19 años, 1 mes
Puntos: 0
Re: Posible bug Oracle???

Perfecto.

Siguiendo los pasos de la nota de Metalink, y luego volviendo a compilar el package los jobs comienzan a funcionar correctamente.

Solo cuando el error es :
ERROR at line 1:
ORA-00001 : unique constraint (PERFSTAT.STATS$SQL_SUMMARY_PK) violated
ORA-06512 : at "PERFSTAT.STATSPACK", line 1361
ORA-06512 : at "PERFSTAT.STATSPACK", line 2442
ORA-06512 : at "PERFSTAT.STATSPACK", line 91
ORA-06512 : at line 1


Cuando me da los otros errores no funciona, pero de momento esto solo me ocurre en el servidor de pruebas....espero que siga así.

Muchas gracias por todo.
  #8 (permalink)  
Antiguo 05/03/2008, 07:13
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Re: Posible bug Oracle???

Por nada :)

Saludos y suerte.
  #9 (permalink)  
Antiguo 07/04/2008, 06:34
 
Fecha de Ingreso: abril-2008
Mensajes: 3
Antigüedad: 16 años
Puntos: 0
Re: Posible bug Oracle???

Hola.
Yo también tengo un error de restricción única violada sólo que yo no uso jobs y no sé si es exactametne este bug del que habláis.
No consigo ver la información en metalink.

El caso es que tengo una aplicación que al hacer un insert en una tabla que tiene esta constraint:
ALTER TABLE INVE_VISITAS ADD (
CONSTRAINT INVE_VIS_NUM_VISITA_UK UNIQUE (C_PROV_ID, N_VISITA));
me sale ese error de restricción única violada.
Lo que hacemos es hallar el máximo N_VISITA para un C_PROV_ID dado y sumarle uno, para asegurarnos de que no se repita, pero por algún extraño motivo la función MAX(N_VISITA) está devolviendo un null.
El trozo de la sentencia donde está el problema es este:
(SELECT NVL((MAX(N_VISITA))+1,1) FROM inve_visitas WHERE c_prov_id = 24 )
Ya existen registros para c_prov_id=24 pero el caso es que ese MAX(N_VISITA) siempre devuelve null, por lo tanto la función NVL siempre devuelve un 1 y como ya existe un registro con la pareja de valores (24,1) para esa constraint, salta la excepción.
Si quito la parte de la función NVL, dejando sólo MAX(N_VISITA)+1 me salta un error de que no se puede insertar un NULL.

Lo gracioso es que si ejecuta la sentencia desde el Toad, por ejemplo, funciona perfectamente.

No sé si me habré explicado muy bien. A ver si podéis echarme una mano o decirme si se trata de un bug del oracle (por cierto, versión 9)

Muchas gracias!
  #10 (permalink)  
Antiguo 07/04/2008, 08:44
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Re: Posible bug Oracle???

Hola,

El thread original se refiere a un bug en STATSPACK, no es el caso que presentas.

Cita:
Lo gracioso es que si ejecuta la sentencia desde el Toad, por ejemplo, funciona perfectamente.
Si la consulta te funciona desde el TOAD, diria que no hay problemas en la base de datos, un MAX sobre un campo que contiene NULL devuelve el numero maximo, ¿desde donde no te funciona la consulta?

Cita:
(SELECT NVL((MAX(N_VISITA))+1,1) FROM inve_visitas WHERE c_prov_id = 24 )
No te recomiendo esta tecnica para obtener un numero unico, piensa que no soporta concurrencia, si dos consultas se ejecutan al mismo tiempo, al momento de hacer un insert vas a tener un error de clave duplicada, es mas apropiado utilizar secuencias, que para esto mismo fueron pensadas.

Saludos
  #11 (permalink)  
Antiguo 07/04/2008, 09:00
 
Fecha de Ingreso: abril-2008
Mensajes: 3
Antigüedad: 16 años
Puntos: 0
Re: Posible bug Oracle???

Perdonar que me haya metido en el thread equivocado.

La consulta no me funciona al "lanzarla" desde una aplicación hecha en java con struts. Si no me equivoco por debajo si utilizamos algo que resuelve el problema de concurrencia.

Creo que debemos tener algún problemilla raro con la base de datos, porque otras sentencias similares, donde se usan también las funciones MAX y NVL funcionan sin problemas. Algo mal debe tener esa tabla en concreto...

Gracias por la ayuda!
  #12 (permalink)  
Antiguo 07/04/2008, 09:18
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Re: Posible bug Oracle???

Hola,

Perdona, recien veo esto WHERE c_prov_id = 24, si ningun registro cumple con la condicion, al tener un MAX en el SELECT, Oracle devuelve 1 registro con valor NULL en vez de 0 registros.

Código:
SQL> select id from t1;

        ID
----------
         1
         2
         3
         4

SQL> select id from t1 where id = 10;

ninguna fila seleccionada

SQL> select nvl(max(id),10) from t1 where id = 10;

NVL(MAX(ID),10)
---------------
             10
Saludos
  #13 (permalink)  
Antiguo 08/04/2008, 00:32
 
Fecha de Ingreso: abril-2008
Mensajes: 3
Antigüedad: 16 años
Puntos: 0
Re: Posible bug Oracle???

Sí, esa es nuestra intención, que si no hay ningún registro para ese código de provincia (c_prov_id), nos devuelva un 1. En ese caso no hay problema.
c_prov_id : n_visita
24 : 1

El problema está cuando ya existe algún registro con ese código de provincia (en el ejemplo que ponía, c_prov_id=24) que, según el ejemplo, el MAX (N_VISITA) tendría que devolver un 1 y como le estamos sumando otro +1
(SELECT NVL((MAX(N_VISITA))+1, 1) FROM inve_visitas WHERE c_prov_id = 24)
estaríamos insertando el par (24,2) pero por algún extraño motivo el MAX(N_VISITA) devuelve null, igual que si no existiese ningún registro de esa provincia, y por lo tanto, vuelve a intentar insertar el par (24,1) que ya existe y de ahí la excepción de restricción única violada.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:53.