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.
RechtenAls 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: ProgramHet 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. ScheduleEen 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;
|