メンテナンスウィンドウの設定変更

この記事ではメンテナンスウィンドウの設定変更について解説します。

 メンテナンスウィンドウとは

メンテナンスウィンドウとは自動メンテナンスタスクの実行時間帯を設定するものです。

メンテナンスウィンドウはデフォルトでは月曜日から日曜日の各曜日と、平日用、土日用の9つが用意されています。

デフォルトでは各曜日のウィンドウが有効化されており、月曜日から金曜日は22時に開始し4時間、土日は6時に開始し20時間がメンテナンス時間として定義されています。

自動メンテナンスタスクの実行時間はDBの更新状況や負荷状況に合わせて変更することが大切です。

そのためにはメンテナンスウィンドウの設定を変更する必要があります。


 メンテナンスウィンドウの設定変更

土曜日のメンテナンスウィンドウの設定を平日と同様に22時に開始し、4時間実行するように変更します。

まずは現在のメンテナンスウィンドウの設定を確認します。

SQL> select window_name,repeat_interval,duration,enabled from dba_scheduler_windows;
WINDOW_NAME	 REPEAT_INTERVAL						       DURATION      ENABLED
---------------- --------------------------------------------------------------------- ------------- -------
MONDAY_WINDOW	 freq=daily;byday=MON;byhour=22;byminute=0; bysecond=0		       +000 04:00:00 TRUE
TUESDAY_WINDOW	 freq=daily;byday=TUE;byhour=22;byminute=0; bysecond=0		       +000 04:00:00 TRUE
WEDNESDAY_WINDOW freq=daily;byday=WED;byhour=22;byminute=0; bysecond=0		       +000 04:00:00 TRUE
THURSDAY_WINDOW  freq=daily;byday=THU;byhour=22;byminute=0; bysecond=0		       +000 04:00:00 TRUE
FRIDAY_WINDOW	 freq=daily;byday=FRI;byhour=22;byminute=0; bysecond=0		       +000 04:00:00 TRUE
SATURDAY_WINDOW  freq=daily;byday=SAT;byhour=6;byminute=0; bysecond=0		       +000 20:00:00 TRUE
SUNDAY_WINDOW	 freq=daily;byday=SUN;byhour=6;byminute=0; bysecond=0		       +000 20:00:00 TRUE
WEEKNIGHT_WINDOW freq=daily;byday=MON,TUE,WED,THU,FRI;byhour=22;byminute=0; bysecond=0 +000 08:00:00 FALSE
WEEKEND_WINDOW	 freq=daily;byday=SAT;byhour=0;byminute=0;bysecond=0		       +002 00:00:00 FALSE

REPEAT_INTERVALのbyhourの値が開始時刻、DURATIONの値が実行時間になります。

土曜日のウィンドウが6時開始、20時間実行になっているのが確認できます。

まずは実行時間を4時間に変更します。

SQL> BEGIN
  dbms_scheduler.set_attribute(
    name      => 'SATURDAY_WINDOW',
    attribute => 'DURATION',
    value     => numtodsinterval(4, 'hour'));
END;
/

PL/SQL procedure successfully completed.

nameに変更するウィンドウ名をvalueに実行時間を指定します。

続いて開始時刻を変更します。

SQL> BEGIN
  dbms_scheduler.set_attribute(
    name      => 'SATURDAY_WINDOW',
    attribute => 'REPEAT_INTERVAL',
    value     => 'freq=daily;byday=SAT;byhour=22;byminute=0;bysecond=0');
END;
/

PL/SQL procedure successfully completed.

valueのbydayに曜日、byhourに開始時刻を設定します。

設定した内容を確認します。

SQL> select window_name,repeat_interval,duration,enabled from dba_scheduler_windows;
WINDOW_NAME	 REPEAT_INTERVAL						       DURATION      ENABLED
---------------- --------------------------------------------------------------------- ------------- -------
MONDAY_WINDOW	 freq=daily;byday=MON;byhour=22;byminute=0; bysecond=0		       +000 04:00:00 TRUE
TUESDAY_WINDOW	 freq=daily;byday=TUE;byhour=22;byminute=0; bysecond=0		       +000 04:00:00 TRUE
WEDNESDAY_WINDOW freq=daily;byday=WED;byhour=22;byminute=0; bysecond=0		       +000 04:00:00 TRUE
THURSDAY_WINDOW  freq=daily;byday=THU;byhour=22;byminute=0; bysecond=0		       +000 04:00:00 TRUE
FRIDAY_WINDOW	 freq=daily;byday=FRI;byhour=22;byminute=0; bysecond=0		       +000 04:00:00 TRUE
SATURDAY_WINDOW  freq=daily;byday=SAT;byhour=22;byminute=0;bysecond=0		       +000 04:00:00 TRUE
SUNDAY_WINDOW	 freq=daily;byday=SUN;byhour=6;byminute=0; bysecond=0		       +000 20:00:00 TRUE
WEEKNIGHT_WINDOW freq=daily;byday=MON,TUE,WED,THU,FRI;byhour=22;byminute=0; bysecond=0 +000 08:00:00 FALSE
WEEKEND_WINDOW	 freq=daily;byday=SAT;byhour=0;byminute=0;bysecond=0		       +002 00:00:00 FALSE

土曜日のウィンドウの設定変更が正しくされていることが確認できました。