REVISADO EM 01/02/2024
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. 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" |
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 sysdbaSQL> 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/oratabImagem 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 consultando o valor da coluna VERSION da visão V$INSTANCE.
Obs.: Em versões mais recentes do Oracle você também poderá descobrir a versão 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;
Obs.: Você também pode executar o comando SHOW 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 comando 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
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 comando 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 e membros, e se eles estão online:
SQL> SELECT GROUP, MEMBER, TYPE FROM V$LOGFILE;
8- Como descobrir onde estão os Control Files?
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.
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?
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?
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 seu retorno. 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?
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 SQLs 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;
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/controlfiles, e muito mais:
SQL> select * from V$RMAN_CONFIGURATION;
Para aprender mais consulte as próximas turmas dos treinamentos de
"Administração de Banco de Dados Oracle" que lecionamos na Oramaster!
Por hoje é só!
Espero que você tenha gostado e que este artigo lhe seja útil!
[]s
Olá Fábio, muito bom o artigo. Eu adicionaria duas coisas.
ResponderExcluir- Quais informações do listener o DBA Jr precisa conhecer;
- Quais informações da rede (servidor/clientes) são vitais;
Obrigado pelo feedback, já inclui as suas sugestões!
Excluir[]s
Bom dia, Fábio Prado
ResponderExcluirComo sempre um ótimo artigo.
valeu
Bruno, obrigado pelo feedback!
ExcluirMuito legal, parabéns!
ResponderExcluirOi Lilian, obrigado pelo comentário!
ResponderExcluirShow. Muito útil
ResponderExcluirShow de bola estou revendo as aulas novamente parabens pelo treinamento
ResponderExcluirMarcelo, obrigado pelo comentário!
ExcluirExcelente artigo Fábio, parabéns.
ResponderExcluirEstou olhando o MobaXterm, é bem interessante.
Diego, obrigado pelo feedback!
ExcluirBacana! Muito bom e ajudou! Parabéns!
ResponderExcluirObrigado pelo comentário e feedback!
ExcluirFábio, muito obrigado!!!!
ResponderExcluirIsso é um serviço de utilidade pública.
Parabéns a você, que constrói atalhos e nos ajuda muito.
Parabéns professor! Excelente artigo, muito obrigado.
ResponderExcluirRapaz, excelente artigo. Parabéns.
ResponderExcluir"Tudo que aprender com a vida, passe adiante, o conhecimento guardado não gera frutos."
Roger Stankewski
Agradeço os últimos comentários!
ResponderExcluirFábio Prado, seus posts tem ajudado demais meu caro... trabalho com oracle 19c e fico direto aqui buscando ajuda... parabéns...
ResponderExcluirReinaldo, obrigado pelo feedback!
Excluir