Como criar um Job Scheduler no Oracle 12c
O exemplo 12c Scheduler a Oracle aqui cria um trabalho simples que executa um procedimento armazenado Programming Language / Structured Query Language (PL / SQL). O procedimento seleciona uma contagem do número de usuários no sistema e insere esse número em uma tabela com um timestamp. Ele é executado a cada cinco minutos.
Siga estes passos para agendar uma tarefa pela primeira vez:
Entrar e SQL * Plus como o usuário SYS.
Dê o criador de emprego destina-se a capacidade de criar postos de trabalho:
Você deve ver o seguinte:
Grant conseguiu.
Este exemplo de trabalho é criado e executado por HR.
Vamos HR veja a tabela V $ SESSION:
Você deve ver o seguinte:
Grant conseguiu.
O _ em V_ $ SESSION não é um erro de digitação! V $ SESSION é um sinônimo para V_ $ SESSION. Para a concessão para o trabalho, você tem que dar o nome da visão.
Entrar e SQL * Plus como o criador de emprego e fazer uma tabela para armazenar os dados:
lt; criar USER_COUNT mesa (NUMBER_OF_USERS NÚMERO (4), TIME_OF_DAY timestamp) TABLESPACE usuários->
Você vê isso:
Tabela criado.
Criar um procedimento armazenado:
lt; CRIAR OU SUBSTITUIR Processo Número insert_user_count ASv_user_count (4) contagem -BEGINSELECT (*) INTO v_user_countFROM v $ sessionWHERE nome de usuário não é nula a inserir user_countVALUES INTO (v_user_count, SYSTIMESTAMP) -commit-END insert_user_count- />
O procedimento armazenado reúne o número de usuários e insere-los para a mesa com um timestamp. Você deve ver o seguinte:
Processo criado.
Criar um programa para o trabalho:
lt; BEGINDBMS_SCHEDULER.CREATE_PROGRAM (program_name => 'PROG_INSERT_USER_COUNT', program_action => 'INSERT_USER_COUNT', program_type => 'STORED_PROCEDURE') - END - />
Você vê isso:
Procedimento PL / SQL concluído com êxito.
Ativar o programa:
Você vê isso:
Procedimento PL / SQL concluído com êxito.
Criar um cronograma para a execução do trabalho:
lt; BEGINDBMS_SCHEDULER.CREATE_SCHEDULE (schedule_name => 'my_weekend_5min_schedule', start_date => SYSTIMESTAMP, repeat_interval => 'FREQ = MINUTELY- INTERVALO = 5- BYDAY = SAT, SUN', end_date => SYSTIMESTAMP + INTERVALO '30' dia, os comentários => ' A cada 5 minutos ') - END - />
Este exemplo de trabalho é executado a cada cinco minutos. Você vê isso:
Procedimento PL / SQL concluído com êxito.
Criar o seu trabalho com o programa e agendar você definiu:
lt; BEGINDBMS_SCHEDULER.CREATE_JOB (job_name => 'my_user_count_job', program_name => 'prog_insert_user_count', schedule_name => 'my_weekend_5min_schedule') - END - />
Você vê isso:
Procedimento PL / SQL concluído com êxito.
Ativar o seu trabalho para ser executado dentro do cronograma definido:
lt; dbms_scheduler.enable exec ( 'my_user_count_job')>
Você vê isso:
Procedimento PL / SQL concluído com êxito.
O trabalho é executado no horário de início especificado (pelo SYSTIMESTAMP). Se você escolher uma data do calendário no futuro, ele não iniciar até então.
Depois que o trabalho foi executado por 17 minutos, digite o seguinte para ver a sua tabela USER_COUNT:
lt; select * from user_count->
Você vê isso:
NUMBER_OF_USERS TIME_OF_DAY --------------- --------------------------------- 14-09-AUG 13 02.15.14.118495 PM14 09-AUG-13 02.00.14.137300 PM13 09-AUG-13 02.05.14.120116 PM13 09-AUG-13 02.10.14.120680 PM
Quando você tem o trabalho em execução, você pode obter detalhes sobre o sucesso ou fracasso, consultando as seguintes exibições:
USER_SCHEDULER_JOB_RUN_DETAILSUSER_SCHEDULER_JOB_LOG
Estes pontos de vista mostrar apenas informações sobre seus trabalhos. Para obter informações sobre as recentes execuções de nosso trabalho, faça o login como o criador de emprego e tipo
lt; job_name select, status, run_duration, cpu_usedfrom USER_SCHEDULER_JOB_RUN_DETAILSwhere job_name = 'MY_USER_COUNT_JOB' ->
Você vê isso:
JOB_NAME STATUS RUN_DURATION CPU_USED -------------------- ---------- --------------- - ----------------- MY_USER_COUNT_JOB SUCCEEDED +000 00:00:00 000 00: 00: 00.01MY_USER_COUNT_JOB SUCCEEDED +000 00:00:00 000 00: 00: 00.01MY_USER_COUNT_JOB SUCCEEDED +000 00:00:00 000 00: 00: 00.00MY_USER_COUNT_JOB SUCCEEDED +000 00:00:00 000 00: 00: 00.01