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.