Buenas senhoritos e senhoritas.
Neste pequeno post, vou mostrar como alterar o horário do servidor (Linux) e refletir isto no Oracle. Tarefa que faz muitos administradores odiarem o horário de verão 🙂
Na realidade, partindo da versão 10g pra frente, o Oracle atualiza automaticamente o horário ao se alterar o servidor. Porém para bases 9i ou anteriores, você deverá reiniciar o banco para pegar as alterações.
ALTERANDO O HORÁRIO DO SERVIDOR
No exemplo abaixo, utilizarei o Oracle 10gr2 num Redhat.
Nosso horário:
Observe que o horário está ok tanto no oracle quanto no sistema operacional. Agora, vamos manter a sessão ativa e vamos alterar o horário do servidor.
Sem segredo, sem problemas. Neste caso.
Agora vamos a alguns problemas conhecidos de horário no Oracle.
1-ALTERANDO O /ETC/LOCALTIME
Pois bem, quando mudamos nosso localtime para apontar para uma nova zoneinfo, certamente teremos problemas na mudança de horários do Oracle.
Observe o que fiz com meu usuário ROOT:
E como ficou meu usuário no Oracle ( aquele que estava logado )?
O horário exibido pelo oracle ainda é o antigo.
Como resolver?
Simples, reinicie a aplicação que usa o Oracle. Pois ela está com a config de zona antiga.
2-VARIÁVEIS DE AMBIENTE TZ!
É normal alguns administradores exportarem ou copiarem scripts de login ( profile ) entre os servidores. O problema é se o script setar a variável TZ incorretamente.
Observe que no env do usuário oracle, ( aqueeeele que tava logado ) não possuia a variável TZ.
A data passou a ser 2h ao invés de 12.
Como resolver?
Basta remover o TZ ( export -n TZ ) ou setá-lo para refletir seu TIMEZONE atual, ou alterar a variável TIME_ZONE para refletir seu TIMEZONE.