Apesar de muita pesquisa, não consigo encontrar uma solução para este problema que estamos tendo.
Nosso sistema permite que os usuários enviem determinados processos para serem executados em segundo plano enquanto continuam trabalhando. Esses processos são enviados como trabalhos usando DBMS_SCHEDULER e temos algumas classes de trabalho para processamento serial e paralelo, dependendo do trabalho que o usuário precisa fazer.
Quando desativamos o sistema para manutenção, paramos de executar tarefas e as inserimos novamente na fila e desativamos todas as tarefas agendadas. Isso é bom para uma janela de manutenção padrão, pois sem nosso sistema on-line, os usuários não podem enviar novos trabalhos. Após a manutenção, todos os trabalhos são reativados e todos ficam felizes.
No entanto, há momentos em que gostaríamos de poder desabilitar a fila enquanto o sistema ainda está ativo - geralmente para liberar alguns recursos nos horários de pico. A única coisa que podemos fazer no momento é desabilitar todos os trabalhos atualmente agendados, mas obviamente isso não impede que as pessoas enviem novos trabalhos para a fila.
Alguém sabe uma maneira de
- impedir que as pessoas entrem em trabalhos na fila
- forçar qualquer novo trabalho a ser inserido na fila em um estado desabilitado (opção preferencial)?
Muito obrigado antecipadamente
Não posso testá-lo agora, mas acho que você pode fazer isso abrindo/fechando a janela do agendador:
DBMS_SCHEDULER.create_window
. Esta janela pode ter uma duração de 24 horas e repetir-se todos os dias para que esteja sempre aberta.schedule_name
doDBMS_SCHEDULER.create_job
procedimento).DBMS_SCHEDULER.close_window
. Quando a manutenção estiver concluída, useDBMS_SCHEDULER.open_window
.Os trabalhos enviados enquanto a janela estiver fechada devem ser enfileirados e executados posteriormente quando a janela for aberta.
Você deve usar o Oracle Resource Manager para limitar a carga causada pelos trabalhos do agendador de forma que eles não interfiram com os usuários online.
Uma outra maneira de fazer esse tipo de troca é vincular seus trabalhos por meio de uma classe de trabalho a um serviço e desabilitar esse serviço. Veja Procedimento CREATE_JOB_CLASS
Isso também é muito conveniente se você deseja executar a importação de um banco de dados que possui tarefas habilitadas e não deseja que elas comecem a ser executadas no momento da importação ...