Artigo SQL Magazine 69 - Monitorando um Banco de Dados Oracle

Veja a criação de scripts para monitoramento de banco de dados Oracle.

Atenção: esse artigo tem uma palestra complementar. Clique e assista!

De que se trata o artigo?

Criação de scripts para monitoramento de banco de dados Oracle.

Para que serve?

Scripts que ajudarão o DBA na detecção pró-ativa de possíveis problemas com o banco de dados, bem como verificar o estado atual do backup, saúde geral do banco de dados, etc.

Em que situação o tema é útil?

Uma das tarefas cruciais do DBA é a verificação constante da situação geral do banco de dados. Os scripts criados neste artigo ajudarão nesta tarefa do dia-a-dia, enviando e-mails para o DBA informando a situação geral do banco de dados.

Uma das tarefas mais importantes de qualquer administrador de banco de dados é justamente a tarefa de monitorar o banco de dados para detectar, de maneira pró-ativa, possíveis problemas que possam comprometer a aplicação devido a falhas no banco de dados.

Dentro desta tarefa de monitoramento, o DBA deverá verificar diariamente os arquivos de log do banco de dados (Alert.log, arquivos de trace, etc.), verificar se o backup foi executado com sucesso, conferir o estado geral de performance, áreas de memória, etc.

Sem dúvida nenhuma, esta é uma tarefa que demanda tempo e deve ser encarada como o "café da manhã" do DBA. Uma das primeiras coisas que faço diariamente é esta verificação. A grande questão é a quantidade de bancos de dados que você administra. Caso administre um ou dois bancos de dados, esta tarefa não será tão maçante, mas como na maioria dos casos (incluindo o meu), o número de bancos de dados que o DBA é responsável é considerável e conectar-se ao servidor de cada um dos bancos de dados e efetuar uma verificação detalhada poderá consumir, em alguns casos, mais do que a manhã inteira, sem contar na quantidade de e-mails de usuários, desenvolvedores, gerentes, etc. que temos que responder.

Agora imagine uma situação em que, ao chegar na empresa ou mesmo ligar o notebook em casa, você já verifique a caixa de entrada de seu e-mail e já veja, logo de cara, e-mails enviados pelos servidores de banco de dados lhe passando todas as informações que citamos acima. Com certeza é algo que lhe poupará um bocado de tempo e lhe permitirá utilizar o seu tempo de maneira muito mais produtiva e eficiente, "atacando" os problemas de maneira eficaz.

É justamente este ponto que irei atacar neste artigo, criando uma série de scripts que, quando "instalados" no servidor de banco de dados, auxiliarão muito o DBA.

Definindo o ambiente

A primeira coisa a ser feita sempre que algum script precisa ser executado é definir todas as variáveis de ambiente, e neste arquivo iremos abordar apenas os sistemas operacionais UNIX e Linux.

Existem duas formas para se definir todas as variáveis de ambiente necessárias para a execução de um script:

1. Definir todas as variáveis necessárias "dentro" do próprio script;

2. Criar um arquivo de definição do ambiente e "chamá-lo" no script.


Neste artigo irei utilizar a segunda opção, pois ela traz enormes vantagens, como por exemplo, quando algum valor deve ser modificado em função de upgrade do banco de dados ou até mesmo o e-mail do DBA que irá receber o relatório.

Irei criar um arquivo com o nome de .dba.env, isso mesmo, iniciando com um ponto (.) e com a extensão .env. Ao iniciar o nome do arquivo com um ponto, definimos que o mesmo se trata de um arquivo oculto e que não será listado por um simples comando ls –l, precisaremos utilizar uma opção a mais no comando, ou seja, teremos que usar ls –la.

Este arquivo deve ser criado no diretório home do usuário oracle no servidor de banco de dados. O padrão é o diretório /home/oracle.

A Listagem 1 apresenta o conteúdo do arquivo .dba.env.

Listagem 1. Conteúdo do arquivo .dba.env.

1. # Este arquivo tem o proposito de definir todas as variaveis 2. # de ambiente necessarias relativas a instancia de banco de 3. # dados oracle 4. oratab_list="/var/opt/oracle/oratab /etc/oratab" 5. FOUND=FALSE 6. if [[ $# -eq 1 ]] 7. then 8. export ORACLE_SID=$1 9. for oratab in $oratab_list 10. do 11. if [ -f $oratab ]; then 12. FOUND="TRUE" 13. break 14. fi 15. done 16. if [ "$FOUND" = "TRUE" ]; then 17. export ORACLE_HOME=`grep "$ORACLE_SID:" $oratab |cut -f2 -d':'` 18. export ORACLE_BASE="/`echo $ORACLE_HOME |cut -f2,3 -d'/'`" 19. export SHLIB_PATH=$ORACLE_HOME/lib:/usr/lib 20. export LD_LIBRARY_PATH=$ORACLE_HOME/lib 21. export TNS_ADMIN=$ORACLE_HOME/network/admin 22. export PATH=$ORACLE_HOME/bin:/usr/ccs/bin:$PATH 23. else 24. echo Nao foi possivel encontrar informacoes relativas ao ORACLE_HOME 25. exit 1 26. fi 27. else 28. export ORACLE_SID="" 29. export ORACLE_HOME="" 30. export ORACLE_BASE=/oracle 31. fi 32. export MAIL_LIST="ricardo@sqlmagazine.com.br" 33. export MAIL_PGM="/usr/bin/mailx" 34. export COMPRESS_PGM="/usr/contrib/bin/gzip" 35. export EXCLUDE_OWNER="('SYS', 'SYSTEM', 'OUTLN', 'PERFSTAT', 'DBSNMP')"

Vamos entender o que acontece neste primeiro script. A linha 4 define uma variável chamada oratab_list, que irá armazenar uma lista com as possíveis localizações do arquivo oratab (Nota DevMan 1). Por padrão, no Sun Solaris, o arquivo oratab é o /var/opt/oracle/oratab. Já no HP-UX, AIX e Linux o arquivo oratab é o /etc/oratab.

Caso o padrão de sua empresa seja o de colocar o arquivo oratab em outra localização, basta adicionar na lista do oratab_list.

Nota DevMan 1. O arquivo oratab.

O oratab é um arquivo criado pelo Oracle quando o software do banco de dados é instalado. Originalmente, o oratab era usado pelo SQL*Net V1, mas atualmente ele é utilizado para listar os bancos de dados e versões dos softwares de banco de dados instalados no servidor.

O arquivo oratab pode conter comentários, sempre iniciados pelo símbolo sustenido (#) e cada linha fará referência a informações de cada banco de dados instalado no servidor e o formato é:

ORACLE_SID:ORACLE_HOME:Y|N

Como por exemplo:

SQLMAG:/oracle/u01/software/rdbms/11.0.1:Y

ORACLE_SID é o system ID da instância do banco de dados;

ORACLE_HOME é o diretório de instalação do software de banco de dados associado à instância;

Y\N indica se a instância deve ser inicializada automaticamente após um boot do servidor (Y=sim, N=não).

Na linha 5 foi criada uma variável chamada FOUND que recebe o valor FALSE, que será usada para definir se o arquivo oratab foi ou não encontrado. Veremos esta variável novamente adiante.

A linha 6 inicia um desfio condicional (if) verificando se o número de argumentos enviados ao script ($#) é igual a 1 e, caso sim, define a variável ORACLE_SID com o valor do primeiro argumento passado para o script ($1).

Ainda dentro do desvio condicional, a linha 9 inicia um loop do tipo "

[...] continue lendo...

Artigos relacionados