DICIONÁRIO DE DADOS
Podemos dizer que dicionário de dados, é um conjuto de tabelas e views somente
leitura, utilizado pelo banco de dados Oracle. Este conjunto é criado e mantido pelo
Oracle e contém informações sobre o banco de dados, o dicionário de dados é
estruturado em tabelas e views, da mesma forma que outros dados do banco. O
dicionário de dados é uma importante ferramenta para todos os usuários, desde
usuários finais até os desenvolvedores, inclusive os DBA’s. Para acessar o dicionário de
dados, é utilizado as instruções de SQL, como dito acima, é somente leitura, então, só
vamos conseguir usar o SELECT. Todas as tabelas pertecem ao usuário SYS.
Que informações vamos encontrar na nas views de dicionário?
As informações armazenadas no dicionário de dados incluem os nomes dos usuários
do servidor Oracle, os privilégios concedidos aos usuários, os nomes dos objetos do
banco de dados, as constraints de tabelas e as informações de auditoria. Há quatro
categorias de views de dicionário de dados. Cada categoria possui um prefixo distinto
que flete o uso pretendido.
Prefixo
Significado
USER_
Contém detalhes dos objetos pertencentes ao usuário.
ALL_
Contém detalhes dos objetos para os quais o usuário ganhou
direitos de acesso e dos objetos pertencentes ao usuário.
DBA_
Contém detalhes dos usuários com privilégios de DBA para acessar
qualquer objeto do banco de dados.
V$_
Armazena informações sobre o desempenho ou bloqueio do
servidor do banco de dados; disponível para os administradores do
banco.
Vejamos
algumas
views
mais
utilizadas:
Antes de começarmos a ver as tabelas do dicionário, podemos ver como elas se
encontram dentro da tabela dicionário.
Select * from dictionary;
USER_TABLES: Exibe a descrição de todas as tabelas do usuário.
Select * from user_tables;
ALL_TABLES: Exibe a descrição de todas as tabelas do usuário e as que foram
concedidas a ele, mesmo ele não sendo o owner.
SELECT * FROM all_tables;
USER_OBJECTS: Exibe todos os objetos pertencentes ao seu usuário.
SELECT * FROM user_objects;
ALL_OBJECTS: Exibe todos os objetos que pertencem ao usuário e aos quais tem
acesso.
SELECT * FROM all_objects;
USER_TAB_COLUMNS: Você obter informações detalhadas sobre as colunas das suas
tabelas. No qual, você é o dono.
SELECT * FROM user_tab_columns;
USER_CONSTRAINTS: Exibe as definições de constrainsts nas tabelas, pertencentes a
seu usuário.
SELECT * FROM user_constraints;
USER_CONS_COLUMNS: Exibe as definições de constraints nas colunas das tabelas,
pertencentes ao seu usuário
SELECT * FROM user_cons_columns;
USER_VIEWS: Exibe as views pertencentes ao seu usuário.
SELECT * FROM user_views;
USER_SEQUENCES: Exibe informações das sequences criadas, pelo seu usuário.
SELECT * FROM user_sequences;
USER_SYNONYMS: Exibe os synonyms pertencentes ao seu usuário.
SELECT * FROM user_synonyms;
USER_TAB_PRIVS_MADE: Exibe todas as conexões feitas aos objetos pertencentes ao
usuário
SELECT * FROM user_tab_privs_made;
USER_COL_PRIVS_MADE: Exibe todas as concessões feitas às colunas de objetos
pertencentes ao usuário.
SELECT * FROM user_col_privs_made;
REVISÃO DOS COMANDOS.
USER_TABLES: Exibe a descrição de todas as tabelas do usuário.
Select * from user_tables;
ALL_TABLES: Exibe a descrição de todas as tabelas do usuário e as que foram
concedidas a ele, mesmo ele não sendo o owner.
SELECT * FROM all_tables;
USER_OBJECTS: Exibe todos os objetos pertencentes ao seu usuário.
SELECT * FROM user_objects;
ALL_OBJECTS: Exibe todos os objetos que pertencem ao usuário e aos quais tem
acesso.
SELECT * FROM all_objects;
USER_TAB_COLUMNS: Você obter informações detalhadas sobre as colunas das suas
tabelas. No qual, você é o dono.
SELECT * FROM user_tab_columns;
USER_CONSTRAINTS: Exibe as definições de constrainsts nas tabelas, pertencentes a
seu usuário.
SELECT * FROM user_constraints;
USER_CONS_COLUMNS: Exibe as definições de constraints nas colunas das tabelas,
pertencentes ao seu usuário
SELECT * FROM user_cons_columns;
USER_VIEWS: Exibe as views pertencentes ao seu usuário.
SELECT * FROM user_views;
USER_SEQUENCES: Exibe informações das sequences criadas, pelo seu usuário.
SELECT * FROM user_sequences;
USER_SYNONYMS: Exibe os synonyms pertencentes ao seu usuário.
SELECT * FROM user_synonyms;
USER_TAB_PRIVS_MADE: Exibe todas as conexões feitas aos objetos pertencentes ao
usuário
SELECT * FROM user_tab_privs_made;
USER_COL_PRIVS_MADE: Exibe todas as concessões feitas às colunas de objetos
pertencentes ao usuário.
SELECT * FROM user_col_privs_made;
A visão DICTIONARY é especialmente interessante por que contém a lista de visões que
formam o próprio dicionário de dados. Ou seja, seria o meta-meta-esquema de dados.
A consulta abaixo retorna o número de visões para certos grupos de informações.
SELECT
CASE WHEN SUBSTR(TABLE_NAME, 1, 5) = 'USER_' THEN 'USER_'
WHEN SUBSTR(TABLE_NAME, 1, 4) = 'ALL_' THEN 'ALL_'
WHEN SUBSTR(TABLE_NAME, 1, 4) = 'DBA_' THEN 'DBA_'
WHEN SUBSTR(TABLE_NAME, 1, 3) = 'V_$' THEN 'V_$'
WHEN SUBSTR(TABLE_NAME, 1, 2) = 'V$' THEN 'V$'
WHEN SUBSTR(TABLE_NAME, 1, 4) = 'GV_$' THEN 'GV_$'
WHEN SUBSTR(TABLE_NAME, 1, 3) = 'GV$' THEN 'GV$'
ELSE 'Others'
END PREFIX
, COUNT(*)
FROM DICTIONARY
GROUP BY
CASE WHEN SUBSTR(TABLE_NAME, 1, 5) = 'USER_' THEN 'USER_'
WHEN SUBSTR(TABLE_NAME, 1, 4) = 'ALL_' THEN 'ALL_'
WHEN SUBSTR(TABLE_NAME, 1, 4) = 'DBA_' THEN 'DBA_'
WHEN SUBSTR(TABLE_NAME, 1, 3) = 'V_$' THEN 'V_$'
WHEN SUBSTR(TABLE_NAME, 1, 2) = 'V$' THEN 'V$'
WHEN SUBSTR(TABLE_NAME, 1, 4) = 'GV_$' THEN 'GV_$'
WHEN SUBSTR(TABLE_NAME, 1, 3) = 'GV$' THEN 'GV$'
ELSE 'Others'
END;
O número de visões em cada grupo pode variar dependendo da versão de Oracle
instalada. Os números abaixo correspondem ao Oracle 11g XE que estou utilizando.
Prefix
USER_
DBA_
ALL_
V$
GV$
Others
Count(*)
Descrição
361
Objetos pertencentes ao usuário corrente.
703
Todos objetos na base de dados.
Objetos que o usuário corrente tem privilégios de acesso, seja
339
no seu esquema ou em outro.
618
Informações dinâmicas de desempenho.
Informações de desempenho global do sistema, especialmente
491
úteis em RACs.
39
Variados usos
Caso você não se lembre-se do nome de determinadas visões do dicionário de dados,
você pode utilizar a visão DICTIONARY e escrever consultas como SELECT * FROM
DICTIONARY WHERE TABLE_NAME LIKE '%INDEX%'. Afinal, ninguém é obrigado a
lembrar o nome de 2000 visões, mas certamente é muito útil ter certo conhecimento
do dicionário de dados.
Links e fontes de pesquisa
http://aserlorenzo.com/manSQL/Oracle/DicionarioDados.htm
http://aprenderoracle.com/2011/05/dicionario-de-dados/
http://www.tutoriaisclube.com/abrir.php?tutorial=309
Download

DICIONÁRIO DE DADOS Podemos dizer que dicionário de dados, é