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