![]() |
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. |
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 |
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. |
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, brokenjob: 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 |
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. |
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;Saludos |
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. |
Re: Posible bug Oracle??? Por nada :) Saludos y suerte. |
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! |
Re: Posible bug Oracle??? Hola, El thread original se refiere a un bug en STATSPACK, no es el caso que presentas. Cita:
Cita:
Saludos |
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! |
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; |
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. |
| La zona horaria es GMT -6. Ahora son las 00:39. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.