Diccionario de Datos y Vistas de Rendimiento Dinámico

El juego central de tablas y vistas de referencia de solo lectura de cada base de datos Oracle se conoce colectivamente como el diccionario de datos. Las vistas de rendimiento dinámico son vistas especiales que se actualizan continuamente mientras una base de datos está abierta y en uso.

Visión General del Diccionario de Datos

Una parte importante de una base de datos Oracle es su diccionario de datos, que es un juego de tablas de solo lectura que proporciona metadatos administrativos sobre la base de datos.

Finalidad del diccionario de datos

El diccionario de datos contiene metadatos que describen el contenido de la base de datos.

Por ejemplo, el diccionario de datos contiene información como la siguiente:

Gestión de datos

El diccionario de datos es una parte central de la gestión de datos para cada base de datos Oracle.

Por ejemplo, la base de datos realiza las siguientes acciones:

Debido a que Oracle AI Database almacena datos del diccionario de datos en tablas, al igual que otros datos, los usuarios pueden consultar los datos con SQL. Por ejemplo, los usuarios pueden ejecutar sentencias SELECT para determinar sus privilegios, qué tablas existen en su esquema, qué columnas están en estas tablas, si los índices se crean en estas columnas, etc.

Consulte además:

Separación del Diccionario de Datos en una CDB

En una CDB, los metadatos del diccionario de datos se dividen entre la raíz de la CDB y las PDB. Desde el punto de vista del usuario y la aplicación, el diccionario de datos de cada contenedor de una CDB es independiente.

En una CDB recién creada que aún no contiene datos de usuario, el diccionario de datos de la raíz de CDB solo contiene metadatos del sistema. Por ejemplo, la tabla TAB$ contiene filas que describen solo las tablas proporcionadas por Oracle, por ejemplo, TRIGGER$ y SERVICE$. En el siguiente gráfico se muestran tres tablas del diccionario de datos subyacentes, con las barras rojas que indican las filas que describen el sistema.

Figura 1: Metadatos del Diccionario de Datos en la Raíz de CDB

Descripción de la ilustración cncpt_vm_363.png

Supongamos que crea una PDB y, a continuación, crea un esquema hr que contiene las tablas employees y departments en esta PDB. El diccionario de datos de la PDB contiene algunas filas que describen las entidades proporcionadas por Oracle y otras filas que describen las entidades creadas por el usuario. Por ejemplo, la tabla TAB$ del diccionario de PDB tiene una fila de metadatos para la tabla employees y una fila para la tabla departments.

Figura 2: Arquitectura del Diccionario de Datos en una CDB

Descripción de la ilustración cncpt_vm_361.png

En el gráfico anterior se muestra que el diccionario de datos de la PDB contiene puntos en el diccionario de datos de la raíz de CDB. Internamente, los objetos proporcionados por Oracle, como las definiciones de tablas del diccionario de datos y los paquetes PL/SQL, se representan solo una vez en la raíz de CDB. Esta arquitectura logra dos objetivos principales dentro de la CDB:

Componentes del Diccionario de Datos

El diccionario de datos consta de tablas y vistas base.

Estos objetos se definen de la siguiente manera:

Normalmente, las vistas del diccionario de datos se agrupan en juegos. En muchos casos, un juego consta de tres vistas que contienen información similar y se distinguen entre sí por sus prefijos, como se muestra en la siguiente tabla. Al consultar las vistas adecuadas, solo puede acceder a la información relevante para usted.

Tabla 1 Juegos de Vistas del Diccionario de Datos

Prefijo Acceso de Usuario Contenido Notas
DBA_ Administradores de Bases de Datos Todos los Objetos Algunas vistas DBA_ tienen columnas adicionales que contienen información útil para el administrador.
ALL_ Todos los usuarios Objetos para los que el usuario tiene privilegios Incluye objetos que son propiedad del usuario. Estas opiniones obedecen al conjunto actual de roles activados.
USER_ Todos los usuarios Objetos propiedad del usuario Las vistas con el prefijo USER_ suelen excluir la columna OWNER. Esta columna está implicada en las vistas USER_ para que sea el usuario que emite la consulta.

