Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 29

14

Automating Tasks with the Scheduler

Copyright © 2006, Oracle. All rights reserved.


Key Comp.
Objectives & Steps
Schedules
Job Chains
Adv.Concepts

After completing this lesson, you should be able to:


• Simplify management tasks by using the
Scheduler
• Create a job, program, and schedule
• Monitor job execution
• Use a time-based or event-based schedule for
executing Scheduler jobs
• Use job chains to perform a series of related tasks
• Use advanced Scheduler concepts to prioritize
jobs

14-2 Copyright © 2006, Oracle. All rights reserved.


Simplifying Management Tasks

Performing a series Running a dequeue


Replicating table data
of month-end procedure as soon
via materialized
tasks on the last as a message is
day of each month enqueued view refreshes

Running a daily Computing table


job to back up and index statistics
database twice a day

Generating an Rebuilding an
Starting the batch
hourly report on index when
load as soon as the file invalid server finished rebuilding
arrives on the file system access attempts the current index

14-3 Copyright © 2006, Oracle. All rights reserved.


A Simple Job

WHEN

WHAT

14-4 Copyright © 2006, Oracle. All rights reserved.


Key Components and Steps

To simplify management tasks with the Scheduler,


perform the following steps:
1. Create a program.
2. Create and use a schedule.
3. Create and submit a job.
4. Monitor a job. Program Schedule
Job
attributes

Job

Arguments

14-5 Copyright © 2006, Oracle. All rights reserved.


1. Creating a Program

BEGIN
DBMS_SCHEDULER.CREATE_PROGRAM(
program_name => 'CALC_STATS2',
program_action =>
'HR.UPDATE_HR_SCHEMA_STATS',
program_type =>
'STORED_PROCEDURE',
enabled => TRUE);
END;
/

14-6 Copyright © 2006, Oracle. All rights reserved.


2. Creating and Using Schedules

BEGIN
DBMS_SCHEDULER.CREATE_SCHEDULE(
schedule_name => 'stats_schedule',
start_date => SYSTIMESTAMP,
end_date => SYSTIMESTAMP + 30,
repeat_interval =>
'FREQ=HOURLY;INTERVAL=1',
comments => 'Every hour');
END;
/

14-7 Copyright © 2006, Oracle. All rights reserved.


3. Creating and Running a Job

14-8 Copyright © 2006, Oracle. All rights reserved.


4. Monitoring a Job
SELECT job_name, status, error#, run_duration
FROM USER_SCHEDULER_JOB_RUN_DETAILS;

JOB_NAME STATUS ERROR# RUN_DURATION


---------------- ------ ------ ------------
GATHER_STATS_JOB SUCCESS 0 +000 00:08:20

PART_EXCHANGE_JOB FAILURE 6576 +000 00:00:00

14-9 Copyright © 2006, Oracle. All rights reserved.


Key Comp.
Using a Time-Based or & Steps
> Schedules
Event-Based Schedule Job Chains
Adv.Concepts

Schedule

Time Event

14-10 Copyright © 2006, Oracle. All rights reserved.


Creating a Time-Based Job

Example:
Create a job that calls a backup script every night
at 11:00, starting tonight.
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name=>'HR.DO_BACKUP',
job_type => 'EXECUTABLE',
job_action =>
'/home/usr/dba/rman/nightly_incr.sh',
start_date=> SYSDATE,
repeat_interval=>'FREQ=DAILY;BYHOUR=23',
/* next night at 11:00 PM */
comments => 'Nightly incremental backups');
END;
/

14-11 Copyright © 2006, Oracle. All rights reserved.


Creating an Event-Based Schedule

To create an event-based job, you must set:


• A queue specification (where your application
enqueues messages to start a job)
• An event condition (same syntax as an Oracle
Streams AQ rule condition) that if TRUE starts the
job
Oracle Database 10g

Scheduler

Event ADT
(Abstract
Application Queue
Data Type)

14-13 Copyright © 2006, Oracle. All rights reserved.


Creating Event-Based Schedules
with Enterprise Manager

14-14 Copyright © 2006, Oracle. All rights reserved.


Creating an Event-Based Job

Example: Create a job that runs if a batch load data file


arrives on the file system before 9:00 a.m.

BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name=>'ADMIN.PERFORM_DATA_LOAD',
job_type => 'EXECUTABLE',
job_action => '/home/usr/dba/rman/report_failure.sh',
start_date => SYSTIMESTAMP,
event_condition =>
event_condition => 'tab.user_data.object_owner
'tab.user_data.object_owner ==
''HR''
''HR'' and
and tab.user_data.object_name
tab.user_data.object_name == ''DATA.TXT''
''DATA.TXT''
and
and tab.user_data.event_type
tab.user_data.event_type == ''FILE_ARRIVAL''
''FILE_ARRIVAL''
and
and tab.user_data.event_timestamp
tab.user_data.event_timestamp << 99 ',
',
queue_spec
queue_spec =>=> 'HR.LOAD_JOB_EVENT_Q');
'HR.LOAD_JOB_EVENT_Q');
END;

14-15 Copyright © 2006, Oracle. All rights reserved.


Event-Based Scheduling

Event types:
• User- or application-generated events
• Scheduler-generated events
Events raised by Scheduler jobs:
• JOB_START • JOB_SCH_LIM_REACHED
• JOB_SUCCEEDED • JOB_DISABLED
• JOB_FAILED • JOB_CHAIN_STALLED
• JOB_BROKEN • JOB_ALL_EVENTS
• JOB_COMPLETED • JOB_RUN_COMPLETED
• JOB_STOPPED
Example of raising an event:
DBMS_SCHEDULER.SET_ATTRIBUTE('hr.do_backup',
'raise_events', DBMS_SCHEDULER.JOB_FAILED);

