Windows
Windows provide the link between the scheduler and the resource manager, allowing different resource plans to be activated at different times. Since job classes point to resource consumer groups, and therefore resource plans, this mechanism allows control over the resources allocated to job classes and their jobs during specific time periods.
Only one window can be active (open) at any time, with one resource plan assigned to the window. The affect of resource plan switches is instantly visible to running jobs which are assigned to job classes. The interaction between the resource manager and the scheduler is beyond the scope of this document.
A window can be created using the CREATE_WINDOW
procedure with a predefined or an inline schedule:
BEGIN
-- Window with a predefined schedule.
DBMS_SCHEDULER.create_window (
window_name => 'test_window_1',
resource_plan => NULL,
schedule_name => 'test_hourly_schedule',
duration => INTERVAL '60' MINUTE,
window_priority => 'LOW',
comments => 'Window with a predefined schedule.');
-- Window with an inline schedule.
DBMS_SCHEDULER.create_window (
window_name => 'test_window_2',
resource_plan => NULL,
start_date => SYSTIMESTAMP,
repeat_interval => 'freq=hourly; byminute=0',
end_date => NULL,
duration => INTERVAL '60' MINUTE,
window_priority => 'LOW',
comments => 'Window with an inline schedule.');
END;
/
PL/SQL procedure successfully completed.
-- Display window group details.
SELECT window_name, resource_plan, enabled, active
FROM dba_scheduler_windows;
WINDOW_NAME RESOURCE_PLAN ENABL ACTIV
------------------------------ ------------------------------ ----- -----
WEEKNIGHT_WINDOW TRUE FALSE
WEEKEND_WINDOW TRUE FALSE
TEST_WINDOW_1 TRUE FALSE
TEST_WINDOW_2 TRUE FALSE
4 rows selected.
Windows can be opened and closed manually using the OPEN_WINDOW
and CLOSE_WINDOW
procedures:
BEGIN
-- Open window.
DBMS_SCHEDULER.open_window (
window_name => 'test_window_2',
duration => INTERVAL '1' MINUTE,
force => TRUE);
END;
/
PL/SQL procedure successfully completed.
-- Display window group details.
SELECT window_name, resource_plan, enabled, active
FROM dba_scheduler_windows;
WINDOW_NAME RESOURCE_PLAN ENABL ACTIV
------------------------------ ------------------------------ ----- -----
WEEKNIGHT_WINDOW TRUE FALSE
WEEKEND_WINDOW TRUE FALSE
TEST_WINDOW_1 TRUE FALSE
TEST_WINDOW_2 TRUE TRUE
4 rows selected.
BEGIN
-- Close window.
DBMS_SCHEDULER.close_window (
window_name => 'test_window_2');
END;
/
PL/SQL procedure successfully completed.
-- Display window group details.
SELECT window_name, resource_plan, enabled, active
FROM dba_scheduler_windows;
WINDOW_NAME RESOURCE_PLAN ENABL ACTIV
------------------------------ ------------------------------ ----- -----
WEEKNIGHT_WINDOW TRUE FALSE
WEEKEND_WINDOW TRUE FALSE
TEST_WINDOW_1 TRUE FALSE
TEST_WINDOW_2 TRUE FALSE
4 rows selected.
Windows can be dropped using the DROP_WINDOW
procedure:
BEGIN
DBMS_SCHEDULER.drop_window (
window_name => 'test_window_1',
force => TRUE);
DBMS_SCHEDULER.drop_window (
window_name => 'test_window_2',
force => TRUE);
END;
/
PL/SQL procedure successfully completed.
-- Display window group details.
SELECT window_name, resource_plan, enabled, active
FROM dba_scheduler_windows;
WINDOW_NAME RESOURCE_PLAN ENABL ACTIV
------------------------------ ------------------------------ ----- -----
WEEKNIGHT_WINDOW TRUE FALSE
WEEKEND_WINDOW TRUE FALSE
2 rows selected.
Windows Groups
A window group is a collection of related windows. It can be created with 0, 1 or many windows as group members using the CREATE_WINDOW_GROUP
procedure:
BEGIN
DBMS_SCHEDULER.create_window_group (
group_name => 'test_window_group',
window_list => 'test_window_1, test_window_2',
comments => 'A test window group');
END;
/
PL/SQL procedure successfully completed.
-- Display window group details.
SELECT window_group_name, enabled, number_of_windowS
FROM dba_scheduler_window_groups;
WINDOW_GROUP_NAME ENABL NUMBER_OF_WINDOWS
------------------------------ ----- -----------------
MAINTENANCE_WINDOW_GROUP TRUE 2
TEST_WINDOW_GROUP TRUE 2
2 rows selected.
Windows can be added and removed from a group using the ADD_WINDOW_GROUP_MEMBER
and REMOVE_WINDOW_GROUP_MEMBER
procedures:
BEGIN
-- Create a new window.
DBMS_SCHEDULER.create_window (
window_name => 'test_window_3',
resource_plan => NULL,
schedule_name => 'test_hourly_schedule',
duration => INTERVAL '60' MINUTE,
window_priority => 'LOW',
comments => 'Window with a predefined schedule.');
DBMS_SCHEDULER.add_window_group_member (
group_name => 'test_window_group',
window_list => 'test_window_3');
END;
/
PL/SQL procedure successfully completed.
-- Display window group members.
SELECT window_group_name, window_name
FROM dba_scheduler_wingroup_members;
WINDOW_GROUP_NAME WINDOW_NAME
------------------------------ ------------------------------
MAINTENANCE_WINDOW_GROUP WEEKNIGHT_WINDOW
MAINTENANCE_WINDOW_GROUP WEEKEND_WINDOW
TEST_WINDOW_GROUP TEST_WINDOW_1
TEST_WINDOW_GROUP TEST_WINDOW_2
TEST_WINDOW_GROUP TEST_WINDOW_3
5 rows selected.
BEGIN
DBMS_SCHEDULER.remove_window_group_member (
group_name => 'test_window_group',
window_list => 'test_window_3');
END;
/
PL/SQL procedure successfully completed.
-- Display window group members.
SELECT window_group_name, window_name
FROM dba_scheduler_wingroup_members;
WINDOW_GROUP_NAME WINDOW_NAME
------------------------------ ------------------------------
MAINTENANCE_WINDOW_GROUP WEEKNIGHT_WINDOW
MAINTENANCE_WINDOW_GROUP WEEKEND_WINDOW
TEST_WINDOW_GROUP TEST_WINDOW_1
TEST_WINDOW_GROUP TEST_WINDOW_2
4 rows selected.
Window groups can be dropped using the drop_window_group
procedure:
BEGIN
DBMS_SCHEDULER.drop_window_group (
group_name => 'test_window_group',
force => TRUE);
END;
/
PL/SQL procedure successfully completed.
-- Display window group details.
SELECT window_group_name, enabled, number_of_windowS
FROM dba_scheduler_window_groups;
WINDOW_GROUP_NAME ENABL NUMBER_OF_WINDOWS
------------------------------ ----- -----------------
MAINTENANCE_WINDOW_GROUP TRUE 2
1 row selected.
The force option must be used if the window group currently has members.
Enable, Disable and Attributes
All applicable scheduler objects can be enabled and disabled using the overloaded ENABLE
and DISABLE
procedures:
BEGIN
-- Enable programs and jobs.
DBMS_SCHEDULER.enable (name => 'test_stored_procedure_prog');
DBMS_SCHEDULER.enable (name => 'test_full_job_definition');
-- Disable programs and jobs.
DBMS_SCHEDULER.disable (name => 'test_stored_procedure_prog');
DBMS_SCHEDULER.disable (name => 'test_full_job_definition');
END;
/
The values for individual attributes of all scheduler objects can be altered using one of the SET_ATTRIBUTE
overloads:
BEGIN
DBMS_SCHEDULER.set_attribute (
name => 'hourly_schedule',
attribute => 'repeat_interval',
value => 'freq=hourly; byminute=30');
END;
/
The values can be set to NULL using the SET_ATTRIBUTE_NULL
procedure:
BEGIN
DBMS_SCHEDULER.set_attribute_null (
name => 'hourly_schedule',
attribute => 'repeat_interval');
END;
/
For more information see: