quarta-feira, 16 de novembro de 2011

Dicionário de Dados do Oracle - a visão DICTIONARY

O dicionário de dados de todo SGBD armazena informações sobre o esquema de dados criado pelos usuários. No caso do Oracle é um conjunto de tabelas e visões criadas no esquema SYS. 

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 Count(*) Descrição
USER_ 361 Objetos pertencentes ao usuário corrente.
DBA_ 703 Todos objetos na base de dados.
ALL_ 339 Objetos que o usuário corrente tem privilégios de acesso, seja no seu esquema ou em outro.
V$ 618 Informações dinâmicas de desempenho.
GV$ 491 Informações de desempenho global do sistema, especialmente úteis em RACs.
Others 39 Variados usos

Caso você não lembre 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, ninguem é obrigado a lembrar o nome de 2000 visões, mas certametne é muito útil ter certo conhecimento do dicionário de dados.

Nenhum comentário:

Postar um comentário