Dicionário de Dados e Views de Desempenho Dinâmico

O conjunto central de tabelas de referência somente leitura e as views de cada banco de dados Oracle é conhecido coletivamente como o dicionário de dados. As views de desempenho dinâmico são views especiais que são atualizadas continuamente enquanto um banco de dados está aberto e em uso.

Visão Geral do Dicionário de Dados

Uma parte importante de um banco de dados Oracle é o dicionário de dados, que é um conjunto somente para leitura de tabelas que fornece metadados administrativos sobre o banco de dados.

Finalidade do Dicionário de Dados

O dicionário de dados contém metadados que descrevem o conteúdo do banco de dados.

Por exemplo, o dicionário de dados contém informações como as seguintes:

Gerenciamento de Dados

O dicionário de dados é uma parte central do gerenciamento de dados para cada banco de dados Oracle.

Por exemplo, o banco de dados executa as seguintes ações:

Como o Oracle AI Database armazena dados do dicionário de dados em tabelas, assim como outros dados, os usuários podem consultar os dados com SQL. Por exemplo, os usuários podem executar instruções SELECT para determinar seus privilégios, quais tabelas existem em seu esquema, quais colunas estão nessas tabelas, se os índices são criados nessas colunas e assim por diante.

Consulte Também:

Separação do Dicionário de Dados em um CDB

Em um CDB, os metadados do dicionário de dados são divididos entre a raiz do CDB e os PDBs. Do ponto de vista do usuário e do aplicativo, o dicionário de dados em cada contêiner em um CDB é separado.

Em um CDB recém-criado que ainda não contém dados do usuário, o dicionário de dados na raiz do CDB contém apenas metadados do sistema. Por exemplo, a tabela TAB$ contém linhas que descrevem somente tabelas fornecidas pelo sistema Oracle, por exemplo, TRIGGER$ e SERVICE$. O gráfico a seguir ilustra três tabelas subjacentes do dicionário de dados, com as barras vermelhas indicando linhas que descrevem o sistema.

Figura 1: Metadados do Dicionário de Dados na Raiz do CDB

Descrição da ilustração cncpt_vm_363.png

Suponha que você crie um PDB e, em seguida, crie um esquema hr contendo as tabelas employees e departments neste PDB. O dicionário de dados no PDB contém algumas linhas que descrevem entidades fornecidas pelo sistema Oracle e outras linhas que descrevem entidades criadas pelo usuário. Por exemplo, a tabela TAB$ no dicionário do PDB tem uma linha de metadados para a tabela employees e uma linha para a tabela departments.

Figura 2: Arquitetura do Dicionário de Dados em um CDB

Descrição da ilustração cncpt_vm_361.png

O gráfico anterior mostra que o dicionário de dados no PDB contém pointers para o dicionário de dados na raiz do CDB. Internamente, os objetos fornecidos pelo Oracle, como definições de tabela de dicionário de dados e pacotes PL/SQL, são representados apenas uma vez na raiz do CDB. Essa arquitetura alcança dois objetivos principais dentro do CDB:

Componentes do Dicionário de Dados

O dicionário de dados consiste em tabelas básicas e views.

Estes objetos são definidos da seguinte forma:

Normalmente, as views do dicionário de dados são agrupadas em conjuntos. Em muitos casos, um conjunto consiste em três visualizações contendo informações semelhantes e distinguidas entre si por seus prefixos, conforme mostrado na tabela a seguir. Ao consultar as exibições apropriadas, você pode acessar apenas as informações relevantes para você.

Tabela 1 - Conjuntos de Views do Dicionário de Dados

Prefixo Acesso do Usuário Conteúdo Observações
DBA_ Administradores de banco de dados Todos os objetos Algumas views DBA_ têm colunas adicionais que contêm informações úteis para o administrador.
ALL_ Todos os usuários Objetos para os quais o usuário tem privilégios Inclui objetos pertencentes ao usuário. Essas exibições obedecem ao conjunto atual de funções ativadas.
USER_ Todos os usuários Objetos de propriedade do usuário As views com o prefixo USER_ geralmente excluem a coluna OWNER. Essa coluna está implícita nas views USER_ para ser o usuário que está emitindo a consulta.

Nem todos os conjuntos de views têm três membros. Por exemplo, o dicionário de dados contém uma view DBA_LOCK, mas não uma view ALL_LOCK.

A view DICTIONARY fornecida pelo sistema contém os nomes e as descrições abreviadas de todas as views do dicionário de dados. A seguinte consulta desta view inclui uma amostra parcial da saída:

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 Também:

