#44
O dicionário de dados armazena todas informações referentes ao banco de dados, tanto da estrutura física, quanto da estrutura lógica.
As informações armazenadas no dicionário de dados são chamadas de metadados, que é, dados sobre dados. Isso significa que ele armazena informações sobre outros dados do banco de dados. Resumindo, o dicionário de dados é um conjunto de metadados.
As principais informações armazenadas no dicionário de dados são, informações sobre usuários, privilégios e roles, informações de segurança, informações de segmentos (tabelas), restrições de integridade, informações de monitoramento de desempenho, entre outras.
Cada instância do banco de dados deve possuir apenas um dicionário de dados, e se ele não existir o banco de dados não funciona.
Agora que você sabe a importância do dicionário de dados e o que ele armazena, vamos descobrir como ele é criado, atualizado e como podemos acessar as informações dele.
O dicionário de dados é criado apenas uma vez e isso ocorre quando o banco de dados é criado. O dicionário de dados é um conjunto de segmentos (tabelas e índices) e cada segmento pertence somente a um dos tablespaces SYSTEM ou SYSAUX, o funcionamento dos segmentos do dicionario de dados é parecido com qualquer outro segmento que você cria no banco de dados, a única diferença entre os segmentos do dicionário de dados dos demais segmentos é que nos segmentos do dicionário de dados as tabelas são criadas dinâmicamente na criação do banco de dados e ninguém tem permissão de acessa-las diretamente, não há nada que impeça um DBA curioso acessar diretamente, mas se realizar alterações nessas tabelas pode ocasionar erro irreversível e com isso perder todo o banco de dados.
O acesso ao dicionário de dados é somente para leitura e é realizado somente através de um conjunto de Views, essas Views possuem apenas três formatos que definem os graus de permissão, esses formatos são reconhecidos através dos seus prefixos, os prefixos são, DBA_ , ALL_ , USER_.
Significado dos prefixos:
- USER_ apresenta objetos que pertencentes ao usuário que esta consultando a view. Isso significa que a mesma consulta apresenta resultados diferentes para usuários diferentes.
- ALL_ apresenta objetos aos quais o usuário tem acesso, o resultado apresenta as próprias tabelas do usuário que esta acessando e as tabelas que o usuário tenha permissão para ver.
- DBA_ apresenta todos os objetos do banco de dados, independente de quem criou.
Exemplo de uso da View:
select * from USER_TABLES;
select * from ALL_TABLES;
select * from DBA_TABLES;
Se um usuário sem permissão tentar acessar uma determinada tabela, será informado que a tabela não existe. Essas Views são criadas como parte do processo de criação do banco de dados, contém um grande número de pacotes PL/SQL que são fornecidos pelo Oracle para ajudar os administradores de banco de dados no gerenciamento do banco.
Somente é possível instânciar e acessar o dicionário de dados, após a abertura do tablespace SYSTEM, para abertura do tablespace SYSTEM é usado o arquivo de controle (controlfile), esse arquivo de controle é responsável por listar todos os arquivos de dados e a quais tablespace cada um pertence. Somente após instância o dicionário de dados é possível abrir o banco de dados.
O dicionário de dados é atualizado somente pelo próprio Oracle e de forma interna. Essas atualizações acontecem toda vez que o banco executa uma instrução DDL ou DCL. Para reelembrar quais são essas instruções acesse esse post https://wdsdba.blogspot.com.br/2018/02/linguagens-internas-oracle-linguagens.html .
Exemplo de atualização do dicionário de dados é quando você executa a instrução CREATE TABLE, com isso será inserido linhas nas tabelas do dicionário de dados com as informações referentes a tabela criada, suas colunas, seus índices e as permissões.
Todas as ações a serem executadas no banco de dados tem que obrigatoriamente passar pelo dicionário de dados para validação, exemplo, ao realizar uma simples consulta a qualquer tabela do banco de dados, o servidor Oracle deve primeiramente consultar o dicionário de dados, para saber se a tabela existe, e as colunas que a compõem e as permissões do usuário que esta acessando. Como o dicionário de dados é sempre requisitado, então, para evitar muitos acessos I/O ao dicionário de dados, existe o Cache de Dicionário de Dados que fica dentro da memória Shared Pool, esse cache armazena as consultas e validações recentes, desta forma melhora o desempenho quando for realizada outra consulta. O Cache de Dicionário de Dados já foi explicado em um post anterior referente ao Shared Pool que fica nesse link https://wdsdba.blogspot.com.br/2018/02/shared-pool-estruturas-de-memoria-no.html .
Se tiverem dúvidas realizem um INSERT nos comentários e depois dê um COMMIT que depois respondo.
Abraço e bons estudos.
Abraço e bons estudos.
Comentários
Postar um comentário