Trabalhar com sistemas distribuídos globalmente envolve lidar com diferentes fusos horários. No Oracle Database, o pacote DBMS_SCHEDULER fornece uma maneira eficaz de agendar trabalhos, levando em consideração o fuso horário. Este artigo discute como definir e alterar o fuso horário de um job no Oracle DBMS_SCHEDULER.
Definindo o fuso horário ao criar um job
Ao criar um job no Oracle DBMS_SCHEDULER, você pode especificar um fuso horário usando o parâmetro start_date
, que aceita um valor TIMESTAMP WITH TIME ZONE. Se um fuso horário for especificado, o job será executado de acordo com esse fuso horário.
Por exemplo, o seguinte comando cria um jobque é executado todos os dias às 14:00 no fuso horário ‘America/Sao_Paulo’:
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'meu_trabalho',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN NULL; END;',
start_date => TIMESTAMP '2023-07-17 14:00:00 America/Sao_Paulo',
repeat_interval => 'FREQ=DAILY;BYHOUR=14;',
end_date => NULL,
enabled => TRUE,
comments => 'Executa todos os dias às 14h.');
Alterando o fuso horário de um job existente
Para alterar o fuso horário de um job existente, você pode usar o procedimento DBMS_SCHEDULER.SET_ATTRIBUTE
para alterar o atributo start_date
do job. Primeiro, desabilite o job, modifique o atributo start_date
com o novo fuso horário, e depois reabilite o job .
Veja como fazer isso:
-- Desabilita o job
DBMS_SCHEDULER.DISABLE(
name => 'meu_trabalho');
-- Altera o fuso horário do job
DBMS_SCHEDULER.SET_ATTRIBUTE(
name => 'meu_trabalho',
attribute => 'start_date',
value => TIMESTAMP '2023-07-18 14:00:00 America/New_York');
-- Reabilita o job
DBMS_SCHEDULER.ENABLE(
name => 'meu_trabalho');
No exemplo acima, o job que foi originalmente definido para ser executado todos os dias às 14:00 no fuso horário ‘America/Sao_Paulo’ foi alterado para ser executado todos os dias às 14:00 no fuso horário ‘America/New_York’.
Importante: Esteja ciente de que a alteração do fuso horário desta maneira afetará a próxima execução do job . Portanto, se o job já tiver sido executado para o dia no antigo fuso horário, ele será executado novamente no novo fuso horário.