No todos los juegos de vistas tienen tres miembros. Por ejemplo, el diccionario de datos contiene una vista DBA_LOCK pero no una vista ALL_LOCK.

La vista DICTIONARY proporcionada por el sistema contiene los nombres y las descripciones abreviadas de todas las vistas del diccionario de datos. La siguiente consulta de esta vista incluye una salida de ejemplo parcial:

SQL> SELECT * FROM DICTIONARY
  2  ORDER BY TABLE_NAME;

TABLE_NAME                     COMMENTS
------------------------------ ----------------------------------------
ALL_ALL_TABLES                 Description of all object and relational
                               tables accessible to the user

ALL_APPLY                      Details about each apply process that
                               dequeues from the queue visible to the
                               current user
.
.
.

Consulte además:

Objetos de datos de contenedor en una CDB

Un objeto de datos de contenedor es una tabla o vista que contiene datos que pertenecen a varios contenedores o a toda la CDB.

Los privilegios de datos de contenedor soportan un requisito general en el que varias PDB residen en una única CDB, pero con diferentes requisitos de administración local. Por ejemplo, si los DBA de la aplicación no desean administrar localmente, pueden otorgar privilegios de datos de contenedor en las vistas adecuadas a los usuarios comunes. En este caso, el administrador de la CDB puede acceder a los datos de estas PDB. Por el contrario, los administradores de PDB que no desean que el administrador de CDB acceda a sus datos no otorgan privilegios de datos de contenedor.

Algunos ejemplos de objetos de datos de contenedor son las vistas proporcionadas por Oracle cuyos nombres empiezan por V$ y CDB_. Todos los objetos de datos de contenedor tienen una columna CON_ID. En la siguiente tabla se muestra el significado de los valores de esta columna.

Tabla 2 Valores de ID de contenedor

ID de contenedor Las filas pertenecen a
0 CDB completa
1 CDB$ROOT
2 PDB$SEED
Todos los demás ID PDB creadas por el usuario, raíces de aplicaciones o semillas de aplicaciones

En una CDB, para cada vista DBA_, existe una vista CDB_ correspondiente. El propietario de una vista CDB_ es el propietario de la vista DBA_ correspondiente. En el siguiente gráfico se muestra la relación entre las diferentes categorías de vistas de diccionario:

Figura 3: Vistas de Diccionario en una CDB

Descripción de la ilustración cncpt_vm_366.png

Cuando el contenedor actual es una PDB, un usuario puede ver la información del diccionario de datos solo para la PDB actual. Sin embargo, cuando el contenedor actual es la raíz de CDB, un usuario común puede consultar las vistas CDB_ para ver los metadatos de la raíz de CDB y de las PDB para las que este usuario tiene privilegios. Nota: Cuando se consulta desde la raíz de CDB, las vistas CDB_ y V$ convierten implícitamente los datos en el juego de caracteres AL32UTF8. Si un juego de caracteres necesita más bytes para representar un carácter al convertirlo a AL32UTF8 y si el ancho de la columna de vista no puede acomodar datos de una PDB específica, es posible el truncamiento de datos.

En la siguiente tabla se describen las consultas de las vistas CDB_. Cada fila describe una acción que se produce después de la acción en la fila anterior.

Tabla 3 Consulta de vistas CDB_

Operación Descripción
SQL> CONNECT SYSTEM
 Enter password: ********
 Connected.

El usuario SYSTEM, que es común a todos los contenedores de la CDB, se conecta a la raíz de la CDB (consulte "Cuentas de Usuario Comunes").

SQL> SELECT COUNT(*) FROM CDB_USERS
  WHERE CON_ID=1;

  COUNT(*)
 --------
 38