Objetos de Dados do Contêiner em um CDB

Um objeto de dados do contêiner é uma tabela ou view que contém dados pertencentes a vários contêineres ou a todo o CDB.

Os privilégios de dados do contêiner suportam um requisito geral no qual vários PDBs residem em um único CDB, mas com diferentes requisitos de administração local. Por exemplo, se os DBAs do aplicativo não quiserem administrar localmente, eles poderão conceder privilégios de dados do contêiner em views apropriadas aos usuários comuns. Nesse caso, o administrador do CDB pode acessar os dados desses PDBs. Por outro lado, os administradores do PDB que não desejam que o administrador do CDB acesse seus dados não concedem privilégios de dados do contêiner.

Exemplos de objetos de dados do contêiner são views fornecidas pelo sistema Oracle cujos nomes começam com V$ e CDB_. Todos os objetos de dados do contêiner têm uma coluna CON_ID. A tabela a seguir mostra o significado dos valores dessa coluna.

Valores do ID do Contêiner da Tabela 2

ID do Container As linhas pertencem a
0 CDB inteiro
1 CDB$ROOT
2 PDB$SEED
Todos os outros IDs PDBs, raízes de aplicativos ou sementes de aplicativos criados pelo usuário

Em um CDB, para cada view DBA_, existe uma view CDB_ correspondente. O proprietário de uma view CDB_ é o proprietário da view DBA_ correspondente. O quadro a seguir mostra o relacionamento entre as diferentes categorias de views de dicionário:

Figura 3: Views de Dicionário em um CDB

Descrição da ilustração cncpt_vm_366.png

Quando o contêiner atual é um PDB, um usuário só pode exibir informações do dicionário de dados do PDB atual. No entanto, quando o contêiner atual é a raiz do CDB, um usuário comum pode consultar as views CDB_ para ver os metadados da raiz do CDB e dos PDBs para os quais esse usuário tem privilégios. Observação: Quando consultadas na raiz do CDB, as views CDB_ e V$ convertem implicitamente dados no conjunto de caracteres AL32UTF8. Se um conjunto de caracteres precisar de mais bytes para representar um caractere quando convertido em AL32UTF8 e a largura da coluna de exibição não puder acomodar dados de um PDB específico, o truncamento de dados será possível.

A tabela a seguir descreve consultas de views CDB_. Cada linha descreve uma ação que ocorre após a ação na linha anterior.

Tabela 3 Consultando Views CDB_

Operação Descrição
SQL> CONNECT SYSTEM
 Enter password: ********
 Connected.

O usuário SYSTEM, que é comum a todos os contêineres no CDB, se conecta à raiz do CDB (consulte "Contas de Usuário Comuns").

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

  COUNT(*)
 --------
 38
SYSTEM consulta CDB_USERS para obter o número de usuários comuns na raiz do CDB. A saída indica que existem 38 usuários comuns na raiz do CDB.
SQL> SELECT COUNT(DISTINCT(CON_ID))
  FROM CDB_USERS;

  COUNT(DISTINCT(CON_ID))
 -----------------------
 4
SYSTEM consulta CDB_USERS para determinar o número de contêineres distintos no CDB.
SQL> CONNECT SYSTEM@hrdb
 Enter password: ********
 Connected.
O usuário SYSTEM agora se conecta ao PDB chamado hrpdb.
SQL> SELECT COUNT(*) FROM CDB_USERS;

  COUNT(*)
 ----------
 48
SYSTEM consulta CDB_USERS. A saída indica que existem 48 usuários comuns e locais no contêiner atual, que é hrpdb.
SQL> SELECT COUNT(*) FROM DBA_USERS;

  COUNT(*)
 ----------
 48
SYSTEM consulta DBA_USERS. A saída é a mesma que a consulta anterior. Como SYSTEM não está conectado à raiz do CDB, a exibição DBA_USERS mostra a mesma saída que CDB_USERS. Como DBA_USERS mostra apenas os usuários no contêiner atual, ele mostra 48.

Views com o Prefixo DBA_

As views com o prefixo DBA_ mostram todas as informações relevantes em todo o banco de dados. As views DBA_ destinam-se apenas a administradores.

A seguinte amostra de consulta mostra informações sobre todos os objetos no banco de dados:

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

Consulte Também: Oracle AI Database Administrator's Guide para obter informações detalhadas sobre privilégios administrativos

Views com o Prefixo ALL_

