- Este tópico contém 7 respostas, 5 vozes e foi atualizado pela última vez 13 anos, 1 mês atrás por Regis Araujo.
-
AutorPosts
-
1 de dezembro de 2011 às 9:02 pm #101982GirinoParticipante
Boa Tarde a Todos.! 8)
Preciso de uma ajuda. 💡
Criei um job no oracle para executar de 5 em 5 minutos. Porém as vezes esse tempo não é suficiente para executar a procedure que insere dados em uma tabela e acaba locando a mesma e travando tudo.
Não tenho um tempo exato, depende as vezes do que esta sendo processado no servidor. Pode ser rápido ou não.
A minha pergunta é a seguinte: 😀
Dúvida 1:
Tem como eu definir um job para executar a todo momento assim que termine o job do processo anterior. Desse modo eu não teria que definir o tempo e ele só iniciaria o próximo job após o término do mesmo e não locaria a tabela.
Qualquer outra idéia seria bem vinda para resolver meu problema 💡
Muito Obrigado..!! 😉
Renato 😀
1 de dezembro de 2011 às 9:12 pm #101984felipegParticipanteDuas opções
Coloque, no final da primeira procedure, a criação do segundo JOB ou a procedure que este JOB chama.
Assim você sempre terá a certeza de que rodará só quando o primeiro terminar.
Atenciosamente,
Felipe.1 de dezembro de 2011 às 9:27 pm #101987GirinoParticipanteOlá Felipe..!! 8)
begin
sys.dbms_job.submit(job => :job,
what => ‘begin TESTE; END;’,
next_date => to_date(’01-12-2011 15:26:14′, ‘dd-mm-yyyy hh24:mi:ss’),
interval => ‘sysdate+5/1440’);
commit;
end;
/O Job acima executa a procedure TESTE de 5 em 5 minutos.
Como ficaria no exemplo que você passou.
Tenho dúvidas ainda..!!Obrigado..!! 😆
Renato
1 de dezembro de 2011 às 9:42 pm #101989felipegParticipanteGirino,
Você precisa que ao término da execução da procedure TESTE ele chame o segundo job correto?
Então, uma opção é:
– Criar uma sequence pro JobID
– No final da procedure de TESTE chamar o segundo job usando o isubmit
dbms_job.isubmit(job => , what => , next_date => sysdate);
Entendeu?
Outra opção é, caso seja uma procedure e sempre seja chamada, só usar a próxima procedure no final do bloco da procedure de TESTE.OBS: Com o scheduler é mais fácil de chamar 8)
Atenciosamente,
Felipe.1 de dezembro de 2011 às 9:48 pm #101990rmanParticipante@Girino
Se o seu ambiente tem Grid Control, use a função MultiJobs, pois consegue definir através dele execução de jobs posteriores caso o job antecessor execute com sucesso.Abraços,
Rodrigo Almeida
DBA Oracle
Outra solução, tudo é questão de abstração. Você tem 2 jobs que 1 depende do sucesso de outro, abstraindo você tem apenas 1 jobs com uma condição, não 2 jobs. 😆
1 de dezembro de 2011 às 9:51 pm #101991felipegParticipanteExato @Rman,
As vezes não consigo me fazer entender hehe
Atenciosamente,
Felipe.2 de dezembro de 2011 às 3:55 pm #102004David SiqueiraParticipanteFelipe/Rman
Caso você não possua no seu ambiente um GRID para auxilia-lo com essas criações, segue um liink que pode ajuda-lo a fazer de maneira manual a criação dos MULTIPLE JOB’s no banco.
http://docs.oracle.com/cd/B28359_01/server.111/b28310/scheduse002.htm
Abraço.
5 de dezembro de 2011 às 5:58 pm #102026Regis AraujoParticipanteSenhores.. boa noite..!
Bom.. antes de mais nada.. seria muito bom informar qual a sua versão de banco de dados..!!
Para este tipo de situação, também pode utilizar as CHAINS.. que são encadeamentos de jobs/procedimentos que vc configura para iniciarem após o retorno de algum outro job/procedimento, desta maneira você pode controlar todo o processo.. onde em caso de sucesso da execução do primeiro job.. ele inicia o segundo.. ou em caso de falha.. ele manda um aviso.. Ou seja.. vc configura regras para a execução de cada passo..
De uma lida sobre isto.. creio que pode lhe ajudar muito..!!
Abraços..!
-
AutorPosts
- Você deve fazer login para responder a este tópico.