[ 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

    Retomando o blog!!

    0
  • The Geek
  • Tags: ,
  • Bom galera...

    Após um tempo longe do blog, estou de volta !! :D
    Dei uma repaginada aqui, e agora realmente pretendo voltar a postar!!
    Nesse periodo fora fiquei estudando, pra minha certificação de OCP, que tirei sexta feira ( 11/03 ), e fazendo mais alguns projetos malucos!!

    O video abaixo é uma previa de como o projeto está ficando. Eu pretendo enfeitar a casa do meu avô, que no natal vira um ponto turistico da cidade.
    Eu tive a ideia de fazer este projeto no final do ano passado, pois nos EUA é muito comum voce ver casas enfeitadas desse jeito.
    Porém, para comprar um desses aparelhos prontos de lá, voce irá gastar uns de $250 no minimo.

    Em breve postarei mais notícias sobre ele, e sobre as idéias que pretendo implementar nele.

    Espero que gostem e que acompanhem o blog!!

    ** Aviso: para quem gosta de programação e jogo, eu e uns amigos vamos fazer uns screencast ensinando algumas coisas, e também desenvolvendo alguns jogos simples!
    Quem estiver afim só entrar em contato pelo email: douglasmurbano@gmail.com

    Chega de escrever...deem uma olhada no projeto atual:



    e como eu pretendo deixar a casa do meu avô:





    []s

    Trocando o valor de duas variáveis sem utilizar uma variável temporária

    0
  • terça-feira, 9 de fevereiro de 2010
  • The Geek
  • Tags: , , ,
  • Olá galerinha.....

    Este é meu primeiro post sobre Programação. É muito "basico", porém eu acho muito interessante...espero que gostem :D!!!

    Eu vou mostrar como trocar ( swap ) o valor de duas variáveis sem utilizar uma variável temporária.

    Imagine o seguinte caso: Voce tem duas variáveis, X e Y, e voce precisa colocar o valor de Y na variável X, e o valor de X na variável Y.

    Por exemplo: Voce tem duas variáveis com seus respectivos valores:
    int x = 4;
    int y = 6;
    

    Agora, vamos criar uma função para trocar os valores das variáveis sem utilizar uma variável temporária:
    /*
     * Function to swap two variables values using XOR
     * IN: the two variables by References
     * OUT: nothing
     * Usage: XORswap( &varA, &varB );
     */
    void XORswap( int *a, int *b ) {
        *a ^= *b;  // *a = *a ^ *b
        *b ^= *a;  // *b = *a ^ *b
        *a ^= *b;  // *a = *a ^ *b
    }
    

    Agora, deixe-me explicar como o código funciona, porém utilizando os operadores + e -
    /*
     * Function to swap two variables values using + and -
     * IN: the two variables by References
     * OUT: nothing
     * Usage: Easyswap( &varA, &varB );
     */
    void Easyswap( int *a, int *b ) {
        *a = *a + *b; 
        *b = *a - *b; 
        *a = *a - *b; 
    }
    

    Vamos testar nosso codigo, 1o. passo:
    x = x + y; 
    
    Substituindo as variáveis X->4 e Y->6 nos temos o seguinte:
    x = 4 + 6; //x = 10
    
    2o. passo:
    y = x - y; 
    
    Substituindo as variáveis X->10 and Y->6 nós temos o seguinte:
    y = 10 - 6; // y = 4  -> primeira troca feita
    
    Ultimo passo:
    x = x - y; 
    
    Substituindo a variável X->10 e Y->4 nós temos o seguinte:
    x = 10 - 4; // x = 6  -> última troca feita.
    

    Então, depois de tudo, a troca está feita, muito fácil, não é?
    Segue o código completo escrito em C++:
    #include 
    
    using namespace std;
    
    /*
     * Function to swap two variables values using XOR
     * IN: the two variables by References
     * OUT: nothing
     * Usage: Easyswap( &varA, &varB );
     */
    void XORswap( int *a, int *b ) {
        *a ^= *b;
        *b ^= *a;
        *a ^= *b;
    }
    
    
    /*
     * Function to swap two variables values using + and -
     * IN: the two variables by References
     * OUT: nothing
     * Usage: EASYswap( &varA, &varB );
     */
    void EASYswap( int *a, int *b ) {
        *a = *a + *b; 
        *b = *a - *b; 
        *a = *a - *b; 
    }
    
    
    int main() {
        int a = 3;
        int b = 7;
        
        cout << "Before XORswap " << endl 
             << "A: " << a        << endl 
             << "B: " << b        << endl 
             << "------------"    << endl;
    
        XORswap( &a, &b);
    
        cout << "After XORswap "  << endl 
             << "A: " << a        << endl 
             << "B: " << b        << endl 
             << "------------"    << endl ;
        
        a = 3;
        b = 7;
        
        cout << endl 
             << endl 
             << endl;
    
        cout << "Before EASYswap " << endl 
             << "A: " << a         << endl 
             << "B: " << b         << endl 
             << "------------"     << endl ;
    
        EASYswap( &a, &b );
    
        cout << "After EASYswap " << endl
             << "A: " << a        << endl 
             << "B: " << b        << endl 
             << "------------"    << endl ;
        
        cin.get();
        
    }
    

    Em breve colocarei mais coisas....
    []'s para todos

    Hello World

    0
  • The Geek
  • #!/bin/ksh
    echo "Hello World!!"
    

    Olá Galera....

    Este é o primeiro post do meu blog. Aqui eu vou postar coisas sobre Programação, Tecnologia, Jogos, Oracle e Parkour. Espero que todos gostem!!! :)

    []'s
     
    Copyright 2010 The Geek's Way