¿Cómo encontrar un texto o palabra dentro de todas las funciones, procedimientos, disparadores y otros objetos en Oracle?

A veces nos vemos en la necesidad de saber dónde hacemos uso de un nombre de una tabla, función, variable, campo o un simple texto dentro del código fuente de los diferentes objectos de la base de datos Oracle.

Para localizar dónde se usa cierto nombre, palabra o texto podemos ejecutar la siguiente sentencia con el usuario SYS preferentemente:

En el ejemplo anterior estamos buscando el texto o palabra “VENTAS” dentro de todos los códigos fuente que definen los objectos de Oracle, como son procedimientos, funciones, disparadores.

Si encuentra la palabra buscada la consulta nos  como resultado el propietario, nombre de objeto, tipo del objeto, la linea donde encontró el texto y el texto completo de la linea.

Espero y les sea útil. ¡Hasta pronto!

Obtener año, mes o día de un campo fecha en Oracle con EXTRACT.

A veces es necesario obtener sólo una parte de una fecha de un campo tipo datetime en sentencias SQL en Oracle. En un post pasado se explicó como obtener sólo el año, mes o día con la función to_char(). Ahora vamos a ver cómo obtener los mismos datos pero con la función extract().

En el ejemplo siguiente vamos a ver como obtener el día, mes o año de la fecha actual de la base de datos oracle:

A diferencia de la función to_char() que regresa un tipo caracter o alfanumérico, la función extract() regresa el resultado de tipo numérico.

La función extract() también puede extraer la hora, minuto y segundo de un dato tipo datetime:

¡Espero y les sea útil!

 

ORA-32033: unsupported column aliasing

Oracle arroja este error cuando se utiliza WITH en alguna consulta y se ha olvidado poner la palabra reservada AS. Por ejemplo en este caso:

Lo correcto sería:

No olvides visitar a los patrocinadores (da click en los anuncios) para seguir soportando este sitio.

¡Gracias!

Listar las tablas de un usuario en Oracle

A veces necesitamos saber las tablas pertenecientes a un usuario y/o esquema en Oracle. Si queremos saber las tablas que le pertenecen al usuario con el que cual nos encontramos conectados actualmente a la base de datos, usamos la siguiente instrucción sql:

La instrucción anterior además ordena la salida por el campo table_name.

Si lo que queremos saber son las tablas de otro usuario o esquema entonces usaríamos la siguiente sentencia sql:

Igual que la anterior, el resultado lo ordenamos por table_name.

Espero que les sea útil este post.

¡Saludos!

ORA-39070: Unable to open the log file.

Al intentar importar un respaldo de una base de datos en Oracle 11g versión 11.2 sobre windows server  con el comando impdp me mandaba los siguientes errores:

ORA-39002: invalid operation
ORA-39070: Unable to open the log file.
ORA-29283: invalid file operation
ORA-06512: at “SYS.UTL_FILE”, line 488
ORA-29283: invalid file operation

Cabe aclarar que el archivo dmp a importar estaba en una unidad de red montada como drive Z: y dicha unidad estaba dado de alta como un Directory de Oracle.

El problema se debe a que al ejecutar el comando impdp lo ejecuta con el usuario que inició el servicio de oracle (usuario del sistema) y no con el usuariode windows que ejecuta el comando,  por lo tanto dicho usuario del sistema no tiene permisos de escritura ni lectura sobre la unidad de red.

La solución es parar el servicio de oracle e iniciarlo con el usuario con el que se autentifica en windows y que tiene permisos tanto de escritura sobre la unidad como de ejecutar el comando impdp:

Inicio -> Ejecutar -> Services.msc -> OracleServiceXXXX -> Propiedades -> Log On

Una vez que termine de importar el respaldo, puede regresar el servicio de oracle a que sea ejecutado por el usuario del sistema.

Espero les sirva este tip.

 

 

Dividir (split) el valor de una columna con valores separados por comas en Oracle

Me encontré con este problema, una tabla en oracle contenía un campo con una serie de valores separado por coma como en el siguiente ejemplo:

Id          Campo1

1           a,b,c,d

Necesitaba hacer una consulta que me mostrara los valores de la siguiente forma:

Id          Campo1

1          a
1          b
1          c
1          d

“Googleando” encontré este interesante artículo donde explica como usar los niveles (level) y la orden CONNECT BY LEVEL para lograr el propósito buscado. Espero les sea útil como a mi.

¡Saludos!

 

sqldeveloper: MSVCR71.dll is missing.

Me bajé la más reciente versión de sqldeveloper, el sqldeveloper-3.2.09.30.zip, que viene junto con el jdk. En una máquina con el sistema operativo windows 7. Al descomprimirlo y ejecutarlo, éste no arrancaba y me mandaba el error de que no encontraba MSVCR71.dll. Buscando por ahí, encontré varias soluciones. La más sencilla fue copiar el MSVCR71.dll que se encuentra en la ruta <directorio-de-instalacion>/sqldeveloper/jdk/jre/bin al directorio <directorio-de-instalacion>/sqldeveloper/sqldeveloper/bin y listo. Al arrancar nuevamente la aplicación, ésta arrancó sin problemas.

Llamar comandos del sistema operativo desde PL/SQL

Necesitaba ejecutar el sqlldr de oracle desde un procedimiento PL/SQL. Depués de “googlear” un rato, encontré este documento pdf en el sitio de Oracle, en inglés, de como llevar a cabo dicho requisito. Espero les sea de utilidad.

Especificando numero de intentos de login a Oracle

Para evitar que un usuario de Oracle sea bloqueado despues de varios intentos fallidos de login se puede proceder a hacer lo siguiente:

Entrar a sqlplus como SYSDBA.

Ejecutar las sigueintes instrucciones

select profile from dba_users where username = ‘usuario’;

Para averiguar el profile a la que pertenece el usuario.

select resource_name, limit from dba_profiles where profile = ‘DEFAULT’;

Listar los limites y recursos del profile (en este caso, el profile DEFAULT)

alter profile default limit failed_login_attempts unlimited;

Para cambiar a no limitado, el recurso failed_login_attempts. Con lo cual la cuenta no se bloqueará sin importar el numero de intentos fallidos de login.

Nota: es recomendable limitar los intentos a un numero especificado por razones de seguridad.

Saludos!

Arrancar y parar Oracle automáticamente en Linux

Problema:
¿Cómo arrancar automáticamente la base de datos Oracle en Linux?

Respuesta:
En esta página se muestra la solución. Personalmente seleccioné el script que usa el comando “su” sobre el comando “rsh” por seguridad.

Espero y les ayude.