As views com o prefixo ALL_ se referem à perspectiva geral do usuário do banco de dados.

Essas views retornam informações sobre objetos de esquema aos quais o usuário tem acesso por meio de concessões públicas ou explícitas de privilégios e atribuições, além de objetos de esquema que o usuário possui.

Por exemplo, a seguinte consulta retorna informações sobre todos os objetos aos quais você tem acesso:

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

Como as views ALL_ obedecem ao conjunto atual de atribuições ativadas, os resultados da consulta dependem de quais atribuições estão ativadas, conforme mostrado no seguinte exemplo:

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

Os desenvolvedores de aplicativos devem estar cientes do efeito das atribuições ao usar as views ALL_ em um procedimento armazenado, em que as atribuições não são ativadas por padrão.

Views com o Prefixo USER_

As views com maior probabilidade de serem de interesse para usuários típicos do banco de dados são aquelas com o prefixo USER_.

Estas visualizações:

Por exemplo, a consulta a seguir retorna todos os objetos contidos no seu esquema:

SELECT OBJECT_NAME, OBJECT_TYPE
FROM   USER_OBJECTS
ORDER BY OBJECT_NAME;

A Tabela DUAL

DUAL é uma pequena tabela no dicionário de dados que o Oracle AI Database e os programas escritos pelo usuário podem fazer referência para garantir um resultado conhecido.

A tabela dupla é útil quando um valor deve ser retornado apenas uma vez, por exemplo, a data e a hora atuais. Todos os usuários do banco de dados têm acesso ao DUAL.

A tabela DUAL tem uma coluna chamada DUMMY e uma linha contendo o valor X. O exemplo a seguir consulta DUAL para executar uma operação aritmética:

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

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

Consulte Também: Referência de Linguagem SQL do Oracle AI Database para obter mais informações sobre a tabela DUAL

Como Funciona o Dicionário de Dados

A conta de usuário SYS do Oracle AI Database possui todas as tabelas base e views acessíveis ao usuário do dicionário de dados.

Durante a operação do banco de dados, o Oracle AI Database lê o dicionário de dados para verificar se existem objetos de esquema e se os usuários têm acesso adequado a eles. O Oracle AI Database atualiza o dicionário de dados continuamente para refletir alterações nas estruturas de banco de dados, auditoria, concessões e dados.

Por exemplo, se o usuário hr criar uma tabela chamada interns, o banco de dados adicionará novas linhas ao dicionário de dados que refletem a nova tabela, colunas, segmento, extensões e os privilégios que hr tem na tabela. Essa nova informação ficará visível na próxima vez que as views de dicionário forem consultadas.

Os dados nas tabelas base do dicionário de dados são necessários para o Oracle AI Database funcionar. Somente o Oracle AI Database deve gravar ou alterar informações do dicionário de dados. Nenhum usuário do Oracle AI Database deve nunca alterar linhas ou objetos de esquema contidos no esquema SYS porque essa atividade pode comprometer integridade de dados. O administrador de segurança deve manter estrito controle desta conta central.

Aviso: Alterar ou manipular os dados nas tabelas do dicionário de dados pode afetar de forma permanente e prejudicial a operação do banco de dados.

Metadados e Links de Dados

O CDB usa um mecanismo de vinculação interno para separar as informações do dicionário de dados.

Especificamente, o Oracle AI Database usa os seguintes ponteiros gerenciados automaticamente:

O Oracle AI Database cria e gerencia automaticamente links de metadados e dados para CDB$ROOT. Os usuários não podem adicionar, modificar ou remover esses links.

Consulte Também:

Sinônimos Públicos para Views de Dicionário de Dados

O Oracle AI Database cria sinônimos públicos para muitas views do dicionário de dados para que os usuários possam acessá-los convenientemente.

O administrador de segurança também pode criar sinônimos públicos adicionais para objetos de esquema usados no sistema. A Oracle recomenda o uso do mesmo nome para um objeto de esquema privado e um sinônimo público.

Consulte Também: "Visão Geral de Sinônimos"

Cache do Dicionário de Dados

Grande parte das informações do dicionário de dados está no cache do dicionário de dados porque o banco de dados exige constantemente as informações para validar o acesso do usuário e verificar o estado dos objetos do esquema.

Os caches geralmente contêm as informações de parsing. As colunas COMMENTS que descrevem as tabelas e suas colunas não são armazenadas em cache no cache do dicionário, mas podem ser armazenadas em cache no cache de buffer do banco de dados.

