Social Icons

10 de dez de 2017

Guia de Sobrevivência para o DBA Oracle Júnior




Olá pessoal,

     Atendendo ao pedido do ex-aluno Edionaldo Costa que participou da 2ª turma telepresencial do treinamento "Administrando Bancos de Dados Oracle", vou compartilhar neste artigo um pequeno roteiro que servirá como referência para DBAs iniciantes, que precisam identificar os Bancos de Dados Oracle existentes na empresa, em seu início de trabalho, pois muitas vezes não há alguém que possa lhes dar o suporte necessário. Também mostrarei alguns comandos básicos para que você possa conhecer melhor o ambiente de BD e os recursos habilitados e/ou configurados nele!

   Não é objetivo deste artigo explicar os conceitos básicos de administração e arquitetura de Bancos de Dados, portanto se você busca estes conhecimentos, sugiro a leitura do artigo Quero ser DBA, por onde devo começar?.Vocês verão no roteiro abaixo (elaborado em forma de perguntas e respostas) que não há grande complexidade para executar tais tarefas, porém muitas vezes elas não são atividades simples ou triviais para quem tem pouca experiência ou para quem está começando seus estudos em Oracle Database.


Guia de Sobrevivência para o DBA Oracle Júnior

1- Como descobrir quais são os Bancos de Dados Oracle que estão online na empresa?
R.: Sabemos que não dá para fazer mágica, então alguma coisa o seu chefe, "superior" ou algum colega de trabalho mais experiente, terá que lhe informar. No mínimo você terá que saber o nome dos servidores de Bancos de Dados, usuários e senhas para conexão. Normalmente os DBAs possuem acesso aos servidores de Bancos de Dados, que na grande maioria possuem SO Linux com interface gráfica desabilitada. Para descobrir quais BDs temos instalados neles, temos que nos conectar com uma conta de usuário e senha do SO, via utilitário de conexão remota, tais como o famoso e tradicional PuTTY, ou outros utilitários como por exemplo, o MobaXterm (este último eu tenho usado bastante ultimamente e escreverei em breve um artigo sobre ele). Considerando que você se conectou com o usuário "oracle" do SO (que é o owner do software do BD instalado), execute o comando abaixo em uma janela de terminal para descobrir quais instâncias estão no ar:
     $   ps -ef | grep smon

     O comando acima irá listar os processos SMON de todas as instâncias que estão no ar naquela máquina em que você se logou. No exemplo da Imagem 01 podemos ver o processo smon da instância com nome "orcl":

Imagem 01 - Resultado da execução do comando "ps -ef | grep smon"
Obs.: Ao invés de listar os processos SMON poderíamos ter escolhido outro processo de background obrigatório qualquer, como por exemplo, o PMON.

   Agora que já sabemos que existe uma instância com nome orcl no ar, temos que ter certeza de que ela está no estado "open", para que os usuários possam se conectar e utilizá-la. Para isso devemos entrar no SQL Plus a partir de uma janela de terminal e executar a instrução SQL a seguir:
     $      sqlplus / as sysdba     
     SQL>   SELECT INSTANCE_NAME, HOST_NAME, STATUS FROM V$INSTANCE
    Obs.: No exemplo acima estamos nos conectando no SQLPLUS com autenticação do SO.


2- Como descobrir quais são os Bancos de Dados que estão instalados e offline em um determinado servidor da empresa?

R.: Considerando que algum(ns) BDs possa(m) estar offline, devemos executar mais algumas pesquisas para descobrir quais são eles. O primeiro lugar que você pode olhar é o conteúdo do arquivo /etc/oratab, pois ele contém uma linha de parâmetros para cada instância instalada na máquina servidora. Para visualizá-lo, execute o comando abaixo em uma janela de terminal e veja o seu conteúdo na Imagem 02:
     $   more /etc/oratab


