Chpt 21: Automating Jobs

advertisement
CHAPTER 21
Automating Jobs
Introduction to Automating Jobs
• DBAs rely heavily on automating jobs.
• DBAs cannot be effective without automation.
• Listed next are a sample of tasks DBAs typically
automate:
• Shutdown and startup of databases and listeners
• Backups
• Validating the integrity of backups
• Checking for errors
• Removing old trace or log files
• Checking for errant processes
• Checking for abnormal conditions
Utilities to Automate
• Oracle Scheduler
• The Linux/Unix cron utility
• Others?
Creating and Scheduling a Job Using
Oracle Scheduler
• Use the CREATE_JOB procedure of the DBMS_SCHEDULER package
to create a job. Run the following as SYS (from the SQL*Plus):
•
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'RMAN_BACKUP',
job_type => 'EXECUTABLE',
job_action => '/orahome/oracle/bin/rmanback.bsh',
repeat_interval => 'FREQ=DAILY;BYHOUR=14;BYMINUTE=11',
start_date => to_date('21-OCT-10'),
job_class => '"DEFAULT_JOB_CLASS"',
auto_drop => FALSE,
comments => 'RMAN backup job',
enabled => TRUE);
END;
/
Viewing Job Details
• To view details about how a job is configured query the
DBA_SCHEDULER_JOBS view.
• This example selects information for the RMAN_BACKUP job:
•
SELECT
job_name
,last_start_date
,last_run_duration
,next_run_date
,repeat_interval
FROM dba_scheduler_jobs
WHERE job_name='RMAN_BACKUP';
Modifying Job Logging History
• By default Oracle Scheduler keeps 30 days worth of log history.
You can modify the default retention period via the
SET_SCHEDULER_ATTRIBUTE procedure.
• For example, this changes the default number of days to 15:
•
SQL> exec
dbms_scheduler.set_scheduler_attribute('log_history',15);
•
• To completely remove the contents of the log history, use the
PURGE_LOG procedure:
•
SQL> exec dbms_scheduler.purge_log();
Modifying a Job
• You can modify various attributes of a job via the
SET_ATTRIBUTE procedure.
• This example modifies the RMAN_BACKUP job to run
weekly on Monday:
•
BEGIN
dbms_scheduler.set_attribute(
name=>'RMAN_BACKUP'
,attribute=>'repeat_interval'
,value=>'freq=weekly; byday=mon');
END;
/
Stopping a Job
• If you have a job that has been running for an abnormally
long time, you may want to abort it.
• Use the STOP_JOB procedure to stop a currently running
job.
• This example stops the RMAN_BACKUP job while it is
running:
•
SQL> exec
dbms_scheduler.stop_job(job_name=>'RMAN_BACKUP');
Disabling a Job
• You may want to temporarily disable a job because it's not
running correctly or you may want to stop a job while
performing an upgrade or maintenance activity and so on.
• Use the DISABLE procedure to disable a job:
SQL> exec dbms_scheduler.disable('RMAN_BACKUP');
Enabling a Job
• You can enable a previously disabled job via the ENABLE
procedure of the DBMS_SCHEDULER package.
• This example re-enables the RMAN_BACKUP job:
SQL> exec
dbms_scheduler.enable(name=>'RMAN_BACKUP');
Copying a Job
• If you have a current job that you want to clone, you can
use the COPY_JOB procedure to accomplish this.
• This procedure takes two arguments: the old job name
and the new job name.
• Here's an example of copying a job where
RMAN_BACKUP is a previously created job and
RMAN_NEW_BACK is the new job that will be created:
•
begin
dbms_scheduler.copy_job('RMAN_BACKUP','RMAN_NEW
_BACK');
end;
/
Running a Job Manually
• You can manually run a job outside of its regular schedule. You
might want to do this to test the job to ensure that it's working
correctly.
• Use the RUN_JOB procedure to manually initiate a job.
• This example manually runs the previously created
RMAN_BACKUP job:
•
BEGIN
DBMS_SCHEDULER.RUN_JOB(
JOB_NAME => 'RMAN_BACKUP',
USE_CURRENT_SESSION => FALSE);
END;
/
•
Deleting a Job
• If you no longer require a job, you should delete it from
the scheduler.
• Use the DROP_JOB procedure to permanently remove a
job.
• This example removes the RMAN_BACKUP job:
•
BEGIN
dbms_scheduler.drop_job(job_name=>'RMAN_BACKUP');
END;
/
Oracle Scheduler Advantages over cron
• Can make the execution of a job dependent on the
•
•
•
•
•
•
completion of another job
Robust resource balancing and flexible scheduling
features
Can run jobs based on a database event
The Oracle Scheduler DBMS_SCHEDULER PL/SQL
package syntax works the same regardless of the
operating system
Can run status reports using the data dictionary
If working in clustered environment, no need to worry
about synchronizing multiple cron tables for each node in
the cluster
Can be maintained and monitored via Enterprise Manager
cron Advantages over Scheduler
• Easy to use, simple, tried and true; only takes seconds to
create and/or modify jobs
• Almost universally available on all Linux/Unix boxes; for
the most part, runs nearly identically regardless of the
Linux/Unix platform (yes, there are minor differences)
• Database agnostic; operates independently of the
database and works the same regardless of the database
vendor or database version
• Works whether the database is available or not
How cron Works
• When your Linux/Unix server boots up, a cron
background process is automatically started that
manages all cron jobs on the system.
• The cron background process is also known as the cron
daemon.
• This process is started on system startup by the
/etc/init.d/crond script.
• You can check to see whether the cron daemon process
is running with the ps command:
•
• $ ps -ef | grep crond | grep -v grep
• root
3049
1 0 Aug02 ?
00:00:00 crond
Enabling Access to cron
• To verify whether you have access to access cron type in the
following:
$ crontab -e
• If you receive the following error message, then you do not
have access:
You (oracle) are not allowed to use this program (crontab)
• To enable cron access, as the root user, add oracle to the
/etc/cron.allow file with the echo command:
# echo oracle >> /etc/cron.allow
Understanding cron Table Entries
• Your cron table is a list of numbers and commands that
the cron background process (cron daemon) will run at a
specified time and schedule.
• The crontab utility expects entries to follow a well-defined
format.
• You can add a comment line at the beginning of your
crontab file that documents the required format:
•
# min(0-59) hr(0-23) dayMonth(1-31) monthYear(1-12) dayWeek(0/7-6)
commandOrScript
0,30 8-16 * * 1-5 echo "wake up" | mailx -s "wake up" larry@oracle.com
Editing the cron Table Directly
• You can edit your cron table directly with the -e (editor)
option of the crontab command:
•
$ crontab -e
Loading the cron Table from a File
• The other way to modify your cron table is to load it
directly with a file name using the following syntax:
•
$ crontab <filename>
Redirecting cron Output
• Whenever you run a Linux shell command by default the
•
•
•
•
standard output (of the command) will be displayed on
your screen.
Also if any error messages are generated they will by
default be displayed on your terminal.
You can use either > or 1> (they are synonymous) to
redirect any standard output to an operating system file.
Additionally you can use 2> redirect any error messages
to a file.
The notation of 2>&1 instructs the shell to send any error
messages to the same location as standard output.
Troubleshooting cron
1.
2.
3.
4.
Copy your cron entry, paste it to the operating system command
line, and manually run the command. Often a slight typo in a
directory or file name can be the source of the problem.
If the script runs Oracle utilities, ensure that you source (set) the
required operating system variables within the script such as
ORACLE_HOME and ORACLE_SID. Oftentimes these variables
are set by startup scripts (like HOME/.bashrc) when you log on.
Since cron doesn’t run a user’s startup scripts, any required
variables must be set explicitly within the script.
Ensure that the first line of any shell scripts invoked from cron
specifies the name of the program that will be used to interpret the
commands within the script. For example, #!/bin/bash should be the
first entry in a Bash shell script. Since cron doesn’t run a user’s
startup scripts (like HOME/.bashrc), you can’t assume that your
operating system user’s default shell will be used to run a
command or script evoked from cron.
Ensure that the cron background process is running.
Examples of Automated DBA Jobs
• Starting and Stopping Database and Listener
• Checking for Archive Redo Destination Fullness
• Truncating Large Log Files
• Checking for Locked Production Accounts
• Checking for Files over a Certain Age
• Checking for Too Many Processes
• Verifying Integrity of RMAN Backups
• This can be a long list...
Summary
• In order to manage and maintain an environment with any
sort of complexity, DBAs must be proficient with
automating various jobs.
• Oracle’s Job Scheduler and the Linux/Unix cron utility are
two tools that DBAs commonly use to automate jobs.
• If you work in Linux/Unix environments, you should
become familiar with cron, it’s widely used.
Download