OracleDB

OracleDBの自動メンテナンスタスクの有効・無効・スケジュール変更手順

2018年8月10日

こんにちは!土門大貴(daikidomon)です。

OracleDatabaseの「自動メンテナンスタスク」の確認方法について紹介します。

自動メンテナンスタスクはデータベースのメンテナンス操作を一定間隔毎に自動的に行う機能です。

デフォルトでは有効化されており、システムの負荷が軽いと予測される時間帯に実行されますが、

個々のメンテナンスタスクをいつ動いているか確認してみましょう。

OracleDBの自動メンテナンスタスクの有効・無効・スケジュール・実行履歴の確認方法

こんにちは!土門大貴(daikidomon)です。 OracleDatabaseの「自動メンテナンスタスク」の確認方法に ...

続きを見る

自動メンテナンスタスクとは?

自動メンテナンスタスクには3つの機能があり、それぞれの役割は以下になります。

タスク名説明
自動オプティマイザ統計収集データベースオブジェクトに対する統計情報を自動的に収集する機能。
自動セグメント・アドバイザ再生可能な領域が存在しているセグメントを識別し、それらのセグメントの断片化を解消する方法について推奨する機能
自動SQLチューニング・アドバイザ高負荷のSQL文のパフォーマンスを調査し、それらの文のチューニング方法について推奨する機能

なお自動メンテナンスタスクを使用するためには別途追加ライセンスが発生します。

自動メンテナンスタスクの有効・無効化手順

メンテナンスタスクを有効化は「DBMS_AUTO_TASK_ADMIN.ENABLE」を使用します。
-- すべてのメンテナンスタスクを有効化
BEGIN
DBMS_AUTO_TASK_ADMIN.ENABLE;
END;
/

-- 個別にメンテナンスタスクを有効化
BEGIN
DBMS_AUTO_TASK_ADMIN.ENABLE(
client_name => 'auto optimizer stats collection'
,operation => NULL
,window_name => NULL
);
DBMS_AUTO_TASK_ADMIN.ENABLE(
client_name => 'AUTO SPACE ADVISOR'
,operation => NULL
,window_name => NULL
);
DBMS_AUTO_TASK_ADMIN.ENABLE(
client_name => 'AUTO SPACE ADVISOR'
,operation => NULL
,window_name => NULL
);
END;
/

 

メンテナンスタスクを無効化は「DBMS_AUTO_TASK_ADMIN.DISABLE」を使用します。
BEGIN
DBMS_AUTO_TASK_ADMIN.DISABLE;
END;
/

BEGIN
DBMS_AUTO_TASK_ADMIN.DISABLE(
client_name => 'auto optimizer stats collection'
,operation => NULL
,window_name => NULL
);
DBMS_AUTO_TASK_ADMIN.DISABLE(
client_name => 'AUTO SPACE ADVISOR'
,operation => NULL
,window_name => NULL
);
DBMS_AUTO_TASK_ADMIN.DISABLE(
client_name => 'AUTO SPACE ADVISOR'
,operation => NULL
,window_name => NULL
);
END;
/

 

参考DBMS_AUTO_TASK_ADMIN

自動メンテナンスタスクのスケジュール変更

メンテナンスタスクのスケジュールを変更するには「DBMS_SCHEDULER.SET_ATTRIBUTE」を使用します。
BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE(
NAME =>'<ウィンドウ名>'
,ATTRIBUTE =>'<ジョブ属性>'
,VALUE =>'<設定値>'
);
END;
/
「ジョブ属性」や「カレンダー構文」などは記載内容が多いのでマニュアルを参照にしてください。

マニュアルジョブ属性

マニュアルカレンダー構文

以下、日曜日のメンテナンスタスクを2:00から6時間動作するように変更します。
-- 開始時刻を変更
BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE(
NAME =>'SUNDAY_WINDOW'
,ATTRIBUTE =>'REPEAT_INTERVAL'
,VALUE =>'FREQ=DAILY;BYDAY=SUN;BYHOUR=2;BYMINUTE=0; BYSECOND=0'
);
END;
/

-- ウィンドウサイズを変更
BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE(
NAME =>'SUNDAY_WINDOW'
,ATTRIBUTE =>'DURATION'
,VALUE => NUMTODSINTERVAL(6, 'HOUR')
);
END;
/

-- 変更確認
> set line 300
> col WINDOW_NAME for a20
> col REPEAT_INTERVAL for a70
> col DURATION for a15
> col ENABLED for a7
> col AUTOTASK_STATUS for a15
> col OPTIMIZER_STATS for a15
> col SEGMENT_ADVISOR for a15
> col SQL_TUNE_ADVISOR for a16
> select s.WINDOW_NAME
2 ,s.REPEAT_INTERVAL
3 ,s.DURATION
4 ,s.ENABLED
5 ,a.AUTOTASK_STATUS
6 ,a.OPTIMIZER_STATS
7 ,a.SEGMENT_ADVISOR
8 ,a.SQL_TUNE_ADVISOR
9 from DBA_SCHEDULER_WINDOWS s,
10 DBA_AUTOTASK_WINDOW_CLIENTS a
11 where s.WINDOW_NAME = a.WINDOW_NAME(+)
12 and s.WINDOW_NAME = 'SUNDAY_WINDOW';

WINDOW_NAME REPEAT_INTERVAL DURATION ENABLED AUTOTASK_STATUS OPTIMIZER_STATS SEGMENT_ADVISOR SQL_TUNE_ADVISOR
-------------------- ---------------------------------------------------------------------- --------------- ------- --------------- --------------- --------------- ----------------
SUNDAY_WINDOW FREQ=DAILY;BYDAY=SUN;BYHOUR=2;BYMINUTE=0; BYSECOND=0 +000 06:00:00 TRUE ENABLED ENABLED ENABLED ENABLED
 

参考DBMS_SCHEDULER

 

関連記事

-OracleDB

Copyright© スタートアップIT企業社長のブログ , 2020 All Rights Reserved.