Jobs schedulen in Oracle 10g met dbms_scheduler

Jobs schedulen in Oracle 10g met dbms_scheduler

In Oracle 10g is de DBMS_JOB package vervangen door de DBMS_SCHEDULER package. De DBMS_JOB package is nu uitgefaseerd en in Oracle 10g is deze er alleen nog voor backward compatibility. Vanaf Oracle 10g zou de DBMS_JOB package niet meer gebruikt moeten worden omdat deze in een volgende versie niet meer zal bestaan.

RECHTEN
SNEL STARTEN
PROGRAM
SCHEDULE
JOB
MONITORING


Met DBMS_SCHEDULER kunnen Oracle procedures en functions uitgeveord worden. Ook kunnen er binaire en shell-scripts gescheduled worden.

Rechten

Als je DBA rechten hebt, kan je alle scheduling uitvoeren.
Om job scheduling te kunnen administreren heb je de rechten nodig die bij de SCHEDULER_ADMIN role behoren.
Om jobs te maken en te runnen in je eigen schema, zal je het 'CREATE JOB' privilege moeten hebben.

Met DBMS_JOB was het nodig om een initialisatie parameter te zetten om een 'job coordinatie' achtergrond proces te starten. Met de Oracle 10g DBMS_SCHEDULER is dit niet meer nodig.

Als je resource plans en/of consumer groups wilt gebruiken, moet je een system parameter zetten:

ALTER SYSTEM SET RESOURCE_LIMIT = TRUE;


En dan nu snel van start!


Om een job snel running te krijgen kan je een code gebruiken als volgt:

begin
  dbms_scheduler.create_job(
      job_name => 'DEMO_JOB_SCHEDULE'
     ,job_type => 'PLSQL_BLOCK'
     ,job_action => 'begin package.procedure(''param_value''); end; '
     ,start_date => '01/10/2009 04:00 AM'
     ,repeat_interval => 'FREQ=DAILY'
     ,enabled => TRUE
     ,comments => 'Voorbeeld voor job schedule.');
end;
/


Dit scheduled een pl/sql block dat elke dag uitgeveord wordt beginnend  1/10/2009 04:00 AM.
Je kan op deze manier schedulen maar de DBMS_SCHEDULER kan componenten hergebruiken.

Je kan een schedule bouwen met gebruik van componenten zoals program, schedule, job, job class en window. We zullen deze componenten verder behandelen:

Program

Het program component representeerd program-code dat uitgevoerd kan worden. Deze program code kan parameters bevatten. 
Bijvoorbeeld:

begin
   dbms_scheduler.create_program (
       program_name => 'DEMO_JOB_SCHEDULE'
      ,program_type => 'STORED_PROCEDURE'
      ,program_action => 'package.procedure'
      ,number_of_arguments => 1
      ,enabled => FALSE
      ,comments => 'Voorbeeld voor job schedule.');
     
   dbms_scheduler.define_program_argument (
       program_name => 'DEMO_JOB_SCHEDULE'
      ,argument_position => 1
      ,argument_name => 'kol1'
      ,argument_type => 'VARCHAR2'
      ,default_value => 'default'
    );
    dbms_scheduler.enable(name => 'DEMO_JOB_SCHEDULE');
end;
/

De parameter program_type kan een van de volgende waarden hebben: 'PLSQL_BLOCK', 'STORED_PROCEDURE','EXECUTABLE'.
dbms_scheduler staat het ook toe om shell scripts (Windows: *.bat files) en executables uit te voeren.

Schedule

Een schedule definieerd de frequentie en datum/tijd specificaties van de start-tijd van de job.
Bijvoorbeeld:


begin
  dbms_scheduler.create_schedule( 
      schedule_name => 'DEMO_SCHEDULE'
    , start_date =>  '01/10/2009 22:00:00'
    , repeat_interval => 'FREQ=WEEKLY'
    , comments => 'Weekly at 22:00');
END;
/

Om het schedule te droppen:

begin
  dbms_scheduler.drop_schedule(
     schedule_name => 'DEMO_SCHEDULE'
     , force => TRUE );
end;
/


Kalender expressies kunnen een van de volgende waarden hebben: 

'Yearly','Monthly','Weekly','Daily','Hourly','Minutely','Secondely'


Job

Een job definieerd wanneer een specifieke taak zal starten. Dit kan door een program aan een of meerdere schedules te assignen ( of aan een bapaalde datum/tijd). Een job kan maar tot 1 job class behoren.
Bijvoorbeeld:


begin
  dbms_scheduler.create_job(
       job_name => 'DEMO_JOB1'
     , program_name =>'DEMO_JOB_SCHEDULE'
     , schedule_name =>'DEMO_SCHEDULE'
     , enabled => FALSE
     , comments => 'Run demo program every week at 22:00');

   dbms_scheduler.set_job_argument_value(
        job_name => 'DEMO_JOB1'
      , argument_position => 1
      , argument_value => 'param1');

   dbms_scheduler.enable('DEMO_JOB1');

   commit;   
end;
/


Of start een shell script

begin
   dbms_scheduler.create_job
   (
      job_name      => 'RUN_SHELL1',
      schedule_name => 'DEMO_SCHEDULE',
      job_type      => 'EXECUTABLE',
      job_action    => '/home/test/run_script.sh',
      enabled       => true,
      comments      => 'Run shell-script'
   );
end;
/


Het monitoren van job-scheduling 

Jobs kunnen gemonotored worden met de Oracle Enterprise Manager 10g. Het is ook mogelijk om een aantal views te gebruiken die zijn gemaakt in Oracle 10g. Hieronder een aantal views.

Laat details zien van geschedulde jobs:

select log_date
,      job_name
,      status
,      req_start_date
,      actual_start_date
,      run_duration
from   dba_scheduler_job_run_details;

 
 
Laat lopende jobs zien:

select job_name
,      session_id
,      running_instance
,      elapsed_time
,      cpu_used
from dba_scheduler_running_jobs;

Laat job history zien:
select log_date
,      job_name
,      status
from dba_scheduler_job_log;

Laat alle schedules zien:

select schedule_name, schedule_type, start_date, repeat_interval
from dba_scheduler_schedules;

Laat alle job met hun attributen zien:

select *
from dba_scheduler_jobs

Laat alle program-objects en hun atributen zien

select *
from dba_scheduler_programs;

Laat alle program-arguments zien:

select *
from   dba_scheduler_program_args;

 
 

Advertentie

>

Poll

Voorkeur
 

Wie is er aanwezig

We hebben 161 gasten online