14-16 Copyright © 2006, Oracle. All rights reserved.


Creating Complex Schedules

INCLUDE EXCLUDE INTERSECT

14-18 Copyright © 2006, Oracle. All rights reserved.


Key Comp.
Creating Job Chains & Steps
Schedules
> Job Chains
Adv.Concepts

1. Create a chain object.


2. Define chain steps.
3. Define chain rules.
4. Starting the chain:
– Enable the chain.
– Create a job that points to the chain.

Job chain

Job

14-19 Copyright © 2006, Oracle. All rights reserved.


Example of a Chain

Dependency Scheduling

START
Job Load_data_evt 1 Do_bulk_load 2

Stop_when_
Schedule disk_full_evt
5 Rebuild_indx 3

Run_reports
END 4
(HR.GEN_REPORTS)
BULK_LOAD_CHAIN

14-21 Copyright © 2006, Oracle. All rights reserved.


1. Creating a Chain Object

Create_job_chain_1.jpg

1
2
3
4
5

14-22 Copyright © 2006, Oracle. All rights reserved.


2. Defining Chain Steps

DBMS_SCHEDULER.DEFINE_CHAIN_EVENT_STEP ( 1
chain_name => 'bulk_load_chain',
step_name => 'load_data_evt',
event_condition => 'tab.user_data.object_owner =
''HR'' and tab.user_data.object_name =
''DATA.TXT'' and tab.user_data.event_type =
''FILE_ARRIVAL'' ',
queue_spec => 'HR.LOAD_JOB_EVENT_Q');
DBMS_SCHEDULER.DEFINE_CHAIN_STEP ( 2
chain_name => 'bulk_load_chain',
step_name => 'do_bulk_load',
program_name => 'hr.load_data_prog);
DBMS_SCHEDULER.DEFINE_CHAIN_STEP (
3
chain_name => 'bulk_load_chain',
step_name => 'rebuild_indx',
program_name => 'hr.rebuild_indexes');

14-23 Copyright © 2006, Oracle. All rights reserved.


3. Defining Chain Rules

Create_job_chain_2.jpg

14-24 Copyright © 2006, Oracle. All rights reserved.


4. Starting the Chain

BEGIN
DBMS_SCHEDULER.ENABLE ('bulk_load_chain');
END;
/

BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'bulk_load_chain_job',
job_type => 'CHAIN',
job_action => 'bulk_load_chain',
repeat_interval => 'freq=daily;byhour=7;
byminute=5;bysecond=0',
enabled => TRUE);
END;
/

14-25 Copyright © 2006, Oracle. All rights reserved.


Monitoring Job Chains

[DBA | ALL | USER]_SCHEDULER_CHAINS


[DBA | ALL | USER]_SCHEDULER_CHAIN_RULES
[DBA | ALL | USER]_SCHEDULER_CHAIN_STEPS
[DBA | ALL | USER]_SCHEDULER_RUNNING_CHAINS

14-26 Copyright © 2006, Oracle. All rights reserved.


Key Comp.
Advanced Scheduler & Steps
Schedules
Concepts Job Chains
> Adv.Concepts

Resource Resource Window


consumer group plan group

Job chain Job class Window

Program Job Schedule

Arguments Arguments Time Event

14-27 Copyright © 2006, Oracle. All rights reserved.


Creating a Job Class

EXECUTE DBMS_SCHEDULER.CREATE_JOB_CLASS( -
job_class_name => 'ADMIN_JOBS', -
resource_consumer_group => 'DAYTIME_JOBS', -
logging_level => DBMS_SCHEDULER.LOGGING_OFF);

14-28 Copyright © 2006, Oracle. All rights reserved.


Creating a Window

Create a window for the month of December that uses


the END_OF_YEAR resource plan and is active every
night from 6:00 p.m. to 6:00 a.m. Eastern Standard
Time (EST).
BEGIN
DBMS_SCHEDULER.CREATE_WINDOW(
window_name => 'DEC_NIGHTS',
resource_plan => 'END_OF_YEAR',
start_date => '01-DEC-03 06.00.00 PM EST',
repeat_interval => 'FREQ=DAILY; BYHOUR=18',
duration => '0 12:00:00',
end_date => '31-DEC-03 06.00.00 AM EST',
comments => 'Every day at 6:00 PM');
END;
/

14-29 Copyright © 2006, Oracle. All rights reserved.


Prioritizing Jobs Within a Window

Job Priority

Job1 Job2 Job1 1


Job2 2
APPL_JOBS
Job3
Job3 3
OTHER
Job4 5
Job4 Job5
Job5 2
ADMIN_JOBS

Daytime window

14-30 Copyright © 2006, Oracle. All rights reserved.


Summary

In this lesson, you should have learned how to:


• Simplify management tasks by using the
Scheduler
• Create a job, program, and schedule
• Monitor job execution
• Use a time-based or event-based schedule for
executing Scheduler jobs
• Use job chains to perform a series of related tasks
• Use advanced Scheduler concepts to prioritize
jobs

14-31 Copyright © 2006, Oracle. All rights reserved.


Practice Overview:
Automating Tasks with the Scheduler

This practice covers the following topics:


• Creating a job that runs a program outside the
database
• Creating a program and a schedule
• Creating a job that uses a program and a schedule
• Altering the program and schedule for the job and
observing the behavior change of the job
• Monitoring job runs

14-32 Copyright © 2006, Oracle. All rights reserved.

You might also like