Resolución de Bugs y Errores
Resolución de Bugs y Errores Dataprix 8 September, 2009 - 09:5510 bugs de Oracle en 10 minutos
10 bugs de Oracle en 10 minutos sabueso 7 September, 2007 - 19:11Cesar Cerrudo, de Black Hat muestra como con herramientas libres buscar bugs dentro de una base de datos.
La noticia , aqui
El error ORA-30926 como resultado de una operación Merge
El error ORA-30926 como resultado de una operación Merge Carlos 17 February, 2009 - 22:01El error ORA-30926 suele producirse cuando se realizan operaciones Merge, y lo normal es que nos deje algo descolocados, ya que la descripción del mismo no da demasiada información sobre lo que está pasando:
ORA-30926: unable to get a stable set of rows in the source tables.
Normalmente este error se produce cuando en la operación Merge a una fila destino que hay que actualizar le corresponden más de una fila en la tabla origen. Como el motor no sabe qué registro escoger devuelve un error. Es un problema de duplicidad en la tabla origen.
Ejemplo:
- Tenemos:
TABLA_ORIGEN con los valores
ID Descripcion
1 'El primer valor'
1 'El valor con id duplicado'
2 'Otro valor'Y TABLA_DESTINO con los valores
ID Descripcion
1 'Valor a actualizar'
2 'Este no dará problemas'
3 'Este se queda igual'
- Queremos hacer un merge utilizando la siguiente sentencia:
MERGE into TABLA_DESTINO dest USING TABLA_ORIGEN ori ON (dest.ID = ori.ID) WHEN MATCHED THEN UPDATE SET a.Descripcion = b.Descripcion;
Con estos datos obtendríamos el siguiente error sobre TABLA_ORIGEN:
ORA-30926: no se ha podido obtener un juego de filas estable en las tablas de origen
- Ante este error tenemos 3 opciones:
1-. Eliminar los registros duplicados de la tabla origen:
DELETE FROM TABLA_ORIGEN WHERE id=1 AND Descripcion='El valor con id duplicado'
2-. Revisar las claves por las que hacemos la join en el merge:
Si utilizamos también el campo Descripcion en el enlace ya sólo habrá cero o un registro origen para cada destino:
MERGE into TABLA_DESTINO dest USING TABLA_ORIGEN ori ON (dest.ID = ori.ID AND dest.Descripcion=ori.Descripcion) WHEN MATCHED THEN UPDATE SET a.Descripcion = b.Descripcion;
(En este ejemplo no tiene mucho sentido porque la tabla son sólo estos dos campos, y además la join no encontrará coincidencias)
3-. Utilizar en lugar del MERGE un UPDATE con JOIN y el HINT /*+BYPASS_UJVC */ para saltarnos la validación del motor, y cruzar los dedos:
UPDATE /*+ BYPASS_UJVC */
( SELECT ori.ID ori_ID,
ori.Descripcion ori_Descripcion,
dest.ID dest_ID,
dest.Descripcion dest_Descripcion
FROM TABLA_ORIGEN ori, TABLA_DESTINO dest
WHERE ori.ID = dest.ID)
SET dest_Descripcion = ori_Descripcion;
Obviamente las más recomendables son la primera o la segunda, según el caso. La tercera opción, desde que la versión 11g R2 de Oracle ya no acepta el hint BYPASS_UJVC por considerarlo Deprecated, es ya totalmente desaconsejable para entornos de producción porque aunque ahora funcione por ser versiones anteriores a la 11g, las queries que incorporen este hint fallarán cuando se actualice la base de datos a una versión a partir de la 11g R2.
Otra buena opción para evitar el error ORA-30926 en operaciones de MERGE es modificar la sentencia aplicando un distinct para evitar los duplicados, o utilizando un group by y una función de agregación Min, Max o Sum, por ejemplo, sobre los campos que contengan los valores duplicados.
ORA-01555 Snapshot too old
ORA-01555 Snapshot too old il_masacratore 11 August, 2009 - 16:37ORA-01555 Snapshot too old
La base de datos de una compañia normalmente tiene que aguantar algunas transacciones largas y pesadas. Si la base de datos es Oracle, está recien instalada y poco manipulada esas transacciones y sus primeras ejecuciones tienen pocas probabilidades de éxito. Es entonces cuando acaba apareciendo el fatídico ORA-01555, alias "... snapshot to old".
La gestión de consultas largas en Oracle viene limitada por el tamaño del tablespace de deshacer (undotbs). A mayor tamaño sera posible gestionar las transacciones más largas y pesadas. En Oracle 10g recien instalado el tamaño de este tablespace se reducido y uno no se suele dar cuenta hasta que falla la cosa.
Si la versión es la 10 se puede modificar directamente desde Oracle Enterprise Manager (consola web) en el apartado de administración, "Gestión de Deshacer". Allí tenemos el tiempo de retención, el tamaño del tablespace y podemos usar también el asesor para ver el tiempo de retención posible en base al tamaño en mb del tablespace.
Algo así:
En resumidas cuentas, le asignamos un tamaño mayor al tablespace que tengamos de "deshacer" y a ver si vale...
Para más información dejo aquí el Link de Oracle: https://www.oracle.com/technetwork/oramag/index.html
Ora10g: TNS-12518 Listener could not hand off client connection
Ora10g: TNS-12518 Listener could not hand off client connection il_masacratore 13 September, 2010 - 17:07
Cuando se produce este error el listener de nuestra base de datos Oracle está rechazando conexiones y no nos podemos conectar de ninguna manera con la base de datos. Para ver que está pasando podemos consultar el log del listener en /opt/oracle/product/10.2/db_1/network/log/listener.log para ver que nos cuenta el sistema. En el caso que nos ocupa podemos encontrar una entrada como la siguiente:
"TNS-12518: TNS:listener could not hand off client connection"
En el caso que me he encontrado este error puede producirse porque el número de procesos actuales de la base de datos está muy cerca del límite establecido en la configuración (por defecto 150). Inmediatamente se puede solucionar reiniciando el listener pero es recomendable revisar el valor del parámetro processes para incrementarlo. El valor máximo que le asignemos a este parámetro es trivial pero si lo modificamos debemos recalcular el valor de transacctions y sessions para que tengan en cuenta las sessiones de sistema de esta manera:
processes=x
transacctions=x*1.1
sessions=(processes*1.1)+5
Si con esto vemos que no se soluciona o queremos investigar más podemos activar la traza del listener para saber más sobre lo que acontece...
Oracle 10g - Suse Enterprise Error Consola: java.lang.Exception: Failed to get Number of users
Oracle 10g - Suse Enterprise Error Consola: java.lang.Exception: Failed to get Number of users Oscar_paredes 2 October, 2007 - 12:48Este error de la consola de Oracle 10gR2 con Suse Enterprise (confirmado versión 10) hace que durante la navegación por la consola vayan apareciendo errores en la parte superior con el mensaje:
java.lang.Exception: Failed to get Number of users
La solución que puede aplicar el DBA de Oracle pasa por realizar los siguientes pasos:
- Parar la consola de Oracle:
>emctl stop dbconsole
- Ir al directorio:
>cd $ORACLE_HOME/sysman/admin/scripts
- Realizar backup del fichero osLoad.pl
- Editar el fichero osLoad.pl y cambiar las siguientes lineas:
>>> my $loadavg = NIL;
<<< my $loadavg = "0.46, 0.66, 0.61";
>>>> my $nusers = NIL;
<<<< my $nusers = 1;
- Grabar el fichero y arrancar la consola
>emctl start dbconsole
Oscar Paredes
IT Manager
Oracle DBA
certificacion SUSE
Pues si que es un incordio que nada mas instalar salga este mensaje de error. Se supone que SUSE esta certificado por Oracle para la version 10g de la base de datos, no?
Esperemos que en la proxima release ya no pase, no afecta a nada, pero no da muy buena imagen. Es una pena, porque la nueva consola esta muy conseguida y la facilidad de administracion es realmente impresionante..
- Log in to post comments
Que es una "certificacion" ?
Hace tiempo pensaba igual que tu , que una certificacion era una garantia de una "autopista de instalacion".
Pues no , una certificacion creo que en los tiempos que corren , solo quiere decir que alguien te va a escuchar via telefonica o por correo y van a tener un contrato con la empresa N para que si el producto no tira por causas del sistema operativo , todos trabajen en conjunto para llegar a la solucion.
- Log in to post comments
error de oracle 10g
Buenas noches al tratar de abrir oraclo10g me manda un error y no me permite accesar al aplicativo de antemano espero me ayuden con este error el error es el siguiente solo en algunas maquinas lo manda gracias
error (0xc0000008) error de la aplicacion la aplicacion no se ha podido inicializar correctamente
espero me ayuden de antemano gracias
- Log in to post comments
Estudiar informática
Pues para quien esté pensando en estudiar informática en España aquí dejo otro link donde gente 'con carrera' da su opinión sobre el panorama actual:
- Log in to post comments
Resolver el error “ORA-1031 – INSUFICIENT PRIVILEGES” - Oracle DBA
Resolver el error “ORA-1031 – INSUFICIENT PRIVILEGES” - Oracle DBA Oscar_paredes 1 January, 2007 - 22:42El error ORA-1031 - Insuficient privileges es uno de los errores más comunes que se puede encontrar un DBA de Oracle durante la conexión como SYSDBA a entornos Windows no administrados de manera cotidiana.
Además tiene la característica de que siempre aparece cuando más puede molestar ;-)
Oscar Paredes
IT Manager
Oracle DBA
Bugs de Oracle o de Windows?
Submitted by Carlos on 8 September, 2007 - 10:37
Las herramientas utilizadas para detectar estos bugs son Process Explorer, WinObj, Pipeacl, and Interactive Disassembler (IDA), y la plataforma utilizada un Windows.
Ahora están investigando si estos problemas de seguridad son de la base de datos o del propio Windows, que nos avise quien se entere de las conclusiones.
De todas maneras detectar problemas de seguridad en un software que corra bajo esta plataforma es importante, pero no me parece un gran hallazgo.
A ver si alguien se anima a encontrar otros 10 bugs sobre la versión 10g de Oracle sobre UNIX, o incluso la de LINUX y nos lo cuenta..
Carlos Fernández
Analista de sistemas