Imagem 02 - Conteúdo de um arquivo "oratab"

     O primeiro valor de cada linha indica o nome da instância. Para mais informações sobre o arquivo oratab consulte o link The oratab file.


3- Como descobrir se o ambiente em que estou conectado é single instance ou RAC?
R.: Execute o SQL abaixo e veja o retorno da coluna DATABASE_TYPE:
    SQL> select database_type from v$instance;

4- Como descobrir a versão do SGBD de uma determinada instância?
R.: Execute o SQL abaixo:
    SQL> select * from v$version;

Obs.: Em versões mais recentes do Oracle você também poderá descobrir a versão dele consultando o valor da coluna VERSION da visão V$INSTANCE.


5- Se for Oracle 12c, como descobrir os nomes dos PDBs existentes e se eles estão abertos?
R.: Execute o SQL abaixo e veja o valor das colunas "name" e "open_mode":
    SQL> select CON_ID, NAME, OPEN_MODE, OPEN_TIME 
         from V$PDBS;


6- Como descobrir se o modo archivelog está habilitado e onde os archives estão sendo gerados?
R.: Execute o SQL abaixo. Se o retorno for ARCHIVELOG significa que ele está habilitado:
    SQL> select LOG_MODE from v$database;

    Se está habilitado, nos resta saber onde os archives estão sendo gravados. Execute o SQL abaixo e veja se algum dos parâmetros listados possui um valor diferente de vazio, que indica onde eles estão sendo gerados:
    SQL> SHOW PARAMETER LOG_ARCHIVE_DEST

 
7- Como descobrir quantos grupos de redo logs existem e quantos membros existem em cada grupo?
R.: Execute o SQL abaixo e veja o seu retorno para descobrir quantos grupos existem, membros e se eles estão online:    
    SQL> SELECT GROUP, MEMBER, TYPE FROM V$LOGFILE;


8- Como descobrir onde estão os Control Files?
R.: Execute o SQL abaixo e veja o retorno dele. Normalmente existe mais de 1 controlfile e o nome/caminho completo dos arquivos de cada um deles estão separados por um caractere vírgula (,):
    SQL> SHOW PARAMETER CONTROL_FILES

 
9- Como descobrir quais parâmetros foram configurados na instância, que estão com valores diferentes do padrão e quais valores foram configurados para cada um deles?
R.: Execute o SQL abaixo e veja o seu retorno:
    SQL> SELECT NAME, VALUE, DISPLAY_VALUE, DESCRIPTION
         FROM V$PARAMETER WHERE ISDEFAULT = 'FALSE';

 
10- Como descobrir onde estão os arquivos de trace e alert log do BD?
R.: Para obter essa resposta leia o artigo Pesquisando o log de alertas no Oracle Database 11G.


11- Como descobrir o tamanho atual do BD?
R.: Existem várias formas de obter essa informação.
   a) Para obter o tamanho total físico (incluindo espaço livre) do BD, considerando datafiles e tempfiles, execute:
SQL> Select  round(sum(used.bytes) / 1024 / 1024/1024 ) || ' GB' "Database Size",
             round(free.p / 1024 / 1024/1024) || ' GB' "Free space"
     from    (select bytes from v$datafile
              union all
              select bytes 
              from v$tempfile
              ) used,   
              (select sum(bytes) as p from dba_free_space) free
     group by free.p;

   b) Para ver o tamanho total lógico do BD (que normalmente é menor, pois não inclui blocos vazios) execute:
SQL> select (sum(bytes)/1024/1024/1024) as size_gb 
     from dba_segments;
  
  
