Anuncios en tutorial de programación PLSQL

jueves, 20 de agosto de 2020

El diccionario de datos PL/SQL en las bases de datos Oracle

Si habéis llegado hasta este artículo es muy probable que tengáis que escribir en algunas ocasiones código PLSQL. Esto quiere decir que también, al menos ocasionalmente, necesitaréis analizar dicho código contestando cuestiones como:

  • ¿De qué objetos de la base de datos depende mi programa?
  • ¿Cuáles de mis paquetes PL/SQL contienen llamadas a subprogramas en otros paquetes o referencias a variables globales?
  • ¿Contiene alguno de mis subrutinas PLSQL parámetros con tipos de datos que no se deberían seguir utilizando?
  • ¿Están todo mi código compilado con el suficiente nivel de optimización?

Diccionario de datos PLSQL de las bases de datos Oracle

Obviamente, siempre podréis utilizar las funcionalidades de búsqueda de vuestro editor PL/SQL o de vuestro sistema integrado de desarrollo para navegar a través de los múltiples objetos y ficheros de la base de datos Oracle tratando de encontrar específicos pedazos de texto. Pero esto no sería suficiente para poder contestar todas las preguntas anteriores y algunas más que os pudieran surgir. Con este artículo y algunos más que escribiré más adelante podréis conocer las respuestas a dichas preguntas, y para ello hay que conocer en que consiste el diccionario de datos PLSQL de las bases de datos Oracle.

Uno de los aspectos mejores de escribir código PLSQL y compilar dicho código dentro de la base de datos es que la base de datos Oracle ofrece un conjunto de vistas (views) -conocidas dentro del ámbito Oracle como diccionario de datos- que posibilitan obtener las respuestas a cualquier pregunta que nos pueda surgir sobre nuestro código a través del uso de consultas SQL o PL/SQL.

Aspectos fundamentales del diccionario de datos Oracle

El diccionario de datos PLSQL está constituido por numerosas tablas y vistas creadas por la instancia de la base de datos Oracle. Los esquemas de usuario generalmente no tienen privilegios de acceso a dichas tablas. La base de datos Oracle solo da acceso SELECT sobre las vistas. La mayoría de las vistas del diccionario de datos tienen tres versiones:

  • Vistas USER: dan información sobre los objetos de la base de datos de los que el esquema al que nos encontramos conectados es propietario.
  • Vistas ALL: dan información sobre los objetos de la base de datos a los que nuestro esquema tiene acceso.
  • Vistas DBA: dan información sobre todos los objetos de la base de datos. Esquemas que no son de tipo DBA usualmente no tienen permiso a consultar las vistas DBA.

Como siempre explicare algo más con un ejemplo. Supongamos que queremos obtener una lista de objetos definidos en la base de datos Oracle, ya sean tablas, vistas, procedimientos y funciones, etcétera.

La siguiente consulta devuelve todos los objetos definidos en el esquema al que nos encontramos conectados:

SELECT * FROM user_objects

Esta otra consulta devolvería todos los objetos que están definidos en nuestro esquema y también aquellos sobre los que nuestro esquema tiene permisos de uso:

SELECT * FROM all_objects

Finalmente esta otra consulta, siempre y cuando tengamos acceso a la vista utilizada (DBA_OBJECTS), devuelve un listado con todos los objetos definidos en la base de datos Oracle:

SELECT * FROM dba_objects

Generalmente la única diferencia ente la vista USER y la vista ALL es que esta última contiene un campo extra, la columna OWNER, que muestra que esquema es el propietario del objeto.

Principales tablas del diccionario de datos Oracle

En la siguiente tabla encontraréis una descripción a alto nivel de las vistas del diccionario de datos Oracle que se utilizan más a menudo a la hora de gestionar el código PLSQL:

  • USER_ARGUMENTS: muestra los argumentos o parámetros en todos los procedimientos y funciones de nuestro esquema.
  • USER_DEPENDENCIES: muestra las dependencias a y desde los objetos de nuestra propiedad. Principalmente esta vista la utiliza la base de datos Oracle para invalidar el estado de los objetos de la base de datos cuando un objeto de la que nuestro objeto depende cambia.
  • USER_ERRORS: muestra el conjunto actual de errores de compilación para todos nuestros objetos de la base de datos, incluyendo triggers. Esta vista es la que el sistema utiliza cuando se ejecuta el comando SQL*Plus SHOW ERRORS. No obstante cada cual puede escribir sus propias consultas contra dicha vista.
  • USER_IDENTIFIERS: esta vista fue introducida con la versión de la base de datos Oracle 11g y es actualizada por el compilador PL/Scope. Una vez que se actualiza, la vista proporciona información sobre todos los identificadores (programas, nombres, variables, etcétera) en nuestro código.
  • USER_OBJECT_SIZE: muestra el tamaño de nuestros objetos. Realmente esta vista muestra los tamaños del código fuente, el código parseado y el código compilado. Aunque es utilizada fundamentalmente por el compilador y el motor de ejecución en tiempo real, también puede utilizarse para identificar los programas más grandes de nuestro esquema.
  • USER_OBJECTS: identifica los objetos de nuestro esquema. Esta vista se puede utilizar, por ejemplo, para ver si un objeto está marcado como inválido, o para encontrar todos los paquetes que tienen la cadena “ACCOUNT” en su nombre, etcétera.
  • USER_PLSQL_OBJECT_SETTINGS: muestra información sobre el nivel de optimización y la configuración del sistema de depuración de código (debug settings) de los objetos PLSQL que pueden modificarse utilizando los comandos DDL ALTER y SET.
  • USER_PROCEDURES: muestra diferente información sobre los procedimientos almacenados, tal como si el programa fue definido como DETERMINISTIC, su AUTHID, etcétera.
  • USER_SOURCE: almacena el texto del código fuente de todos los objetos de nuestro esquema (en la versión de la base de datos 91 y superiores, incluye también información sobre triggers y código Java). Sin duda es una vista muy útil ya que permite realizar todo tipo de análisis sobre nuestro código fuente.
  • USER_STORED_SETTINGS: muestra los flags del compilador PL/SQL. Esta vista se utiliza para descubrir aquellos programas que se han compilado utilizando una compilación nativa.
  • USER_TRIGGERS: muestra información sobre los triggers de nuestro esquema, incluyendo el código fuente y una descripción de los eventos que disparan el trigger. Es posible escribir código PLSQL que utilice la vista USER_TRIGGERS para habilitar o deshabilitar los triggers que puedan existir contra una tabla específica.
  • USER_TRIGGER_COLS: muestra información sobre las columnas involucradas en el disparo de los diferentes triggers de nuestro esquema.

Artículos relacionados: Identificación de tablas y columnas en las bases de datos Oracle.

0 comentarios: