Resolución de Bugs y Errores

Resolución de Bugs y Errores Dataprix 8 Septiembre, 2009 - 09:55

10 bugs de Oracle en 10 minutos

10 bugs de Oracle en 10 minutos sabueso 7 Septiembre, 2007 - 19:11

Cesar Cerrudo, de Black Hat muestra como con herramientas libres buscar bugs dentro de una base de datos.
La noticia , aqui

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

El error ORA-30926 como resultado de una operación Merge

El error ORA-30926 como resultado de una operación Merge Carlos 17 Febrero, 2009 - 22:01

El 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 Agosto, 2009 - 16:37

ORA-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í:

Tunning advisor

 

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: http://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 Septiembre, 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 Octubre, 2007 - 12:48

Este 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:

  1. Parar la consola de Oracle:
    >emctl stop dbconsole
       
       
  2. Ir al directorio:
             >cd $ORACLE_HOME/sysman/admin/scripts
       
       
  3. Realizar backup del fichero osLoad.pl
     
  4. 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;
       
       
  5. Grabar el fichero y arrancar la consola
    >emctl start dbconsole

 

Oscar Paredes

IT Manager
Oracle DBA

oscar.paredes@dataprix.com

 

 

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..

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.

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

Resolver el error “ORA-1031 – INSUFICIENT PRIVILEGES” - Oracle DBA

Resolver el error “ORA-1031 – INSUFICIENT PRIVILEGES” - Oracle DBA Oscar_paredes 1 Enero, 2007 - 22:42

El 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

oscar.paredes@dataprix.com