12- Como descobrir o tamanho atual, livre e máximo dos tablespaces?
R.: Execute o SQL abaixo para ver uma lista de todos os tablespaces do BD, status, tamanho total em MB, espaço livre e alocado, e tamanho de bloco utilizado:
SQL> SELECT      d.tablespace_name "Name",
                 d.status "Status",
                 a.bytes/ 1024 / 1024 "TOTAL(M)",
                 F.bytes / 1024 / 1024 "LIVRE(M)",
      ((a.bytes - DECODE(f.bytes, NULL, 0, f.bytes)) / 1024 / 1024) "ALOCADO(M)",
                 d.block_size
     FROM        sys.dba_tablespaces d, 
                 sys.sm$ts_avail a, 
                 sys.sm$ts_free f
     WHERE       d.tablespace_name = a.tablespace_name 
     AND         f.tablespace_name (+) = d.tablespace_name
     ORDER BY    3 DESC;
 

13- Como ver o tamanho atual das tabelas e índices do BD?
R.: Para ver o tamanho total lógico das tabelas em GB execute:
SQL> select  (sum(bytes)/1024/1024/1024) as size_gb 
     from    dba_segments 
     where   segment_type in ('TABLE SUBPARTITION','TABLE PARTITION','TABLE');

     Para ver o tamanho total lógico dos índices em GB execute:
SQL> select  (sum(bytes)/1024/1024/1024) as size_gb 
     from    dba_segments 
     where   segment_type IN ('INDEX PARTITION','INDEX');
 

14- Como descobrir o máximo de sessões abertas e sessões ativas que o BD já teve?
R.:  Para descobrir essas informações e vários outros limites já alcançados pelo BD, como por exemplo, a qtde. máxima de tabelas e índices execute o SQL abaixo:
SQL>   SELECT hwm1.name,
              hwm1.highwater,
              hwm1.last_value
       FROM   dba_high_water_mark_statistics hwm1
       WHERE  hwm1.version = (SELECT MAX(hwm2.version)
                              FROM   dba_high_water_mark_statistics hwm2
                              WHERE  hwm2.name = hwm1.name)
       ORDER BY hwm1.name;


15- Como verificar se o listener está no ar e mais informações sobre ele?
R.: Sugiro a leitura dos artigos HOW TO CONFIGURE THE DATABASE LISTENER WITH LISTENER.ORA IN ORACLE 12C e Oracle Network Configuration.
 
 
16- Não consigo me conectar remotamente no BD, como verifico se os arquivos de rede Oracle estão configurados apropriadamente?
R.: Sugiro a leitura do artigo Entendendo o Oracle Net Services e o arquivo TNSNAMES.


17- Como faço para descobrir se os backups estão sendo feitos e onde estão sendo gravados?
R.: Os backups podem estar sendo feitos de diversas maneiras (ler artigo Conceitos sobre Backups com o RMAN para obter mais informações), mas supondo que eles estejam sendo feitos através do RMAN, execute os SQL abaixo:

      a) Para ver se os backups estão sendo executados e obter detalhes sobre eles, tais como STATUS, horário de início de fim e qtde. de dados processados:
SQL>      select  operation, status, MBYTES_PROCESSED, start_time, end_time 
          from    V$RMAN_STATUS order by end_time desc;

      b) Para ver as configurações persistentes do RMAN, que podem incluir a política de retenção dos backup, locais de backups de datafiles e controlfiles, e muito mais:
SQL>      select * from V$RMAN_CONFIGURATION;
 
 
 
Por hoje é só!
Espero que tenha gostado e que este artigo lhe seja útil!

[]s
     

10 comentários:

  1. Olá Fábio, muito bom o artigo. Eu adicionaria duas coisas.
    - Quais informações do listener o DBA Jr precisa conhecer;
    - Quais informações da rede (servidor/clientes) são vitais;

    ResponderExcluir
  2. Bom dia, Fábio Prado

    Como sempre um ótimo artigo.

    valeu

    ResponderExcluir
  3. Show de bola estou revendo as aulas novamente parabens pelo treinamento

    ResponderExcluir
  4. Excelente artigo Fábio, parabéns.

    Estou olhando o MobaXterm, é bem interessante.

    ResponderExcluir

 

Suporte remoto alunos

Seguidores

Meu One Drive (antigo Sky Drive)