14 Copyright © 2006, Oracle. All rights reserved. Automating Tasks with the Scheduler.
-
Upload
poppy-crawford -
Category
Documents
-
view
220 -
download
2
Transcript of 14 Copyright © 2006, Oracle. All rights reserved. Automating Tasks with the Scheduler.
14Copyright © 2006, Oracle. All rights reserved.
Automating Tasks with the Scheduler
14-2 Copyright © 2006, Oracle. All rights reserved.
Objectives
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
Key Comp. & StepsSchedulesJob ChainsAdv.Concepts
14-3 Copyright © 2006, Oracle. All rights reserved.
Simplifying Management Tasks
Performing a seriesof month-end
tasks on the last day of each month
Replicating table datavia materializedview refreshes
Computing table and index statistics
twice a day
Generating an hourly report on
invalid server access attempts
Running a daily job to back up
database
Starting the batch load as soon as the file
arrives on the file system
Running a dequeueprocedure as soon
as a message isenqueued
Rebuilding an index when
finished rebuilding the current index
14-4 Copyright © 2006, Oracle. All rights reserved.
A Simple Job
WHAT
WHEN
14-5 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.
Arguments
Job
Program Job attributes
Schedule
14-6 Copyright © 2006, Oracle. All rights reserved.
1. Creating a Program
BEGINDBMS_SCHEDULER.CREATE_PROGRAM( program_name => 'CALC_STATS2', program_action => 'HR.UPDATE_HR_SCHEMA_STATS', program_type => 'STORED_PROCEDURE', enabled => TRUE);END;/
14-7 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-8 Copyright © 2006, Oracle. All rights reserved.
3. Creating and Running a Job
14-9 Copyright © 2006, Oracle. All rights reserved.
4. Monitoring a Job
SELECT job_name, status, error#, run_durationFROM 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-10 Copyright © 2006, Oracle. All rights reserved.
Using a Time-Based or Event-Based Schedule
Schedule
EventTime
Key Comp. & Steps
> SchedulesJob ChainsAdv.Concepts
14-11 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-13 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
Data Type) QueueApplication
14-14 Copyright © 2006, Oracle. All rights reserved.
Creating Event-Based Scheduleswith Enterprise Manager
14-15 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 => 'tab.user_data.object_owner = ''HR'' and tab.user_data.object_name = ''DATA.TXT'' and tab.user_data.event_type = ''FILE_ARRIVAL'' and tab.user_data.event_timestamp < 9 ', queue_spec => 'HR.LOAD_JOB_EVENT_Q');END;
event_condition => 'tab.user_data.object_owner = ''HR'' and tab.user_data.object_name = ''DATA.TXT'' and tab.user_data.event_type = ''FILE_ARRIVAL'' and tab.user_data.event_timestamp < 9 ', queue_spec => 'HR.LOAD_JOB_EVENT_Q');
14-16 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-18 Copyright © 2006, Oracle. All rights reserved.
Creating Complex Schedules
INCLUDE EXCLUDE INTERSECT
14-19 Copyright © 2006, Oracle. All rights reserved.
Creating Job Chains
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
Job chain
Key Comp. & StepsSchedules
> Job ChainsAdv.Concepts
14-21 Copyright © 2006, Oracle. All rights reserved.
Example of a Chain
BULK_LOAD_CHAIN
Do_bulk_loadJob Load_data_evt
END
Rebuild_indxScheduleStop_when_
disk_full_evt
Run_reports (HR.GEN_REPORTS)
START1 2
5 3
4
Dependency Scheduling
14-22 Copyright © 2006, Oracle. All rights reserved.
1. Creating a Chain Object
Create_job_chain_1.jpg
12345
14-23 Copyright © 2006, Oracle. All rights reserved.
2. Defining Chain Steps
DBMS_SCHEDULER.DEFINE_CHAIN_EVENT_STEP ( 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 ( chain_name => 'bulk_load_chain', step_name => 'do_bulk_load', program_name => 'hr.load_data_prog); DBMS_SCHEDULER.DEFINE_CHAIN_STEP ( chain_name => 'bulk_load_chain', step_name => 'rebuild_indx', program_name => 'hr.rebuild_indexes');
1
2
3
14-24 Copyright © 2006, Oracle. All rights reserved.
3. Defining Chain Rules
Create_job_chain_2.jpg
14-25 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-26 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-27 Copyright © 2006, Oracle. All rights reserved.
Advanced Scheduler Concepts
JobProgram
Arguments Arguments
Schedule
EventTime
Job class WindowJob chain
Key Comp. & StepsSchedulesJob Chains
> Adv.Concepts
Resourceconsumer group
Windowgroup
Resourceplan
14-28 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-29 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-30 Copyright © 2006, Oracle. All rights reserved.
Prioritizing Jobs Within a Window
Daytime window
APPL_JOBS
Job1 Job2
ADMIN_JOBS
Job4 Job5
OTHER
Job3
2Job5
5Job4
3Job3
2Job2
1Job1
PriorityJob
14-31 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-32 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