viernes, 1 de julio de 2011

Diccionario de datos en SQL Pl/SQL

El diccionario de datos de Oracle contiene la meta-información de la base de datos.
Oracle posee un diccionario de datos; es decir la manera de extraer el catálogo de objetos de una base de datos, nos refererimos a: tablas, usuarios, roles, vistas, columnas de las tablas, secuencias, constraints, sinónimos, índices, triggers, funciones etc.., esta información se encuentra contenida en tablas y vistas del sistema.


Las tablas del estilo OBJ$, UET$ o SOURCE$ son creadas por el script sql.bsq durante la ejecución de la instrucción CREATE DATABASE.
El script catalog.sql, que generalmente se encuentra en el directorio $ORACLE_HOME/rdbms/admin, se ejecuta después del CREATE DATABASE. Este script crea las vistas del diccionario de datos.

En general, hay tres tipos de vistas:

- Prefijadas con USER. Contienen la información sobre los objetos propiedad del schema o los privilegios otorgados a, o desde, el propio esquema.

- Prefijadas con ALL. Contienen los objetos sobre los cuales tenemos privilegios, sean del propio esquema o no.

- Prefijadas con DBA. Incluye todos los objetos de la base de datos.


Familias de vistas
• COL_PRIVS. Privilegios sobre la columna, como el permiso, quien lo ha otorgado y a quien.

• EXTENTS. Fichero de datos, nombre del segmento, tamaño de la extensión.

• INDEXES. Información del índice. Tipo, unicidad y tabla a la cual se referencia.

• IND_COLUMNS. Información de la columna del índice, como su orden dentro del índice.

• OBJECTS. Información del objeto, como el estado (status) o el momento de última DDL.

• ROLE_PRIVS. Privilegios de un rol, como si es otorgable o existe la opción de administración.

• SEGMENTS. Información de los segmentos. Tablespace,almacenamiento.

• SEQUENCES. Información de la sequence, como caché, cycle y último número.

• SOURCE. Código fuente almacenado (excepto triggers).

• SYNONYMS. Información del sinónimo, como el objeto referenciado y el db_link

• SYS_PRIVS. Privilegios del sistema, como quien ha dado el permiso, privilegio y opciones de administración.

• TAB_COLUMNS. Información sobre las columnas de las tablas y de las vistas, incluido el tipo de datos.

• TAB_PRIVS. Privilegios sobre tablas.

• TABLES. Información de las tablas, como el tablespace, parámetros de almacenamiento y número de filas.
• TRIGGERS. Información sobre los triggers, como el tipo, evento y cuerpo del trigger.

• USERS. Información del usuario, como su tablespace por defecto.

• VIEWS. Información de las vistas, incluyendo la definición de la vista.

Vistas importantes que no pertenecen a ninguna familia.
• USER_COL_PRIVS_MADE. Privilegios de columna que hemos otorgado a otros usuarios.

• USER_COL_PRIVS_RECD. Privilegios de columna que hemos recibido de otros usuarios.

• USER_TAB_PRIVS_MADE. Privilegios de tabla que hemos otorgado a otros usuarios.

• USER_TAB_PRIVS_RECD. Privilegios de tabla que hemos recibido de otros usuarios.

Consultas sobre el diccionario de datos.

Una de las técnicas más potentes que pueden utilizar los DBA’s es usar el diccionario de datos para generar SQL. Por ejemplo, si queremos cambiar el tablespace temporal para todos los usuarios (excepto SYS) a TEMP, tenemos varias opciones:
1. Hacerlo a mano, uno a uno.
2. Escribir la sentencia con una variable para indicar el usuario, e ir modificando el usuario cada vez.
3. Crear un SQL para generar los ALTER USER necesarios.

Select ‘ALTER USER ’||username||’ TEMPORARY TABLESPACE temp;‘
From DBA_USERS
Where username <> ‘SYS’
and temporary_tablespace <> ‘TEMP’;
ALTER USER SYSTEM TEMPORARY TABLESPACE temp;
ALTER USER OUTLN TEMPORARY TABLESPACE temp;

ALTER USER DEMO TEMPORARY TABLESPACE temp;

Otro ejemplo sería el de crear un script que compilara todos los objetos inválidos del sistema.




No hay comentarios:

Publicar un comentario en la entrada