Script para garantir que apenas uma instância do Oracle esteja em execução

1

Sou um DBA Oracle e preciso de sugestões para entender uma situação estranha que surgiu hoje.

Um dos nossos trabalhos de DBA falhou dizendo 'Already its running' do planejador Tivoli. No entanto, esse não é o caso. Executando uma vez, mas sem saber por que o UNIX criando 2 processos simultaneamente e causando a falha do trabalho.

Minha análise:

Executei o job abaixo do meu ID do UNIX e crie 2 processos. Não tenho certeza porque sua criação (OS -AIX 6.1).

$sudo su - oracle -c /tmp/dba_audit_cleanup.sh

1) pandas5 20578520 9109824 0 12:08:03 pts / 4 0:00 sudo su - oracle -c /tmp/dba_audit_cleanup.sh
2) oracle 36241502 20578520 0 12:08:03 pts / 4 0:00 / bin / ksh /tmp/dba_audit_cleanup.sh

3) oracle 28180512 36241502 0 12:08:12 pts / 4 0:00 grep dba_audit_cleanup.sh

CÓDIGO:

IsJobRunning()
{
if [[ $DEBUG -ne 0 ]]
then
set -x
fi

if [ 'ps -ef | grep $PROGNAME | grep -v grep | wc -l' -ne 1 ]
then
return 1
else
return 0
fi
}

# MAIN
################################################################################

if IsJobRunning
then
continue
else
print " $PROGNAME is already running on this node "
exit 0
    
por Sid 16.03.2016 / 17:32

1 resposta

1

O comportamento que você está vendo está correto. O primeiro processo é o que pertence a pandas5 , executando a parte sudo su - oracle . O segundo processo é aquele que executa o comando dba_audit_cleanup.sh real como o usuário oracle. O problema está na verificação de execução de processos dentro do próprio script - da maneira como você o escreveu, ele sempre captará os dois processos e, portanto, sempre falhará dessa maneira. Sua melhor aposta é escrever um arquivo PID ou alguma outra forma de arquivo de sinalização no início do script, verificá-lo durante o script e, de alguma forma, certificar-se de que o processo que está executando a verificação é o único a ser executado e, em seguida, removê-lo no final do script. Ou, verifique o arquivo pid, saia se ele for encontrado, se não for encontrado, crie-o e, em seguida, remova-o no final do script.

    
por 16.03.2016 / 17:49