MINI MINI MANI MO
Rem
Rem $Header: rdbms/admin/catmwin.sql /main/25 2014/02/20 12:45:49 surman Exp $
Rem
Rem catmwin.sql
Rem
Rem Copyright (c) 2003, 2013, Oracle and/or its affiliates.
Rem All rights reserved.
Rem
Rem NAME
Rem catmwin.sql - Catalog script for Maintenance WINdow
Rem
Rem DESCRIPTION
Rem Defines maintenance window and stats collection job.
Rem
Rem NOTES
Rem Must be run when connected as SYSDBA
Rem
Rem
Rem BEGIN SQL_FILE_METADATA
Rem SQL_SOURCE_FILE: rdbms/admin/catmwin.sql
Rem SQL_SHIPPED_FILE: rdbms/admin/catmwin.sql
Rem SQL_PHASE: CATMWIN
Rem SQL_STARTUP_MODE: NORMAL
Rem SQL_IGNORABLE_ERRORS: NONE
Rem SQL_CALLING_FILE: rdbms/admin/catpcnfg.sql
Rem END SQL_FILE_METADATA
Rem
Rem MODIFIED (MM/DD/YY)
Rem surman 12/29/13 - 13922626: Update SQL metadata
Rem surman 03/27/12 - 13615447: Add SQL patching tags
Rem jomcdon 10/19/11 - get appropriate maintenance plan via rmin API
Rem jomcdon 09/09/11 - handle non-existence of maintenance plan on root
Rem mjstewar 01/04/08 - Move upgrade changes to a1101000.sql
Rem mjstewar 11/09/07 - disable HM_CREATE_OFFLINE_DICTIONARY
Rem husun 09/12/07 - bug-6412947 - add timeout parameter to
Rem DRA_REEVALUATE_OPEN_FAILURES
Rem husun 02/12/07 - bug-5878597 - add dbms_ir.reevaluateopenfailures
Rem to maintence window
Rem ilistvin 11/08/06 - move alert queue creation here
Rem ilistvin 11/03/06 - do not diable old windows if they exist
Rem siroych 10/10/06 - add job for offline dictionary creation
Rem ilistvin 08/01/06 - create WEEKEND and WEEKNIGHT windows
Rem ilistvin 07/13/06 - set resource plan to DEFAULT_MAINTENANCE_PLAN
Rem ilistvin 06/07/06 - set resource plan to NULL
Rem ilistvin 04/04/06 - changes for AUTOTASK
Rem mtakahar 02/23/05 - #(4175406) change gather_stats_* comments
Rem mtakahar 09/15/04 - gather_stats_job termination callback
Rem ilistvin 07/14/04 - move set_attribute outside exception block
Rem smuthuli 04/26/04 - auto space advisor
Rem jxchen 12/19/03 - Set "restartable" attribute for GATHER_STATS_JOB
Rem schakkap 12/05/03 - stop auto stats collection at end of mgmt window
Rem evoss 12/02/03 -
Rem evoss 11/17/03 - add follow_default_timezone attr for windows and
Rem rramkiss 06/16/03 - flag system-managed objects
Rem rramkiss 06/16/03 - suppress already_exists errors
Rem jxchen 06/12/03 - Add job definition
Rem jxchen 06/04/03 - jxchen_mwin_main
Rem jxchen 05/12/03 - Created
Rem
@@?/rdbms/admin/sqlsessstart.sql
DECLARE
MAINTENANCE_PLAN VARCHAR2(30);
BEGIN
-- Get the appropriate maintenance plan name from resource manager.
MAINTENANCE_PLAN := dbms_rmin_sys.rm$_get_maintenance_plan();
--
-- Create MONDAY_WINDOW window.
-- Monday window is 10pm Monday to 2am Tuesday
--
BEGIN
BEGIN
dbms_scheduler.create_window(
window_name=>'MONDAY_WINDOW',
resource_plan=>MAINTENANCE_PLAN,
repeat_interval=>'freq=daily;byday=MON;byhour=22;' ||
'byminute=0; bysecond=0',
duration=>interval '4' hour,
comments=>'Monday window for maintenance tasks');
EXCEPTION
when others then
if sqlcode = -27477 then NULL;
else raise;
end if;
END;
dbms_scheduler.set_attribute('MONDAY_WINDOW','SYSTEM',TRUE);
dbms_scheduler.set_attribute('MONDAY_WINDOW',
'FOLLOW_DEFAULT_TIMEZONE',TRUE);
EXCEPTION
when others then
if sqlcode = -27477 then NULL;
else raise;
end if;
END;
--
-- Create TUESDAY_WINDOW window.
-- Tuesday window is 10pm Tuesday to 2am Wednesday
--
BEGIN
BEGIN
dbms_scheduler.create_window(
window_name=>'TUESDAY_WINDOW',
resource_plan=>MAINTENANCE_PLAN,
repeat_interval=>'freq=daily;byday=TUE;byhour=22;' ||
'byminute=0; bysecond=0',
duration=>interval '4' hour,
comments=>'Tuesday window for maintenance tasks');
EXCEPTION
when others then
if sqlcode = -27477 then NULL;
else raise;
end if;
END;
dbms_scheduler.set_attribute('TUESDAY_WINDOW','SYSTEM',TRUE);
dbms_scheduler.set_attribute('TUESDAY_WINDOW',
'FOLLOW_DEFAULT_TIMEZONE',TRUE);
EXCEPTION
when others then
if sqlcode = -27477 then NULL;
else raise;
end if;
END;
--
-- Create WEDNESDAY_WINDOW window.
-- Wednesday window is 10pm Wednesday to 2am Thursday
--
BEGIN
BEGIN
dbms_scheduler.create_window(
window_name=>'WEDNESDAY_WINDOW',
resource_plan=>MAINTENANCE_PLAN,
repeat_interval=>'freq=daily;byday=WED;byhour=22;' ||
'byminute=0; bysecond=0',
duration=>interval '4' hour,
comments=>'Wednesday window for maintenance tasks');
EXCEPTION
when others then
if sqlcode = -27477 then NULL;
else raise;
end if;
END;
dbms_scheduler.set_attribute('WEDNESDAY_WINDOW','SYSTEM',TRUE);
dbms_scheduler.set_attribute('WEDNESDAY_WINDOW',
'FOLLOW_DEFAULT_TIMEZONE',TRUE);
EXCEPTION
when others then
if sqlcode = -27477 then NULL;
else raise;
end if;
END;
--
-- Create THURSDAY_WINDOW window.
-- Thursday window is 10pm Thursday to 2am Friday
--
BEGIN
BEGIN
dbms_scheduler.create_window(
window_name=>'THURSDAY_WINDOW',
resource_plan=>MAINTENANCE_PLAN,
repeat_interval=>'freq=daily;byday=THU;byhour=22;' ||
'byminute=0; bysecond=0',
duration=>interval '4' hour,
comments=>'Thursday window for maintenance tasks');
EXCEPTION
when others then
if sqlcode = -27477 then NULL;
else raise;
end if;
END;
dbms_scheduler.set_attribute('THURSDAY_WINDOW','SYSTEM',TRUE);
dbms_scheduler.set_attribute('THURSDAY_WINDOW',
'FOLLOW_DEFAULT_TIMEZONE',TRUE);
EXCEPTION
when others then
if sqlcode = -27477 then NULL;
else raise;
end if;
END;
--
-- Create FRIDAY_WINDOW window.
-- Friday window is 10pm Friday to 2am Saturday
--
BEGIN
BEGIN
dbms_scheduler.create_window(
window_name=>'FRIDAY_WINDOW',
resource_plan=>MAINTENANCE_PLAN,
repeat_interval=>'freq=daily;byday=FRI;byhour=22;' ||
'byminute=0; bysecond=0',
duration=>interval '4' hour,
comments=>'Friday window for maintenance tasks');
EXCEPTION
when others then
if sqlcode = -27477 then NULL;
else raise;
end if;
END;
dbms_scheduler.set_attribute('FRIDAY_WINDOW','SYSTEM',TRUE);
dbms_scheduler.set_attribute('FRIDAY_WINDOW',
'FOLLOW_DEFAULT_TIMEZONE',TRUE);
EXCEPTION
when others then
if sqlcode = -27477 then NULL;
else raise;
end if;
END;
--
-- Create SATURDAY_WINDOW window.
-- Friday window is 6 am Saturday to 2am Sunday
--
BEGIN
BEGIN
dbms_scheduler.create_window(
window_name=>'SATURDAY_WINDOW',
resource_plan=>MAINTENANCE_PLAN,
repeat_interval=>'freq=daily;byday=SAT;byhour=6;' ||
'byminute=0; bysecond=0',
duration=>interval '20' hour,
comments=>'Saturday window for maintenance tasks');
EXCEPTION
when others then
if sqlcode = -27477 then NULL;
else raise;
end if;
END;
dbms_scheduler.set_attribute('SATURDAY_WINDOW','SYSTEM',TRUE);
dbms_scheduler.set_attribute('SATURDAY_WINDOW',
'FOLLOW_DEFAULT_TIMEZONE',TRUE);
EXCEPTION
when others then
if sqlcode = -27477 then NULL;
else raise;
end if;
END;
--
-- Create SUNDAY_WINDOW window.
-- Friday window is 6 am Sunday to 2am Monday
--
BEGIN
BEGIN
dbms_scheduler.create_window(
window_name=>'SUNDAY_WINDOW',
resource_plan=>MAINTENANCE_PLAN,
repeat_interval=>'freq=daily;byday=SUN;byhour=6;' ||
'byminute=0; bysecond=0',
duration=>interval '20' hour,
comments=>'Sunday window for maintenance tasks');
EXCEPTION
when others then
if sqlcode = -27477 then NULL;
else raise;
end if;
END;
dbms_scheduler.set_attribute('SUNDAY_WINDOW','SYSTEM',TRUE);
dbms_scheduler.set_attribute('SUNDAY_WINDOW',
'FOLLOW_DEFAULT_TIMEZONE',TRUE);
EXCEPTION
when others then
if sqlcode = -27477 then NULL;
else raise;
end if;
END;
END;
/
BEGIN
--
-- Set up scheduler objects for Automated Maintenance Tasks.
-- This includes 'MAINTENANCE_WINDOW_GROUP'
--
dbms_autotask_prvt.setup(0);
--
-- Add new windows to the 'MAINTENANCE_WINDOW_GROUP'.
--
BEGIN
dbms_scheduler.add_window_group_member('MAINTENANCE_WINDOW_GROUP',
'MONDAY_WINDOW');
dbms_scheduler.add_window_group_member('MAINTENANCE_WINDOW_GROUP',
'TUESDAY_WINDOW');
dbms_scheduler.add_window_group_member('MAINTENANCE_WINDOW_GROUP',
'WEDNESDAY_WINDOW');
dbms_scheduler.add_window_group_member('MAINTENANCE_WINDOW_GROUP',
'THURSDAY_WINDOW');
dbms_scheduler.add_window_group_member('MAINTENANCE_WINDOW_GROUP',
'FRIDAY_WINDOW');
dbms_scheduler.add_window_group_member('MAINTENANCE_WINDOW_GROUP',
'SATURDAY_WINDOW');
dbms_scheduler.add_window_group_member('MAINTENANCE_WINDOW_GROUP',
'SUNDAY_WINDOW');
EXCEPTION
when others then raise;
END;
--
-- synchronize all AUTOTASK window groups with 'MAINTENANCE_WINDOW_GROUP'
--
dbms_autotask_prvt.setup(3);
EXCEPTION
when others then raise;
END;
/
-- Create gather stats program.
BEGIN
dbms_scheduler.create_program(
program_name=>'gather_stats_prog',
program_type=>'STORED_PROCEDURE',
program_action=>'dbms_stats.gather_database_stats_job_proc',
number_of_arguments=>0,
enabled=>TRUE,
comments
=>'Oracle defined automatic optimizer statistics collection program');
EXCEPTION
when others then
if sqlcode = -27477 then NULL;
else raise;
end if;
END;
/
-- Create auto space advisor program.
BEGIN
dbms_scheduler.create_program(
program_name=>'auto_space_advisor_prog',
program_type=>'STORED_PROCEDURE',
program_action=>'dbms_space.auto_space_advisor_job_proc',
number_of_arguments=>0,
enabled=>TRUE,
comments=>'auto space advisor maintenance program');
EXCEPTION
when others then
if sqlcode = -27477 then NULL;
else raise;
end if;
END;
/
--Create autotask repository data ageing program
BEGIN
dbms_scheduler.create_program(
program_name=>'ora$age_autotask_data',
program_type=>'STORED_PROCEDURE',
program_action=>'dbms_autotask_prvt.age',
number_of_arguments=>0,
enabled=>TRUE,
comments=>'deletes obsolete AUTOTASK repository data');
exception
when others then
if sqlcode = -27477 then NULL;
else raise;
end if;
END;
/
-- Create autotask repository data ageing job
BEGIN
sys.dbms_scheduler.create_job(
job_name=>'ORA$AUTOTASK_CLEAN',
program_name=>'ora$age_autotask_data',
schedule_name=>'DAILY_PURGE_SCHEDULE',
job_class=>'DEFAULT_JOB_CLASS',
enabled=>TRUE,
auto_drop=>FALSE,
comments=>'Delete obsolete AUTOTASK repository data');
sys.dbms_scheduler.set_attribute('ORA$AUTOTASK_CLEAN','FOLLOW_DEFAULT_TIMEZONE',TRUE);
exception
when others then
if sqlcode = -27477 then NULL;
else raise;
end if;
END;
/
-- Create weeknight window (it is created so that import from 10.x works properly)
BEGIN
dbms_scheduler.create_window(
window_name=>'WEEKNIGHT_WINDOW',
resource_plan=>NULL,
repeat_interval=>'freq=daily;byday=MON,TUE,WED,THU,FRI;byhour=22;' ||
'byminute=0; bysecond=0',
duration=>interval '480' minute,
comments=>'Weeknight window - for compatibility only');
dbms_scheduler.disable('WEEKNIGHT_WINDOW', TRUE);
dbms_scheduler.set_attribute('WEEKNIGHT_WINDOW',
'SYSTEM',TRUE);
dbms_scheduler.set_attribute('WEEKNIGHT_WINDOW',
'FOLLOW_DEFAULT_TIMEZONE',TRUE);
EXCEPTION
when others then
if sqlcode = -27477 then NULL;
else raise;
end if;
END;
/
-- Create weekend window (it is created so that import from 10.x works properly)
BEGIN
dbms_scheduler.create_window(
window_name=>'WEEKEND_WINDOW',
resource_plan=>NULL,
repeat_interval=>'freq=daily;byday=SAT;byhour=0;byminute=0;bysecond=0',
duration=>interval '2880' minute,
comments=>'Weekend window - for compatibility only');
dbms_scheduler.disable('WEEKEND_WINDOW', TRUE);
dbms_scheduler.set_attribute('WEEKEND_WINDOW','SYSTEM',TRUE);
dbms_scheduler.set_attribute('WEEKEND_WINDOW',
'FOLLOW_DEFAULT_TIMEZONE',TRUE);
EXCEPTION
when others then
if sqlcode = -27477 then NULL;
else raise;
end if;
END;
/
-- Create job for creation of offline dictionary for Database Repair Advisor
BEGIN
sys.dbms_scheduler.create_job(
job_name=>'HM_CREATE_OFFLINE_DICTIONARY',
job_type=>'STORED_PROCEDURE',
job_action=>'dbms_hm.create_offline_dictionary',
schedule_name=>'MAINTENANCE_WINDOW_GROUP',
job_class=>'DEFAULT_JOB_CLASS',
enabled=>FALSE,
auto_drop=>FALSE,
comments=>'Create offline dictionary in ADR for DRA name translation');
exception
when others then
if sqlcode = -27477 then NULL;
else raise;
end if;
END;
/
-- Create job for reevaluate open failures for Database Repair Advisor
BEGIN
sys.dbms_scheduler.create_job(
job_name=>'DRA_REEVALUATE_OPEN_FAILURES',
job_type=>'STORED_PROCEDURE',
job_action=>'dbms_ir.reevaluateopenfailures',
number_of_arguments=>4,
schedule_name=>'MAINTENANCE_WINDOW_GROUP',
job_class=>'DEFAULT_JOB_CLASS',
enabled=>FALSE,
auto_drop=>FALSE,
comments=>'Reevaluate open failures for DRA');
exception
when others then
if sqlcode = -27477 then NULL;
else raise;
end if;
END;
/
-- Set the parameters.
BEGIN
-- In previous releases the job did not have any parameters.
-- So, to handle the case where we're upgrading, set the
-- 'number_of_arguments' attribute. The job must be disabled
-- to do this.
sys.dbms_scheduler.disable('DRA_REEVALUATE_OPEN_FAILURES');
sys.dbms_scheduler.set_attribute(
name=> 'DRA_REEVALUATE_OPEN_FAILURES',
attribute=> 'number_of_arguments',
value=> 4);
sys.dbms_scheduler.set_job_argument_value(
job_name=> 'DRA_REEVALUATE_OPEN_FAILURES',
argument_position=> 1,
argument_value=> 'TRUE');
sys.dbms_scheduler.set_job_argument_value(
job_name=> 'DRA_REEVALUATE_OPEN_FAILURES',
argument_position=> 2,
argument_value=> 'TRUE');
sys.dbms_scheduler.set_job_argument_value(
job_name=> 'DRA_REEVALUATE_OPEN_FAILURES',
argument_position=> 3,
argument_value=> 'TRUE');
-- Timeout of 15 minutes (900 seconds)
sys.dbms_scheduler.set_job_argument_value(
job_name=> 'DRA_REEVALUATE_OPEN_FAILURES',
argument_position=> 4,
argument_value=> '900');
sys.dbms_scheduler.enable('DRA_REEVALUATE_OPEN_FAILURES');
END;
/
-- Create alert queue table and alert queue
BEGIN
BEGIN
dbms_aqadm.create_queue_table(
queue_table => 'SYS.ALERT_QT',
queue_payload_type => 'SYS.ALERT_TYPE',
storage_clause => 'TABLESPACE "SYSAUX"',
multiple_consumers => TRUE,
comment => 'Server Generated Alert Queue Table',
secure => TRUE);
dbms_aqadm.create_queue(
queue_name => 'SYS.ALERT_QUE',
queue_table => 'SYS.ALERT_QT',
comment => 'Server Generated Alert Queue');
EXCEPTION
when others then
if sqlcode = -24001 then NULL;
else raise;
end if;
END;
dbms_aqadm.start_queue('SYS.ALERT_QUE', TRUE, TRUE);
dbms_aqadm.start_queue('SYS.AQ$_ALERT_QT_E', FALSE, TRUE);
commit;
EXCEPTION
when others then
raise;
END;
/
-- Create an AQ agent to be used to enqueue alert messages
BEGIN
DECLARE
agent SYS.AQ$_AGENT;
BEGIN
agent := SYS.AQ$_AGENT('server_alert', NULL, NULL);
dbms_aqadm.create_aq_agent('server_alert');
EXCEPTION
when others then
if sqlcode = -24089 then NULL;
else raise;
end if;
END;
dbms_aqadm.enable_db_access('server_alert', 'SYS');
EXCEPTION
when others then raise;
END;
/
@?/rdbms/admin/sqlsessend.sql
OHA YOOOO