Oracle:自動メンテナンスタスク(autotask)の管理に関するSQL | けしくんのWebLog

けしくんのWebLog

自分が考えたこと、調べたことを忘れずに残しておくため、Web上にLogを残していきます。

Oracleの自動メンテナンスタスク(autotask)を管理するSQL(11g以降をメインに記載)。

自動メンテナンスタスクの有効/無効の変更と、

実行するメンテナンス・ウィンドウを変更する操作ができれば大抵は事足りる。

もっと細かい設定がしたければ、マニュアルをみる。

よく使うOracle SQL/コマンドまとめ

 

自動化メンテナンス・タスクの状態の確認

SELECT * FROM  DBA_AUTOTASK_WINDOW_CLIENTS;

※一括で有効/無効にした場合、後述するステータスが変更されない(12.1.0.2で確認 :バグ?)。

WINDOW_ACTIVE:ウィンドウが現在アクティブ(オープンしている)かどうか(TRUE | FALSE)

AUTOTASK_STATUS: 自動メンテナンス・タスク・サブシステムのステータス

 

自動メンテナンスタスクを一括で無効/有効にする

EXECUTE DBMS_AUTO_TASK_ADMIN.DISABLE;  --無効にする場合

EXECUTE DBMS_AUTO_TASK_ADMIN.ENABLE; --有効にする場合

※一括で有効/無効にした場合、後述するステータスが変更されない(12.1.0.2で確認 :バグ?)。

 

自動メンテナンスタスクを個別に無効/有効にする

EXECUTE DBMS_AUTO_TASK_ADMIN.DISABLE('メンテナンスタスク名(CLIENT_NAME)',NULL,NULL);  --無効にする場合
 

EXECUTE DBMS_AUTO_TASK_ADMIN.ENABLE 'メンテナンスタスク名(CLIENT_NAME)',NULL,NULL);  --有効にする場合

※メンテナンスタスク名(CLIENT_NAME)は、次に紹介するSQLで確認する。

11gや12cでは、以下の3つがデフォルトで作成されている。

auto optimizer stats collection:統計情報の収集
auto space advisor:セグメントアドバイザ
sql tuning advisor:SQLチューニングアドバイザ(Enterprise Editionのみ)

 

自動メンテナンスタスク名(CLIENT_NAME)の確認

SELECT CLIENT_NAME, STATUS, WINDOW_GROUP FROM DBA_AUTOTASK_CLIENT;

※STATUS:メンテナンスタスクの有効/無効状態。一括で有効/無効操作をした場合、ステータスの値が変わらない(12.1.0.2で確認:バグ?)

WINDOW_GROUP:アクティブなメンテナンス・ウィンドウのウィンドウ・グループ名

 

ウィンドウ・グループ名と属するメンテナンス・ウィンドウの確認

 

SELECT WINDOW_GROUP_NAME, WINDOW_NAME

FROM DBA_SCHEDULER_WINGROUP_MEMBERS;

 

※ DBMS_AUTO_TASK_ADMIN.GET_CLIENT_ATTRIBUTESで取得したウィンドウ・グループ名がどのメンテナンス・ウィンドウに紐付いているかをこれで確認する。

 

メンテナンス・ウィンドウの開始時間と有効期間の確認

SELECT WINDOW_NAME, START_TIME, DURATION
FROM DBA_AUTOTASK_SCHEDULE;

※WINDOW_NAMEが開始される時間と有効な期間(何時間か)を確認できる。

 

メンテナンス・ウィンドウの変更

※ウィンドウを変更する際は、事前にDBMS_SCHEDULER.DISABLEを使用してそのウィンドウを無効にし、終了した後にDBMS_SCHEDULER.ENABLEを使用して再度有効にする必要がある。現在オープン中のウィンドウを変更した場合は、そのウィンドウの次回オープンまで変更内容が反映されない。 

 

・SUNDAY_WINDOWの期間(DURATION)を4時間に変更する例

BEGIN
DBMS_SCHEDULER.DISABLE(NAME=>'SUNDAY_WINDOW');
DBMS_SCHEDULER.SET_ATTRIBUTE(

 NAME=>'SUNDAY_WINDOW',

 ATTRIBUTE =>'DURATION',

 VALUE=>NUMTODSINTERVAL(4, 'HOUR')

);
DBMS_SCHEDULER.ENABLE(NAME=>'SUNDAY_WINDOW');
END;

/

 

・MONDAY_WINDOWの開始日を2017年3月15日以降に変更する例

BEGIN
DBMS_SCHEDULER.DISABLE(NAME=>'MONDAY_WINDOW');
DBMS_SCHEDULER.SET_ATTRIBUTE(

 NAME=>'MONDAY_WINDOW',

 ATTRIBUTE =>'START_DATE',

 VALUE=>TO_TIMESTAMP_TZ('2017/03/15','YYYY/MM/DD')

);
DBMS_SCHEDULER.ENABLE(NAME=>'MONDAY_WINDOW');
END;
/

 

・FRIDAY_WINDOWの開始時間を23時に変更する例

BEGIN
DBMS_SCHEDULER.DISABLE(NAME=>'FRIDAY_WINDOW');
DBMS_SCHEDULER.SET_ATTRIBUTE(
 NAME=>'FRIDAY_WINDOW',
 ATTRIBUTE=>'REPEAT_INTERVAL',
 VALUE=>'FREQ=WEEKLY;BYDAY=MON;BYHOUR=23;BYMINUTE=0;BYSECOND=0'

);
DBMS_SCHEDULER.ENABLE(NAME=>'FRIDAY_WINDOW');
END;
/

 

 

よく使うOracle SQL/コマンドまとめ