Error:
ORA-06502: PL/SQL: Numeric or Value Error String
Causa:
Un error de conversion numerico o aritmetico ha ocurrido. Por ejemplo este error es muy común cuando se trata de asignar el valor NULL a una variable declarada como NOT NULL. O si se trata de asignar por ejemplo un valor mayor a 00 a una variable declarada como NUMBER(2).
Solucion:
La unica solucion a este problema es cambiar la información, la forma en que es manipulada o como fue declarada para que no viole las reglas.
Este Blog trata sobre la solución de problemas y errores de Oracle en español. También repasaremos instalacion de Oracle y sus productos, actualizaciones, upgrades de versiones, migraciones, etc.
jueves, 2 de diciembre de 2010
Eliminar Bloqueo en la Base desde la Linea de Comandos del SO
Muchas veces nos encontramos ante bloqueos dentro de la base de datos. Y hay otras tantas de esas veces en las que no podemos matar al proceso desde dentro de la base de datos y debemos hacerlo desde el sistema operativo, matando la sesion que está produciendo dicho problema.
Detectando un Bloqueo:
Una de las tantas formas de detectar un bloqueo es haciendo una consulta a la v$lock.
Como veremos en el siguiente ejemplo se encontro una sesion bloqueando un recurso y otra que lo estaba pidiendo.
SQL> select * from v$lock where block!=0 or request!=0;
ADDR KADDR SID TY ID1 ID2 LMODE REQUEST
-------- -------- ---------- -- ---------- ---------- ---------- ---------- ----
5F2557E0 5F2557F4 544 UL 1073785182 0 6 0
5F255898 5F2558AC 531 UL 1073785182 0 0 6
Como se puede ver, de aquí podemos obtener el SID de la sesion que se encuentra bloqueando el recurso. En este caso es 544.
Con dicho SID haremos una consulta a la v$session para obtener el campo PADDR.
SQL> select paddr from v$session where SID='544';
PADDR
--------
5F5D3A4C
Por último ya podremos consultar la v$process para obtener el SPID de esa sesion que se encuentra produciendo el bloqueo.
SQL> select spid from v$process where ADDR='5F5D3A4C';
SPID
------------
11184
Eliminando el Bloqueo:
Lo último que debemos realizar será matar el proceso desde la linea de comando del sistema operativo:
[production@XXXXXXX ~]$ kill -9 11184
Y si nos logueamos nuevamente a la base y consultamos la v$lock nuevamente veremos que el SID que obtuvimos al principio ya no aparecerá listado.
Detectando un Bloqueo:
Una de las tantas formas de detectar un bloqueo es haciendo una consulta a la v$lock.
Como veremos en el siguiente ejemplo se encontro una sesion bloqueando un recurso y otra que lo estaba pidiendo.
SQL> select * from v$lock where block!=0 or request!=0;
ADDR KADDR SID TY ID1 ID2 LMODE REQUEST
-------- -------- ---------- -- ---------- ---------- ---------- ---------- ----
5F2557E0 5F2557F4 544 UL 1073785182 0 6 0
5F255898 5F2558AC 531 UL 1073785182 0 0 6
Como se puede ver, de aquí podemos obtener el SID de la sesion que se encuentra bloqueando el recurso. En este caso es 544.
Con dicho SID haremos una consulta a la v$session para obtener el campo PADDR.
SQL> select paddr from v$session where SID='544';
PADDR
--------
5F5D3A4C
Por último ya podremos consultar la v$process para obtener el SPID de esa sesion que se encuentra produciendo el bloqueo.
SQL> select spid from v$process where ADDR='5F5D3A4C';
SPID
------------
11184
Eliminando el Bloqueo:
Lo último que debemos realizar será matar el proceso desde la linea de comando del sistema operativo:
[production@XXXXXXX ~]$ kill -9 11184
Y si nos logueamos nuevamente a la base y consultamos la v$lock nuevamente veremos que el SID que obtuvimos al principio ya no aparecerá listado.
ORA-00904: Invalid Column Name (Nombre de Columna Invalido)
Error:
ORA-00904: Invalid Column Name (Nombre de Columna Invalido)
Causa:
Este error aparece cuando se trata de ejecutar una sentencia SQL donde se incluye un nombre de columna invalido o bien no se incluye ninguno.
Solucion:
Las soluciones para este error de Oracle son las siguientes:
Reescribir la consulta incluyendo un nombre valido de columna. Para ser valido el nombre de la columna debe cumplir los siguientes criterios:
ORA-00904: Invalid Column Name (Nombre de Columna Invalido)
Este error aparece cuando se trata de ejecutar una sentencia SQL donde se incluye un nombre de columna invalido o bien no se incluye ninguno.
Solucion:
Las soluciones para este error de Oracle son las siguientes:
Reescribir la consulta incluyendo un nombre valido de columna. Para ser valido el nombre de la columna debe cumplir los siguientes criterios:
- El nombre de la columna debe comenzar con una letra.
- El nombre de la columna debe contener un maximo de 30 caracteres.
- El nombre de la columna debe debe contener solo carecteres alfanumericos o los especiales de la siguiente lista: $, _, and #. Si se incluye algun otro caracter, este debe indicarse entre comillas.
- El nombre de la columna no puede ser una palabra reservada.
ORA-01031: Insufficient Privileges (Privilegios Insuficientes)
En la mayoria de los casos este error se produce al crear un objeto (create table, create index, create procedure, ...).
Se resuelve dando permisos con el comando grant.
grant create table to user_lacking_privilege;
Errores ORA-0600
Oracle muestra un ORA-00600 error inesperado cuando una condición se produce en su funcionamiento normal. Un ORA-00600 no necesariamente es un error en todos los casos, también podría ser causado por otras razones. Entre ellas podemos encontrar la falta de recursos de sistema operativo, fallos de hardware, falta de memoria, etc.
En contra de lo que muchos creen, nosotros los administradores de Oracle, debemos tomar muy en serio los 0600 y reportarlos de inmediato a Oracle.
Como identificar que estamos ante un ORA-00600?
Cuando un error ORA-00600 se genere, éste se loguea en el Alert Log de la base de datos. Dicho error estará acompañado por una serie de argumentos que serviran para buscar las posibles razones de este inconveniente. El error siempre crea una entrada en el alert de la base en BDUMP y crea también un trace en el directorio udump. Estos 2 archivos son muy críticos para ser cargado en la solicitud de soporte al contactar Metalink.
El primer argumento identifica la zona en la cual el error fue capturado y ofrece la mejor indicación para identificar el problema. El primer argumento puede ser un número o una cadena de caracteres. El resto de los argumentos son los valores que dependen de diversas variables internas incluyendo información etc.
Como solucionar un ORA-00600?
Metalink proporciona información detallada sobre la solución para cada uno de estos tipos genericos de errores. Cada vez que algun ORA-00600 nuevo se registra, Oracle lo incluye en su base de datos junto con la posible solucion.
Para comenzar a buscar una solucion la Nota 153788,1 nos será de gran ayuda. Para hacer uso de ella debemos loguearnos antes a Metalink. Esta herramienta nos pedirá el primer argumento del error y la versión en la cual estamos trabajando (opcional).
Si la solución no se encuentra como resultado de la busqueda en la nota que hemos nombrado anteriormente, lo indicado sería abrir un caso en Oracle, donde nos informarán sobre los pasos a seguir y nos guiarán en el proceso de obtención de una respuesta a nuestro inconveniente.
Suscribirse a:
Entradas (Atom)