Consulte Também: "Cache do Dicionário de Dados"

Outros Programas e o Dicionário de Dados

Outros produtos do Oracle AI Database podem fazer referência a views existentes e criar suas próprias tabelas ou views adicionais do dicionário de dados.

A Oracle recomenda que os desenvolvedores de aplicativos que escrevem programas que se referem ao dicionário de dados usem os sinônimos públicos em vez das tabelas subjacentes. Os sinônimos são menos propensos a mudar entre as versões.

Armazenamento do Dicionário de Dados

O dicionário de dados que armazena os metadados do CDB como um todo é armazenado apenas nos tablespaces do sistema.

O dicionário de dados que armazena os metadados de um PDB específico é armazenado nos tablespaces independentes dedicados a esse PDB. Os tablespaces do PDB contêm os dados e os metadados de um back-end do aplicativo. Assim, cada conjunto de tabelas do dicionário de dados é armazenado em seu próprio conjunto dedicado de tablespaces.

Consulte Também: "O Tablespace SYSTEM" para obter mais informações sobre o tablespace SYSTEM

Visão Geral das Views de Desempenho Dinâmico

Durante toda a sua operação, o Oracle AI Database mantém um conjunto de tabelas virtuais que registram a atividade atual do banco de dados.

Essas views são dinâmicas porque são atualizadas continuamente enquanto um banco de dados está aberto e em uso. As views às vezes são chamadas de views do V$ porque seus nomes começam com V$.

As exibições de desempenho dinâmico contêm informações como as seguintes:

As exibições de desempenho dinâmico têm os seguintes usos principais:

Conteúdo das Views de Desempenho Dinâmico

As views de desempenho dinâmico são chamadas de views fixas porque não podem ser alteradas ou removidas por um administrador de banco de dados. No entanto, os administradores de banco de dados podem consultar e criar views nas tabelas e conceder acesso a essas views a outros usuários.

SYS possui as tabelas de desempenho dinâmico, cujos nomes começam com V_$. As views são criadas nestas tabelas, e depois sinônimos públicos prefixados com V$. Por exemplo, a exibição V$DATAFILE contém informações sobre arquivos de dados. A view V$FIXED_TABLE contém informações sobre todas as tabelas e views de desempenho dinâmico.

Para quase todas as exibições V$, existe uma exibição GV$ correspondente. No Oracle Real Application Clusters (Oracle RAC), consultar uma view GV$ recupera as informações de view V$ de todas as instâncias de banco de dados qualificadas.

Quando você usa o Assistente de Configuração de Banco de Dados (DBCA) para criar um banco de dados, o Oracle cria automaticamente o dicionário de dados. O Oracle AI Database executa automaticamente o script catalog.sql, que contém definições das views e sinônimos públicos para as views de desempenho dinâmico. Execute catalog.sql para criar essas views e sinônimos.

Consulte Também:

Armazenamento das Views de Desempenho Dinâmico

As visualizações dinâmicas de desempenho são baseadas em tabelas virtuais criadas a partir de estruturas de memória do banco de dados.

As views não são tabelas convencionais armazenadas no banco de dados. A consistência de leitura não é garantida para as views porque os dados são atualizados dinamicamente.

Como as views de desempenho dinâmico não são tabelas verdadeiras, os dados dependem do estado do banco de dados e da instância do banco de dados. Por exemplo, você pode consultar V$INSTANCE e V$BGPROCESS quando o banco de dados for iniciado, mas não montado. No entanto, você não pode consultar V$DATAFILE até que o banco de dados tenha sido montado.

Consulte Também: "Concorrência e Consistência de Dados"

Metadados do Objeto de Banco de Dados

O pacote DBMS_METADATA e a função DBMS_DEVELOPER.GET_METADATA fornecem interfaces para extrair definições completas de objetos de banco de dados.

Usando o pacote DBMS_METADATA, as definições podem ser expressas como XML ou como SQL DDL. O Oracle AI Database fornece dois estilos de interface: uma interface flexível e sofisticada para controle programático e uma interface simplificada para consultas ad hoc.

Usando a função DBMS_DEVELOPER.GET_METADATA, os metadados do objeto são retornados como um documento JSON.

Consulte Também: Referência de Tipos e Pacotes PL/SQL do Oracle AI Database para obter mais informações sobre o DBMS_METADATA. Referência de Tipos e Pacotes PL/SQL do Oracle AI Database para obter mais informações sobre o DBMS_DEVELOPER.GET_METADATA.