SYSTEM consulta CDB_USERS para obtener el número de usuarios comunes en la raíz de CDB. La salida indica que existen 38 usuarios comunes en la raíz de CDB.
SQL> SELECT COUNT(DISTINCT(CON_ID))
  FROM CDB_USERS;

  COUNT(DISTINCT(CON_ID))
 -----------------------
 4
SYSTEM consulta CDB_USERS para determinar el número de contenedores distintos en la CDB.
SQL> CONNECT SYSTEM@hrdb
 Enter password: ********
 Connected.
El usuario SYSTEM ahora se conecta a la PDB denominada hrpdb.
SQL> SELECT COUNT(*) FROM CDB_USERS;

  COUNT(*)
 ----------
 48
SYSTEM consulta CDB_USERS. La salida indica que existen 48 usuarios comunes y locales en el contenedor actual, que es hrpdb.
SQL> SELECT COUNT(*) FROM DBA_USERS;

  COUNT(*)
 ----------
 48
SYSTEM consulta DBA_USERS. La salida es la misma que la consulta anterior. Debido a que SYSTEM no está conectado a la raíz de CDB, la vista DBA_USERS muestra la misma salida que CDB_USERS. Dado que DBA_USERS solo muestra los usuarios en el contenedor actual, muestra 48.

Vistas con el prefijo DBA_

Las vistas con el prefijo DBA_ muestran toda la información relevante de toda la base de datos. Las vistas DBA_ únicamente están destinadas a los administradores.

La siguiente consulta de ejemplo muestra información sobre todos los objetos de la base de datos:

SELECT OWNER, OBJECT_NAME, OBJECT_TYPE
FROM   DBA_OBJECTS
ORDER BY OWNER, OBJECT_NAME;

Consulte también: Guía del administrador de Oracle AI Database para obtener información detallada sobre los privilegios administrativos

Vistas con el prefijo ALL_

Las vistas con el prefijo ALL_ hacen referencia a la perspectiva general del usuario de la base de datos.

Estas vistas devuelven información sobre los objetos de esquema a los que el usuario tiene acceso mediante concesiones públicas o explícitas de privilegios y roles, además de los objetos de esquema que posee el usuario.

Por ejemplo, la siguiente consulta devuelve información sobre todos los objetos a los que tiene acceso:

SELECT OWNER, OBJECT_NAME, OBJECT_TYPE
FROM   ALL_OBJECTS
ORDER BY OWNER, OBJECT_NAME;

Debido a que las vistas ALL_ obedecen al juego actual de roles activados, los resultados de la consulta dependen de los roles activados, como se muestra en el siguiente ejemplo:

SQL> SET ROLE ALL;

Role set.

SQL> SELECT COUNT(*) FROM ALL_OBJECTS;

COUNT(*)
----------
68295

SQL> SET ROLE NONE;

Role set.

SQL> SELECT COUNT(*) FROM ALL_OBJECTS;

COUNT(*)
----------
53771

Los desarrolladores de aplicaciones deben ser conscientes del efecto de los roles al utilizar vistas ALL_ en un procedimiento almacenado, donde los roles no están activados por defecto.

Vistas con el prefijo USER_

Las vistas que más pueden interesar a los usuarios de base de datos típicos son las que tienen el prefijo USER_.

Estas vistas:

Por ejemplo, la siguiente consulta devuelve todos los objetos incluidos en el esquema:

SELECT OBJECT_NAME, OBJECT_TYPE
FROM   USER_OBJECTS
ORDER BY OBJECT_NAME;

La tabla DUAL

DUAL es una tabla pequeña en el diccionario de datos a la que pueden hacer referencia Oracle AI Database y los programas escritos por el usuario para garantizar un resultado conocido.

La tabla doble es útil cuando un valor se debe devolver solo una vez, por ejemplo, la fecha y hora actuales. Todos los usuarios de la base de datos tienen acceso a DUAL.

