Oracle cuenta con una serie de tabla y vistas que conforman una estructura denominada catálogo. La principal función del catálogo de Oracle es almacenar toda la información de la estructura lógica y física de la base de datos, desde los objetos existentes, la situación de los datafiles, la configuración de los usuarios, etc.
El catálogo sigue un estándar de nomenclatura para que su memorización sea más fácil:
Prefijos:
|| Prefijo || Descripción ||
|| DBA_ || Objetos con información de administrador. Sólo accesibles por ||
|| || usuarios con permisos DBA ||
|| USER_ || Objetos con información propia del usuario al que estamos ||
|| || conectado. Accesible desde todos los usuarios. Proporcionan ||
|| || menos información que los objetos DBA_ ||
|| ALL_ || Objetos con información de todos los objetos en base de datos. ||
|| V_$ ó V$ || Vistas dinámicas sobre datos de rendimiento ||
Existe una tabla de catálogo para cada tipo de objeto posible. Su nombre aparecerá en plural TABLES, VIEWS, SEQUENCES, TABLESPACES
Sabiendo qué objetos existen, y qué prefijos podemos utilizar, ya podemos acceder a los objetos del catálogo de Oracle. Ejemplos:
|| Objeto || Descripción ||
|| DBA_TABLES || Información para administradores de las tablas en base de ||
|| || datos. ||
|| USER_VIEWS || Información de las vistas creadas por el usuario desde el que ||
|| || accedemos. ||
|| ALL_SEQUENCES || Información de todas las secuencias existentes en base de datos. ||
|| DBA_TABLESPACES || Información de administración sobre los tablespaces. ||
|| USER_TAB_COLUMNS || Todas las columnas de tabla en el usuario activo. ||
Los objetos de catálogo también guardan relaciones entre ellos. Por ejemplo, el objeto ALL_TABLES guarda una relación 1-N con el objeto ALL_TAB_COLUMNS: Una tabla tiene N columnas.
Existe un pseudo-usuario llamado PUBLIC el cual tiene acceso a todas las tablas del catálogo público. Si se quiere que todos los usuarios tengan algún tipo de acceso a un objeto, debe darse ese privilegio a PUBLIC y todo el mundo dispondrá de los permisos correspondientes.
El catálogo público son aquellas tablas (USER_ y ALL_) que son accesibles por todos los usuarios. Normalmente dan información sobre los objetos creados en la base de datos.
El catálogo de sistema (DBA_ y V_$) es accesible sólo desde usuarios DBA y contiene tanto información de objetos en base de datos, como información específica de la base de datos en sí (versión, parámetros, procesos ejecutándose…)
Ciertos datos del catálogo de Oracle están continuamente actualizados, como por ejemplo las columnas de una tabla o las vistas dinámicas (V$). De hecho, en las vistas dinámicas, sus datos no se almacenan en disco, sino que son tablas sobre datos contenidos en la memoria del servidor, por lo que almacenan datos actualizados en tiempo real. Algunas de las principales son:
|| ƒ || V$DB_OBJECT_CACHE: contiene información sobre los objetos que están en el caché ||
|| || del SGA ||
|| ƒ || V$FILESTAT: contiene el total de lecturas y escrituras físicas sobre un data file de la ||
|| || base de datos. ||
|| ƒ || V$ROLLSTAT: contienen información acerca de los segmentos de rollback. ||
Sin embargo hay otros datos que no pueden actualizarse en tiempo real porque penalizarían mucho el rendimiento general de la base de datos, como por ejemplo el número de registros de una tabla, el tamaño de los objetos, etc. Para actualizar el catálogo de este tipo de datos es necesario ejecutar una sentencia especial que se encarga de volcar la información recopilada al catálogo:
ANALYZE [TABLE|INDEX] nombre [COMPUTE|ESTIMATE|DELETE] STATISTICS;
La cláusula COMPUTE hace un cálculo exacto de la estadísticas (tarda más en realizarse en ANALYZE), la cláusula ESTIMATE hace una estimación partiendo del anterior valor calculado y de un posible factor de variación y la cláusula DELETE borra las anteriores estadísticas.
La sentencia COMMENT
El catálogo público contiene ciertas tablas encargadas de almacenar información adicional sobre tablas, vistas y columnas. La información que se suele almacenar es información de análisis, valores posibles para las columnas y en general todo aquello que se haya concluido durante la etapa de análisis.
Las tablas existentes son:
|| Tabla || Descripción ||
|| ALL_TAB_COMMENTS || Contiene los comentarios para tablas y vistas. ||
|| ALL_COL_COMMENTS || Contiene los comentarios para las columnas de tablas y vistas. ||
La información se debe almacenar en base de datos según la siguiente sintaxis:
COMMENT ON TABLE [tabla|vista] IS ‘texto’; COMMENT ON COLUMN [tabla|vista].columna IS ‘texto’;
Una vez que esta información está en base de datos, se puede escribir procedimientos o scripts SQL que muestren la información para sacar informes de documentación de base de datos.