Hace un par de días tuve que verificar si mi nuevo usuario tenía permisos de DBA sobre algunas de las bases de datos. Ahora ¿Cómo podría hacer esta verificación?
La respuesta es fácil, necesito consultar las tablas con prefijo 'DBA_'. Si tengo granteado el acceso a las mismas entonces tengo acceso al catalogo del sistema y por ende los derechos de un DBA. Estas no son las únicas tablas que componen el catalogo, pero para el ejemplo y para descubrir si somos o no DBAs son más que suficientes.
El Catálogo de Oracle
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:
Prefijo/Descripción
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 [TABLEINDEX] nombre [COMPUTEESTIMATEDELETE] 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.
No hay comentarios:
Publicar un comentario