[ Oracle ] Views que todos DBAs deveriam ter tatuadas no corpo - I

0
  • domingo, 20 de março de 2011
  • The Geek
  • Tags: ,
  • Boa noite galerinha...

    Este post é dedicado a um cara muito gente boa que trabalhou comigo.
    Ele está tentando se "suicidar", hahaha, brincadeirinha...está estudando para virar um DBA!! Boa sorte Gustavo!!

    Ae Douglas...quer dizer Gustavo :P!! se tiver alguma dúvida, é só postar ai nos comments!

    Bom sem mais introduções, o assunto de hoje é: Views importantes que todos DBAs deveriam ter tatuadas no corpo!! haha

    Seguinte, no oracle existem muitas views importantes...

    P: O que é view?
    R: View nada mais é do que uma visualização customizada de uma ou mais tabelas ou outras views.

    P: Porque importantes?
    R: Porque o oracle usa tabelas para armazenar tudo o que acontece no banco, desde a criação de uma tabela, até os logins que são executados.

    Vamos dar um exemplo:
    Digamos que o usuário HR executa um comando para criar uma tabela:

    SQL> CREATE HR.TABLE TBL_EXAMPLE_1 (
      2    id NUMBER(5),
      3    txt VARCHAR2(500)
      4    );
    
    Table created.
    
    SQL> comment on column HR.TBL_EXAMPLE_1.TXT is 'Este e um exemplo de comentario na coluna.';
    
    Comment created.
    

    P: Legal, e agora, como o oracle faz para saber que essa tabela foi criada?
    R: Simples...ele armazena essas informações em uma ou várias tabela interna dele.

    Sera?? hahaha
    bom...para provar isto vamos utilizar algumas views de dicionario chamadas static views ( Views estáticas ).
    Elas são chamadas assim porque elas mudam raramente ( somente quando há mudanças no dicionario ).
    Entre as existentes, vamos olhar as seguintes:

    DBA_* -> Estas views possuem informações sobre tudo que é relevante no banco de dados, e normalmente só deveria ser utilizada por administradores.

    ALL_* -> Estas views possuem informações de todos os objetos que um determinado usuário tem acesso.

    USER_* -> Estas views possuem informações sobre todos os objetos criado pelo schema.

    Ex: DBA_TABLES, ALL_TABLES, USER_TABLES

    Reparem que todos os nomes dessas views estão no plural e isso vale para todas as outras.

    Chega de enrolar e vamos checar se realmente a informação sobre a tabela que criamos acima está no banco.

    Execute a seguinte query:

    SQL> Select OWNER, TABLE_NAME
      2    From DBA_TABLES
      3   Where OWNER = 'HR'
      4     And TABLE_NAME = 'TBL_EXAMPLE_1';
    
    
    OWNER                TABLE_NAME
    -------------------- ------------------------- 
    HR                   TBL_EXAMPLE_1
    
    one row selected.
    

    Viu....eu não estava enganando voces :P!!

    Agora uma questão importante:

    P: Preciso decorar TODOS os nomes dessas views?
    R: Não, porém deveria saber a maioria delas.

    P: E se eu não souber, o que eu faço?
    R: Existem sempre a opção de sentar e chorar :P..hahaha mas essa não é lá uma boa opção :P. Na verdade, o oracle possui um tabela onde ele guarda o nome de todas essas tabelas importantes...ufaaa.. thanks Oracle ;)

    P: Qual o nome dela? Como faço então?
    R: O nome dessa tabela é DICTIONARY:

    SQL> describe dictionary
    
     Name                      Null?    Type
     ------------------------- -------- -----------
     TABLE_NAME                         VARCHAR2(30)
     COMMENTS                           VARCHAR2(4000)
    

    Digamos que por exemplo voce queria saber qual o nome da tabela onde contém os comentários que foram feitos em uma determinada columa de uma tabela.

    Um pouco mais de queries!!:

    SQL> SELECT TABLE_NAME, COMMENTS 
      2    FROM DICTIONARY
      3   WHERE TABLE_NAME LIKE 'DBA_%COL%'
      4   ORDER BY 1;
    
    TABLE_NAME            COMMENTS
    --------------------- ---------------------------------------------------------
    ...
    DBA_COLL_TYPES        Description of all named collection types in database
    DBA_COL_COMMENTS      Comments on columns of all tables and views
    DBA_COL_PRIVS         All grants on columns in the database
    ...
    
    44 rows selected.
    

    Bom...agora com 44 linhas não fica muito dificil de achar neh?
    Com o passar do tempo, voce acostuma com a lógica nos nomes das tabelas e dai fica mais fácil de achar o nome. ( Ex: .. like 'DBA_%COL%COMMENT%)

    Só por curiosidade, vamos ver se o comentario realmente está la? ( teimoso eu né?..hahaha )

    SQL> SELECT OWNER, TABLE_NAME, COLUMN_NAME, COMMENTS
      2    FROM DBA_COL_COMMENTS
      3   WHERE OWNER = 'HR' 
      4     AND TABLE_NAME = 'TBL_EXAMPLE_1'
      5     AND COLUMN_NAME = 'TXT';
    
    OWNER    TABLE_NAME    COLUMN_NAME   COMMENTS
    -------- ------------- ------------- --------------------------------------------
    HR       TBL_EXAMPLE_1 TXT           Este e um exemplo de comentario na coluna.
    
    one row selected.
    

    É...realmente está lá!! :D

    Galerinha...eu ia escrever sobre as views de performance, porém o post iria ficar muito grande....então decidi publicar mais um post sobre views, logo coloco o link aqui.

    Espero que tenham gostado....sei que explicar não é muito o meu forte!!

    Qualquer dúvida, sugestão, melhorias, criticas etc, só postar um comment ai.


    Bom...abraços a todos até breve.
    Gustavo: keep walking ;)

    []'sss

    0 comments:

    Postar um comentário

     
    Copyright 2010 The Geek's Way