La tabla DUAL tiene una columna denominada DUMMY y una fila que contiene el valor X. En el siguiente ejemplo, se consulta DUAL para realizar una operación aritmética:

SQL> SELECT ((3*4)+5)/3 FROM DUAL;

((3*4)+5)/3
-----------
 5.66666667

Consulte también: Referencia de lenguaje SQL de Oracle AI Database para obtener más información sobre la tabla DUAL

Cómo funciona el diccionario de datos

La cuenta de usuario de Oracle AI Database SYS es propietaria de todas las tablas base y vistas accesibles al usuario del diccionario de datos.

Durante el funcionamiento de la base de datos, Oracle AI Database lee el diccionario de datos para asegurarse de que existen objetos de esquema y de que los usuarios tienen acceso adecuado a ellos. Oracle AI Database actualiza el diccionario de datos continuamente para reflejar los cambios en las estructuras de la base de datos, la auditoría, los permisos y los datos.

Por ejemplo, si el usuario hr crea una tabla denominada interns, la base de datos agrega nuevas filas al diccionario de datos que reflejan la nueva tabla, columnas, segmento, extensiones y los privilegios que hr tiene en la tabla. Esta nueva información será visible la próxima vez que se consulten las vistas del diccionario.

Los datos de las tablas base del diccionario de datos son necesarios para que Oracle AI Database funcione. Solo Oracle AI Database debe escribir o cambiar la información del diccionario de datos. Ningún usuario de Oracle AI Database debe alterar las filas o los objetos de esquema incluidos en el esquema SYS, porque dicha actividad puede poner en peligro la integridad de datos. El administrador de seguridad debe mantener un control muy estricto de esta cuenta central.

Advertencia: la modificación o manipulación de los datos en las tablas del diccionario de datos puede afectar de forma permanente y perjudicial a la operación de la base de datos.

Metadatos y enlaces de datos

La CDB utiliza un mecanismo de enlace interno para separar la información del diccionario de datos.

En concreto, Oracle AI Database utiliza los siguientes punteros gestionados automáticamente:

Oracle AI Database crea y gestiona automáticamente metadatos y enlaces de datos a CDB$ROOT. Los usuarios no pueden agregar, modificar ni eliminar estos enlaces.

Consulte además:

Sinónimos Públicos para Vistas del Diccionario de Datos

Oracle AI Database crea sinónimos públicos para muchas vistas de diccionario de datos para que los usuarios puedan acceder a ellas cómodamente.

El administrador de la seguridad también puede crear sinónimos públicos adicionales para objetos de esquema que se utilizan en todo el sistema. Oracle recomienda no utilizar el mismo nombre para un objeto de esquema privado y un sinónimo público.

Consulte también: "Visión General de Sinónimos"

Caché del diccionario de datos

Gran parte de la información del diccionario de datos se encuentra en la caché del diccionario de datos porque la base de datos necesita constantemente la información para validar el acceso del usuario y verificar el estado de los objetos de esquema.

Las cachés suelen contener la información de análisis. Las columnas COMMENTS que describen las tablas y sus columnas no se almacenan en caché en la caché de diccionario, sino que se pueden almacenar en caché en la caché de buffers de base de datos.

Consulte también: "Caché de Diccionario de Datos"

Otros programas y el diccionario de datos

Otros productos de Oracle AI Database pueden hacer referencia a vistas existentes y crear tablas o vistas de diccionario de datos adicionales propias.

Oracle recomienda que los desarrolladores de aplicaciones que escriben programas que hacen referencia al diccionario de datos utilicen los sinónimos públicos en lugar de las tablas subyacentes. Es menos probable que los sinónimos cambien entre versiones.

Almacenamiento del diccionario de datos

El diccionario de datos que almacena los metadatos para la CDB en su conjunto solo se almacena en los tablespaces del sistema.

