Encontrar dependencias Oracle entre objetos

Oracle, pionero en BD relacionales.

Encontrar dependencias Oracle entre objetos

Notapor Pere » Vie Ene 23, 2015 1:18 pm

Intro

El objeto de metadatos donde encontramos las dependencias entre objectos de una BD Oracle es la vista ALL_DEPENDENCIES

Con ayuda de esta vista es posible encontrar dependecias entre objetos de forma cómoda, veamos un par de ejemplos:

Que objetos usan una misma tabla.

En ocasiones es útil conocer en que objetos de código PL/SQL se usa una tabla que queremos por ejemplo modificar.

Supongamos que interesa conocer esto sobre la tabla MI_TABLA del esquema MI_ESQUEMA

Para ello podemos pedir al SGBD Oracle la siguiente consulta:


Código: Seleccionar todo

select owner
, name, type
  from all_dependencies
 where referenced_owner 
= 'MI_ESQUEMA'
   and referenced_name = 'MI_TABLA'
 

Esto nos devolvera los objetos de BD que usan esta tabla.

----------------------------------------

Que tablas o vistas usa un objeto PL/SQL

Otro caso que puede resultar útil es conocer que tablas o vistas se usan en un package, procedimiento o función PL/SQL,

Supongamos que nos interesa el packge MI_PACKAGE del esquema MI_ESQUEMA

Para ello podemos pedir al SGBD Oracle la siguiente consulta:

Código: Seleccionar todo

select referenced_owner
, referenced_name, referenced_type
  from all_dependencies
 where owner 
= 'MI_ESQUEMA'
   and name = 'MI_PACKAGE'
   and referenced_type in( 'TABLE' , 'VIEW')
order by 1,2

Esto nos devolvera las tablas y vistas que se usan dentro el package.

----------------------------------------

En general

Jugando con los filtros podemos construir consultas sobre la vista de sistema ALL_DEPENDENCIES para obtener informacion relativa a las dependencias existentes en la BD, tales como:

    Que vistas usan una tabla concreta
    Que tablas usa una vista
    En que porcedimientos se usa tal objeto
    etc...


Espero os resulte útil...
Pere
 
Mensajes: 69
Registrado: Mar Feb 02, 2010 9:44 pm

Re: Encontrar dependencias Oracle entre objetos

Notapor rnunez » Mié Feb 11, 2015 10:46 am

Buenas,

He llegado a vosotros buceando un poco por otro tema, y ya me he puesto a echar un vistazo porque la solución al problema que tenía me ha parecido muy buena.

Respecto a las dependencias de los objetos, la vista ALL_DEPENDENCIES no nos da todas las relaciones entre objetos, y pongo ejemplo: si en un procedimiento usamos SqlDinamico, esto no nos funcionará:
En el procedimiento PROC_1 tenemos:

Código: Seleccionar todo
vSql := 'SELECT min(a.campo1) keep (dense_rank first order by campo_fecha)
             FROM tabla_1 a
            WHERE a.campo1= :v1';



Al consultar la vista ALL_DEPENDENCIES con referenced_name = 'TABLA_1', no nos aparecerá el procedimiento PROC_1.

Yo suelo usar all_source, donde se guarda el texto de todos los objetos, exceptuando vistas, vistas materializadas (y no sé si me olvido de alguno).

Saludos!
rnunez
 
Mensajes: 1
Registrado: Mié Feb 11, 2015 10:37 am


Volver a SGBD Oracle

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado