Sebas Enero 15th, 2008
El problema
Hace poco tiempo me encontre con el siguiente mensaje de error en SQLPLUS*:
ORA-06502: PL/SQL: numeric or value error: host bind array too small
Este error surgía de querer ejecutar un PL/SQL que hacia uso de dbms_output.put_line. Lamentablemente el mensaje de error no indicaba la linea del problema y tampoco había demasiada información en Internet sobre ello, y lo peor de todo es que en otra PC el mismo PL/SQL andaba de maravillas!
La solución
Al ejecutar el PL/SQL en la otra PC me di cuenta de que tenía instalado una versión más nueva del cliente de Oracle SQL*Plus: Release 10.2.0.1.0 y que nuestra base de datos es una Oracle 10G R2 version 10.2.0.2.0.
Sin embargo en mi PC tenía el cliente 10.1.0.1.0, asi que desinstalé el cliente e instalé la versión 10.2 del cliente y "mágicamente" el problema se solucionó!
Espero que les haya servido!!
Saludos!
Sebas Enero 11th, 2008
El problema
Muchas veces nos vemos en la necesidad de invocar un Web Service directamente desde la base de datos.
La utilización de Java dentro de la base de datos no siempre es una opción disponible, así que tuve que buscar una solución que sólo utilizara código PL/SQL.
La solución
Podemos utilizar el package UTL_HTTP para hacer los request SOAP directamente al servidor destino, esto si bien es más complicado que utilizar las clases proxy, nos evita tener cargar Java en la base de datos.
La forma de invocar el package UTL_HTTP es la siguiente:
Continue Reading »
Sebas Enero 11th, 2008
El problema
Luego de instalar el nuevo SQL Developer de Oracle, me di cuenta de que no me podía conectar a ninguna base de datos, el error rezaba:
ORA-00604: se ha producido un error a nivel 1 de SQL recursivo
ORA-12705: No se puede acceder a los archivos de datos NLS o se ha especificado un entorno no válido.
La solucion
Hay que editar el archivo "sqldeveloper.conf" y agregarle las siguientes lineas:
AddVMOption -Duser.region=us
AddVMOption -Duser.language=en
Listo! una vez hecho esto pude conectarme sin problemas.
Espero que les sirva, saludos!
Sebas Diciembre 14th, 2007
El problema
A veces nos encontramos con la necesidad de poder "loguear" el acceso a base de datos de una aplicación, por desgracia no todas las aplicaciones cuentan con esta funcionalidad, o si la poseen, no siempre cumplen todas nuestras espectativas.
La solución
Por suerte existe una forma de "loguear" el acceso a bases de datos Oracle y "espiar" lo que hace la aplicación. Esta solución consiste en utilizar un desarrollo de Sergey Sikorskiy:
http://www.geocities.com/ocispy/
Para poder utilizar esta excelente herramienta debemos:
- copiar el archivo "ocispy8i.dll" al directorio ORACLE_HOME/bin
- copiar el archivo "ocispy.cfg" a nuestro directorio raiz, por ejemplo "C:\ocispy.cfg"
- y por ultimo setear la variable de entorno ORA_OCI_UCBPKG a "ocispy8i" (set ORA_OCI_UCBPKG=ocispy8i).
Listo! con eso ya podemos empezar a loguear nuestra aplicacion.
Conclusión
Esta herramienta nos permite de una manera rapida y sencilla realizar un trace de cada aplicación que haga uso el cliente OCI de Oracle. Pueden revisar las opciones a incluir en el archivo "ocispy.cfg" y ajustarlo a sus necesidades.
Sebas Julio 23rd, 2007
Como todos sabemos el optimizador por defecto en las bases de datos Oracle10g es el CBO (Cost Based Optimizer), el cual es un optimizador de avanzada que utiliza estadísticas de las tablas e indices para poder obtener buenos planes de ejecución. Pero a veces caemos en la cuenta de que esto no es siempre así.
Uno de los principales problemas que podemos encontrarnos es que las estadísticas sean incorrectas, lo cual le estaría dando información erronea al optimizador.
Ejemplo
Continue Reading »
Sebas Julio 4th, 2007
¿Tenemos problemas?
El otro dia intentando iniciar mi base de datos de prueba, una base hecha en Oracle XE 10g, se me aparecio el siguiente problema:
sqlplus SYS/SYS@XE AS SYSDBA
ERROR:
ORA-12514: TNS:listener does not currently know of service requested in
connect descriptor
La búsqueda del error
Continue Reading »
Sebas Julio 2nd, 2007
Acá les dejo este link http://oaug.org/usercommunities/siebel/siebelwebseries.html que contiene muy buenos webcasts sobre Siebel y distintas tecnologías de Oracle.
Saludos!
Sebas Junio 29th, 2007
Si alguna vez se han preguntado como hacer para copiar información (y rapidamente!) desde una base de datos a otra acá les dejo el comando de SQL*Plus para poder hacerlo:
COPY FROM "db_origen" TO "db_destino" "accion" "tabla_destino"
["(column_name, column_name...)"] USING "query";
Siendo:
-
"db_origen" y "db_destino" - las conexiones a las base de datos, por ejemplo: SCOTT/TIGER@BASE1
-
"accion" - puede ser una de las siguientes:
-
create - Crea la tabla. Si esta ya existía vamos a tener un error al ejecutar el comando.
-
replace - Reemplaza la tabla si existía y la vuelve a crear. Si no existía, la crea e inserta los datos.
-
insert - Inserta los datos provenientes de la query. En este caso solo las filas devueltas por la query son insertadas, no hay ninguna operación de DDL. Si la tabla no existía vamos a tener un error al ejecutar el comando.
-
append - Inserta los datos si la tabla ya existía. Si la tabla no existía entonces la crea y luego procede a insertar las filas.}
-
"tabla_destino": La tabla destino
-
["(column_name, column_name...)"] - Opcional. Permite establecer en que columnas queremos insertar los datos. Esto debe usarse cuando el query solo va a devolver algunas de las columnas de la tabla destino y no todas.
-
"query" - Query a ejecutarse en la base origen.
Ejemplos de uso:
Continue Reading »
Sebas Marzo 14th, 2007
Algunas veces es necesario utilizar caracteres especiales en alguna query que utilicemos en SQL*Plus.
Un problema común es el de la comillas simples ('):
SQL> INSERT INTO tmp_table (texto) VALUES ('Johnson's house');
ERROR: ORA-01756: quoted string not properly terminated
Si queremos insertar una comilla simple solo debemos ponerla doble:
SQL> INSERT INTO tmp_table (texto) VALUES ('Johnson''s house');
1 ROW created.
Continue Reading »