El diccionario de datos que almacena los metadatos de una PDB específica se almacena en los tablespaces autónomos dedicados a esta PDB. Los tablespaces de PDB contienen tanto los datos como los metadatos de un backend de aplicación. Por lo tanto, cada juego de tablas del diccionario de datos se almacena en su propio juego dedicado de tablespaces.

Consulte también: "Tablespace SYSTEM" para obtener más información sobre el tablespace SYSTEM

Visión General de las Vistas Dinámicas de Rendimiento

A lo largo de su operación, Oracle AI Database mantiene un conjunto de tablas virtuales que registran la actividad actual de la base de datos.

Estas vistas son dinámicas porque se actualizan continuamente mientras una base de datos está abierta y en uso. Las vistas a veces se denominan vistas V$ porque sus nombres empiezan por V$.

Las vistas de rendimiento dinámico contienen información como la siguiente:

Las vistas de rendimiento dinámico tienen los siguientes usos principales:

Contenido de las Vistas Dinámicas de Rendimiento

Las vistas de rendimiento dinámico se denominan vistas fijas porque un administrador de base de datos no las puede modificar ni eliminar. Sin embargo, los administradores de la base de datos pueden consultar y crear vistas en las tablas y otorgar acceso a estas vistas a otros usuarios.

SYS es propietario de las tablas de rendimiento dinámico, cuyos nombres empiezan por V_$. Las vistas se crean en estas tablas y, a continuación, los sinónimos públicos con el prefijo V$. Por ejemplo, la vista V$DATAFILE contiene información sobre los archivos de datos. La vista V$FIXED_TABLE contiene información sobre todas las tablas y vistas de rendimiento dinámico.

Para casi todas las vistas V$, existe una vista GV$ correspondiente. En Oracle Real Application Clusters (Oracle RAC), la consulta de una vista GV$ recupera la información de la vista V$ de todas las instancias de base de datos cualificadas.

Al utilizar el Asistente de Configuración de Bases de Datos (DBCA) para crear una base de datos, Oracle crea automáticamente el diccionario de datos. Oracle AI Database ejecuta automáticamente el script catalog.sql, que contiene definiciones de las vistas y sinónimos públicos para las vistas de rendimiento dinámico. Debe ejecutar catalog.sql para crear estas vistas y sinónimos.

Consulte además:

Almacenamiento de Vistas Dinámicas de Rendimiento

Las vistas de rendimiento dinámico se basan en tablas virtuales creadas a partir de estructuras de memoria de base de datos.

Las vistas no son tablas convencionales almacenadas en la base de datos. No se garantiza la consistencia de lectura para las vistas porque los datos se actualizan dinámicamente.

Dado que las vistas de rendimiento dinámico no son tablas verdaderas, los datos dependen del estado de la base de datos y de la instancia de base de datos. Por ejemplo, puede consultar V$INSTANCE y V$BGPROCESS cuando se inicia la base de datos pero no se monta. Sin embargo, no puede consultar V$DATAFILE hasta que se haya montado la base de datos.

Consulte también: "Concurrencia y coherencia de datos"

Metadatos de objeto de base de datos

El paquete DBMS_METADATA y la función DBMS_DEVELOPER.GET_METADATA proporcionan interfaces para extraer definiciones completas de objetos de base de datos.

Mediante el paquete DBMS_METADATA, las definiciones se pueden expresar como XML o como DDL de SQL. Oracle AI Database proporciona dos estilos de interfaz: una interfaz flexible y sofisticada para el control programático y una interfaz simplificada para consultas ad hoc.

Mediante la función DBMS_DEVELOPER.GET_METADATA, los metadatos del objeto se devuelven como un documento JSON.

Consulte también: Referencia de tipos y paquetes PL/SQL de Oracle AI Database para obtener más información sobre DBMS_METADATA. Referencia de tipos y paquetes PL/SQL de Oracle AI Database para obtener más información sobre DBMS_DEVELOPER.GET_METADATA.