Oracle DBMS_SCHEDULER
This comprehensive guide covers Oracle's DBMS_SCHEDULER management in SQLife.
Table of Contents
- Overview
- Opening Oracle Scheduler
- Scheduler Interface
- Job Management
- Schedule Management
- Program Management
- Window Management
- Window Group Management
- Chain Management
- Job Log Querying
- Tips and Best Practices
- Troubleshooting
Overview
Oracle's DBMS_SCHEDULER is a powerful enterprise scheduler that replaces the legacy DBMS_JOB package. SQLife provides a comprehensive GUI for managing all aspects of the scheduler.
Key Concepts
Job:
- The main schedulable unit
- Combines what to run (program/action) with when to run (schedule)
- Can be enabled/disabled
Schedule:
- Defines when to run jobs
- Can be reused across multiple jobs
- Various repeat intervals supported
Program:
- Defines what to run
- PL/SQL block, stored procedure, or executable
- Can be reused across multiple jobs
Window:
- Time period for resource management
- Allocates resources for certain times
- Can have different priority levels
Window Group:
- Collection of windows
- Simplifies window management
- Used with jobs
Why Use DBMS_SCHEDULER
Advantages over DBMS_JOB:
- More flexible scheduling
- Job chains and dependencies
- Resource management
- Better monitoring and logging
- Event-based scheduling
Use Cases:
- Nightly batch processes
- Regular data updates
- Report generation
- Database maintenance
- Data warehouse ETL
Opening Oracle Scheduler
Prerequisites:
- Oracle database connection
- Oracle 10g or later
- Sufficient privileges (CREATE JOB or DBA role)
How to Open:
- Connect to Oracle database
- Go to Database → Oracle Scheduler
- Oracle Scheduler window opens
Interface Appears:
- Left panel: Tree view of objects
- Right panel: Details and forms
- Bottom panel: Job logs
Scheduler Interface
Tree View (Left Panel): Hierarchical view of scheduler objects:
- 📋 Jobs
- 📅 Schedules
- ⚙️ Programs
- 🪟 Windows
- 📁 Window Groups
Details Panel (Right Panel): Shows details for selected object:
- Properties
- Settings
- Status information
Action Buttons:
- Create: Create new object
- Delete: Remove selected object
- Refresh: Reload list
- Enable/Disable: Toggle object state
- Run Now: Execute job immediately
Job Management
Viewing Jobs
Jobs Tree:
- Click Jobs folder to expand
- Lists all jobs in your schema
- Shows job name and status
Job Status Icons:
- ✓ Enabled: Job active
- ⊘ Disabled: Job inactive
- ⏸ Paused: Temporarily suspended
- ⚠ Broken: Job has errors
Job Information Displayed:
- Job Name
- Enabled/Disabled status
- Schedule name
- Program name
- Next run date
- Last run date
- Run count
Creating Jobs
How to Create Job:
- Click Jobs folder
- Click Create Job button
- Job creation dialog opens
Job Creation Form:
Basic Information:
-
Job Name: Unique name (e.g.,
NIGHTLY_BACKUP_JOB)- Must follow Oracle naming rules
- Up to 30 characters
- Letters, numbers, underscores
-
Job Type: Choose one:
- PL/SQL Block: Inline PL/SQL code
- Stored Procedure: Call existing procedure
- Executable: Run OS command/script
- Use Program: Reference existing program
Job Action (if not using program):
For PL/SQL Block:
BEGIN
-- Your PL/SQL code here
DBMS_OUTPUT.PUT_LINE('Job executed');
-- Example: Cleanup old records
DELETE FROM log_table WHERE log_date < SYSDATE - 30;
COMMIT;
END;
For Stored Procedure:
-- Procedure name only
my_package.my_procedure
-- Or with parameters
my_procedure(p_param1 => 'value1')
Schedule Options:
Option 1: Use Existing Schedule
- Select from schedule dropdown
- Reuses predefined schedule
Option 2: Define Inline Schedule
- Start Date: When job should first run
- Repeat Interval: How often to repeat
- Examples:
FREQ=DAILY; BYHOUR=2; BYMINUTE=0 FREQ=HOURLY; INTERVAL=4(every 4 hours)
- Examples:
- End Date: When to stop (optional)
Option 3: One-Time Job
- Set start date only
- No repeat interval
- Runs once
Additional Options:
- Enabled: Start enabled or disabled
- Auto Drop: Delete after completion (one-time jobs)
- Comments: Job description
Example Job:
Job Name: CLEANUP_OLD_LOGS
Job Type: PL/SQL Block
Job Action: BEGIN DELETE FROM logs WHERE created < SYSDATE-90; COMMIT; END;
Schedule: Every day at 2 AM
Start Date: 2025-12-21 02:00:00
Repeat Interval: FREQ=DAILY; BYHOUR=2; BYMINUTE=0
Enabled: Yes
After Creation:
- Job appears in jobs list
- Status shown (Enabled/Disabled)
- Next run date calculated
Job Details
Viewing Job Details:
- Click job in tree
- Details panel shows:
General Tab:
- Job name
- Owner
- Job class
- Enabled/Disabled
- Auto drop setting
- Comments
Schedule Tab:
- Schedule name (if using schedule)
- Start date
- Repeat interval
- End date
- Next run date
- Last run date
Action Tab:
- Job type
- Job action (code or procedure name)
- Program name (if using program)
- Number of arguments
Statistics Tab:
- Run count
- Failure count
- Last run duration
- Average run duration
Refresh Details:
- Click Refresh button
- Updates with latest information
Running Jobs Manually
Run Job Immediately:
- Select job in tree
- Click Run Now button
- Or right-click job → Run Now
- Confirmation prompt appears
- Job executes immediately
What Happens:
- Job runs regardless of schedule
- Does not affect next scheduled run
- Status updates in real-time
- Check job log for results
Use Cases:
- Testing new job
- Emergency data fix
- Verify job works before scheduling
Enabling/Disabling Jobs
Disable Job:
- Select enabled job
- Click Disable button
- Or right-click → Disable
- Job status changes to disabled
- Will not run on schedule
Enable Job:
- Select disabled job
- Click Enable button
- Or right-click → Enable
- Job status changes to enabled
- Will run per schedule
Use Cases:
- Disable: During maintenance, testing, or temporary suspension
- Enable: Resume normal operation
Deleting Jobs
How to Delete:
- Select job in tree
- Click Delete button
- Or right-click → Delete Job
- Confirmation prompt:
"Are you sure you want to delete job JOB_NAME?"
- Click Yes to confirm
Options:
- Force: Drop even if running
- Commit: Commit immediately (default)
What Gets Deleted:
- Job definition
- Job logs (if configured)
- Job does NOT run again
Important:
- Cannot be undone
- Backup job definition if needed
- Consider disabling instead of deleting
Schedule Management
Viewing Schedules
Schedules Tree:
- Click Schedules folder
- Lists all schedules
- Shows schedule name and frequency
Schedule Information:
- Schedule name
- Start date
- Repeat interval
- End date
- Number of jobs using this schedule
Creating Schedules
How to Create Schedule:
- Click Schedules folder
- Click Create Schedule button
- Schedule creation dialog opens
Schedule Form:
Basic Information:
- Schedule Name: Unique name (e.g.,
DAILY_2AM) - Comments: Description (optional)
Timing:
- Start Date: When schedule becomes active
- End Date: When schedule expires (optional)
- Repeat Interval: How often to repeat
Schedule Types
Daily:
FREQ=DAILY
FREQ=DAILY; BYHOUR=2; BYMINUTE=0 -- Every day at 2:00 AM
FREQ=DAILY; BYHOUR=2,14; BYMINUTE=0 -- Every day at 2 AM and 2 PM
Weekly:
FREQ=WEEKLY; BYDAY=MON,WED,FRI -- Mon, Wed, Fri
FREQ=WEEKLY; BYDAY=MON; BYHOUR=9 -- Monday at 9 AM
Monthly:
FREQ=MONTHLY; BYMONTHDAY=1 -- First day of month
FREQ=MONTHLY; BYMONTHDAY=1,15 -- 1st and 15th
FREQ=MONTHLY; BYDAY=MON; BYSETPOS=1 -- First Monday
FREQ=MONTHLY; BYDAY=FRI; BYSETPOS=-1 -- Last Friday
Hourly:
FREQ=HOURLY -- Every hour
FREQ=HOURLY; INTERVAL=4 -- Every 4 hours
FREQ=HOURLY; BYHOUR=9,10,11,14,15,16 -- Business hours
Minutely:
FREQ=MINUTELY; INTERVAL=15 -- Every 15 minutes
FREQ=MINUTELY; INTERVAL=30 -- Every 30 minutes
Yearly:
FREQ=YEARLY; BYMONTH=JAN; BYMONTHDAY=1 -- Every January 1st
FREQ=YEARLY; BYMONTH=DEC; BYMONTHDAY=31-- Every December 31st
Complex Examples:
-- Weekdays at 8 AM
FREQ=DAILY; BYDAY=MON,TUE,WED,THU,FRI; BYHOUR=8; BYMINUTE=0
-- First Monday of each quarter
FREQ=MONTHLY; BYMONTH=JAN,APR,JUL,OCT; BYDAY=MON; BYSETPOS=1
-- Every 10 minutes during business hours on weekdays
FREQ=MINUTELY; INTERVAL=10; BYHOUR=9,10,11,12,13,14,15,16,17;
BYDAY=MON,TUE,WED,THU,FRI
Schedule Details
Viewing Schedule Details:
- Click schedule in tree
- Details panel shows:
Information:
- Schedule name
- Owner
- Start date
- End date (if set)
- Repeat interval (decoded)
- Next run dates (calculated preview)
Jobs Using This Schedule:
- List of jobs
- Click to navigate to job
Deleting Schedules
How to Delete:
- Select schedule
- Click Delete button
- Confirmation prompt appears
- Click Yes
Important:
- Cannot delete if jobs are using it
- Disable or reassign jobs first
- Or delete jobs using this schedule
Program Management
Viewing Programs
Programs Tree:
- Click Programs folder
- Lists all programs
- Shows program name and type
Program Types:
- PL/SQL Block
- Stored Procedure
- Executable (OS command)
Creating Programs
How to Create Program:
- Click Programs folder
- Click Create Program button
- Program creation dialog opens
Program Form:
Basic Information:
- Program Name: Unique name (e.g.,
BACKUP_PROGRAM) - Program Type: Select type
- Enabled: Create enabled or disabled
- Comments: Description
Program Action:
For PL/SQL Block:
BEGIN
-- Your reusable PL/SQL code
my_package.backup_procedure;
END;
For Stored Procedure:
my_schema.my_procedure_name
For Executable:
/usr/local/bin/backup_script.sh
Arguments (if needed):
- Define arguments for program
- Argument name, type, default value
- Used when calling program
Program Types
PL/SQL Block Program:
- Contains inline PL/SQL code
- Best for: Simple logic, testing
- Example: Data cleanup, simple calculations
Stored Procedure Program:
- References existing procedure/function
- Best for: Complex logic, reuse
- Example: Package procedures, complex operations
Executable Program:
- Runs OS command or script
- Best for: System tasks, external programs
- Example: Shell scripts, batch files
- Requires: Job scheduler agent
Program Details
Viewing Program Details:
- Click program in tree
- Details show:
Information:
- Program name
- Program type
- Program action
- Enabled/Disabled
- Number of arguments
- Jobs using this program
Deleting Programs
How to Delete:
- Select program
- Click Delete button
- Confirmation prompt
- Click Yes
Constraint:
- Cannot delete if jobs use it
- Modify jobs first
Window Management
Viewing Windows
Windows Tree:
- Click Windows folder
- Lists all windows
- Shows window name and status
Window Concepts:
- Time periods for resource allocation
- Can override resource plans
- Used for maintenance windows
Creating Windows
How to Create Window:
- Click Windows folder
- Click Create Window button
- Window creation dialog opens
Window Form:
Basic Information:
- Window Name: Unique name (e.g.,
MAINTENANCE_WINDOW) - Resource Plan: Oracle resource plan name
- Enabled: Create enabled or disabled
Schedule:
- Start Date: When window opens
- Duration: How long window stays open
- Examples:
INTERVAL '2' HOUR,INTERVAL '30' MINUTE
- Examples:
- Repeat Interval: Window recurrence
- Same format as job schedules
- End Date: When window series ends
Example Window:
Window Name: WEEKEND_MAINTENANCE
Resource Plan: MAINTENANCE_PLAN
Start Date: Next Saturday 2 AM
Duration: INTERVAL '4' HOUR
Repeat Interval: FREQ=WEEKLY; BYDAY=SAT
Window Details
Viewing Window Details:
- Click window in tree
- Details show:
Information:
- Window name
- Resource plan
- Enabled/Disabled
- Schedule (start, duration, repeat)
- Next open time
- Last open time
- Window priority
Deleting Windows
How to Delete:
- Select window
- Click Delete button
- Confirmation prompt
- Click Yes
Window Group Management
Viewing Window Groups
Window Groups Tree:
- Click Window Groups folder
- Lists all groups
- Shows group name and member count
Group Purpose:
- Logical grouping of windows
- Simplify window management
- Used with jobs
Creating Window Groups
How to Create:
- Click Window Groups folder
- Click Create Window Group button
- Dialog opens
Form:
- Group Name: Unique name
- Enabled: Create enabled or disabled
- Comments: Description
Managing Group Members
Adding Windows to Group:
- Select window group
- Click Add Member button
- Select window from list
- Click OK
Removing Windows:
- Select window in group members list
- Click Remove Member button
- Confirmation prompt
- Click Yes
Member List:
- Shows all windows in group
- Window name
- Window status
Deleting Window Groups
How to Delete:
- Select window group
- Click Delete button
- Confirmation prompt
- Click Yes
Note:
- Deleting group doesn't delete windows
- Only removes grouping
Job Log Querying
Viewing Job Logs
Job Log Tab:
- Located at bottom of window
- Shows execution history
- Filterable and searchable
How to View:
- Click Job Log tab
- Logs displayed in table
- Most recent logs first
Log Columns:
- Log Date: When job ran
- Job Name: Name of job
- Status: Success, Failed, Stopped
- Error Code: If failed
- Error Message: Error details
- Run Duration: How long job ran
- Additional Info: Other details
Filtering Logs
Filter Options:
- Job Name: Filter by specific job
- Status: Success, Failed, All
- Date Range: From/To dates
- Owner: Filter by job owner
How to Filter:
- Enter filter criteria
- Click Search or Filter button
- Log table updates with results
Clear Filter:
- Click Clear button
- Shows all logs again
Log Details
Viewing Detailed Log:
- Double-click log entry
- Or select and click View Details
- Detail dialog opens
Detail Information:
- Full Error Message: Complete error text
- Error Stack: If applicable
- Additional Info: JSON or XML output (if configured)
- Credentials Used: Job owner
- Resource Consumption: CPU, memory (if available)
Exporting Logs:
- Select log entries
- Click Export button
- Save to CSV or Excel
- Use for analysis or reporting
Chain Management
Oracle Scheduler chains describe multi-step job flows. The current Scheduler view exposes chain and chain-step controls in addition to jobs, schedules, programs, windows, and window groups.
Viewing and Creating Chains
- Open Database -> Oracle Scheduler for an Oracle connection.
- Select the Chains view.
- Review existing chains or choose the add/create action.
- Enter the chain name and other required Oracle properties.
- Save the chain.
Adding Chain Steps
- Select a chain.
- Add a chain step.
- Select the program that the step should run.
- Configure the step rule or condition as required by Oracle.
- Save the chain and refresh the view.
Use Oracle's scheduler privileges and database documentation to validate rules and evaluation conditions before enabling a chain.
Tips and Best Practices
Job Design
Keep Jobs Simple:
- One job, one task
- Break complex tasks into multiple jobs
- Use job chains for dependencies
Error Handling:
- Always include exception handling in PL/SQL
- Log errors appropriately
- Email notifications on failure
Example with Error Handling:
BEGIN
-- Job logic here
my_procedure;
EXCEPTION
WHEN OTHERS THEN
-- Log error
INSERT INTO error_log (error_date, error_msg)
VALUES (SYSDATE, SQLERRM);
COMMIT;
-- Re-raise to mark job as failed
RAISE;
END;
Scheduling Strategy
Choose Appropriate Times:
- Off-peak hours for heavy jobs
- Consider time zones
- Avoid conflicts with backups
Frequency:
- As frequent as needed, not more
- Balance freshness vs. load
- Monitor and adjust
Use Schedules:
- Reuse schedules across jobs
- Central schedule management
- Easier updates
Monitoring
Regular Review:
- Check job logs weekly
- Identify failing jobs
- Investigate slow jobs
Set Up Alerts:
- Email on failure
- Slack/Teams notifications
- Monitoring system integration
Performance Monitoring:
- Track job duration trends
- Identify growing runtime
- Optimize as needed
Security
Principle of Least Privilege:
- Jobs run as job owner
- Grant only necessary privileges
- Use dedicated job user if possible
Sensitive Data:
- Don't hardcode passwords
- Use secure credential store
- Encrypt sensitive data
Auditing:
- Review job definitions periodically
- Monitor unauthorized changes
- Document job purposes
Maintenance
Document Jobs:
- Comment field usage
- Separate documentation
- Contact person for each job
Version Control:
- Keep job definitions in scripts
- Use Git or similar
- Track changes over time
Cleanup:
- Delete obsolete jobs
- Archive old logs
- Remove unused programs/schedules
Troubleshooting
Job Not Running
Possible Causes:
Job Disabled:
- Check job status
- Enable if needed
Schedule Issues:
- Verify schedule settings
- Check start/end dates
- Test schedule calculation
Insufficient Privileges:
- Job owner must have necessary privileges
- Check target objects permissions
- Verify role grants
Scheduler Not Running:
- Check
JOB_QUEUE_PROCESSESparameter - Should be > 0
- Restart scheduler if needed
Job Fails
Check Error Message:
- View job log
- Read error message
- Check error code
Common Errors:
ORA-27370: Job slave failed to launch:
- Scheduler issues
- Check alert log
- Contact DBA
ORA-06512: PL/SQL error:
- Error in job code
- Test code outside job
- Add error handling
ORA-01403: No data found:
- Job expects data that doesn't exist
- Add NULL handling
- Check data dependencies
Job Runs Too Long
Diagnose:
- Check job log for duration
- Compare to previous runs
- Identify trend
Possible Causes:
- Data volume growth
- Missing indexes
- Database performance
- Query inefficiency
Solutions:
- Optimize SQL
- Add indexes
- Partition tables
- Run during off-peak
Cannot Create/Modify Jobs
Possible Causes:
Insufficient Privileges:
- Need CREATE JOB privilege
- Or ALTER privilege for existing jobs
- Contact DBA
Name Already Exists:
- Job/schedule/program name taken
- Choose different name
- Or drop existing object
Invalid Schedule:
- Syntax error in repeat interval
- Check schedule format
- Use schedule builder
Next Steps
Now that you understand Oracle Scheduler:
-
Generate database documentation:
-
Customize preferences:
-
Manage backups:
You're now an expert at managing Oracle scheduled jobs!
For more help, see:
Happy scheduling! 🐰