日本語PDF

26 自動データベース・メンテナンス・タスクの管理

Oracle Databaseでは、データベース管理者が通常実行する一般的なメンテナンス・タスクのうちのいくつかが自動化されました。これらの自動化メンテナンス・タスクは、システムの負荷が軽いと予測される時間帯に実行されます。管理者は、個々のメンテナンス・タスクを有効または無効にしたり、これらのタスクの実行時期やタスクに対するリソース割当てを構成できます。

ノート:

この章では、PL/SQLパッケージを使用して、自動化メンテナンス・タスクを管理する方法について説明します。簡単な方法として、Oracle Enterprise Manager Cloud Control (Cloud Control)のグラフィカル・インタフェースを使用する方法があります。

Cloud Controlを使用して自動メンテナンス・タスクを管理するには:

  1. データベース・ホームページにアクセスします。

  2. 「管理」メニューから、「Oracle Scheduler」を選択し、「自動化メンテナンス・タスク」を選択します。

  3. 「自動化メンテナンス・タスク」ページで、「構成」をクリックします。

26.1 自動化メンテナンス・タスクについて

自動化メンテナンス・タスクとは、データベースのメンテナンス操作を実行するために、一定の間隔をおいて自動的に開始されるタスクです。問合せオプティマイザのスキーマ・オブジェクトに関する統計を収集するタスクなどはその一例です。

自動化メンテナンス・タスクはメンテナンス・ウィンドウで実行されますが、これはシステム負荷が低い時間に発生するように設定された事前定義済の時間間隔です。管理者は、データベースのリソース使用パターンに基づいてメンテナンス・ウィンドウをカスタマイズしたり、特定のデフォルト・ウィンドウでの実行を禁止できます。独自のメンテナンス・ウィンドウを作成することもできます。

Oracle Databaseでは、次の自動化メンテナンス・タスクが事前定義されています。

  • 自動オプティマイザ統計収集—データベース内に統計がないか、古い統計のみがあるすべてのスキーマ・オブジェクトに関するオプティマイザ統計を収集します。このタスクで収集された統計は、SQLの実行パフォーマンスを改善するためにSQL問合せオプティマイザによって使用されます。

    関連項目:

    統計の自動収集の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。

  • オプティマイザ統計アドバイザ—統計収集の方法を分析し、統計収集を微調整するための変更内容を提案します。

  • 自動セグメント・アドバイザ—再生可能な領域が存在しているセグメントを識別し、それらのセグメントの断片化を解消する方法について推奨事項を生成します。

    セグメント・アドバイザを手動で実行すると、最新の推奨事項を取得したり、自動セグメント・アドバイザで再生可能な領域を調査しなかったセグメントについて推奨事項を取得することもできます。

    関連項目:

    詳細は、「セグメント・アドバイザの使用」を参照してください。

  • 自動SQLチューニング・アドバイザ—高負荷のSQL文のパフォーマンスを調査し、それらの文のチューニング方法について推奨事項を生成します。このアドバイザは、SQLプロファイルの推奨事項を自動的に実装するように構成できます。

    関連項目:

    SQLチューニング・アドバイザの詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。

  • SQL計画管理(SPM)展開アドバイザ—SQL計画ベースラインに最近追加された計画を展開します。アドバイザを使用することにより手動で実行する必要がなくなるため、計画の展開が容易になります。

    関連項目:

    SPM展開アドバイザの詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。

デフォルトでは、これらの自動化メンテナンス・タスクは、すべてのメンテナンス・ウィンドウで実行するように構成されています。

26.2 メンテナンス・ウィンドウについて

メンテナンス・ウィンドウは、自動化メンテナンス・タスクが実行される連続した時間間隔です。メンテナンス・ウィンドウは、MAINTENANCE_WINDOW_GROUPという名前のウィンドウ・グループに属するOracle Schedulerウィンドウです。

スケジューラのウィンドウは、単純な繰返し間隔(毎週土曜の午前0時から午前6時の間など)の場合や複雑な間隔(会社の休業日を除いて、毎月最後の稼働日の午前0時から午前6時の間など)の場合があります。

メンテナンス・ウィンドウがオープンすると、Oracle Databaseでは、そのウィンドウでの実行がスケジュールされている各メンテナンス・タスクに対してOracle Schedulerのジョブが作成されます。各ジョブには、実行時に生成されるジョブ名が割り当てられます。自動化メンテナンス・タスクのジョブ名はすべてORA$ATで始まります。たとえば、自動セグメント・アドバイザのジョブには、ORA$AT_SA_SPC_SY_26という名前が指定されます。自動化メンテナンス・タスクのジョブが終了すると、そのジョブはOracle Schedulerのジョブ・システムから削除されます。ただし、スケジューラのジョブ履歴には記録が残ります。

ノート:

ジョブ履歴を表示するには、SYSユーザーでログインする必要があります。

非常に長いメンテナンス・ウィンドウの場合、自動SQLチューニング・アドバイザを除くすべての自動化メンテナンス・タスクは4時間ごとに再起動されます。この機能によって、ウィンドウ・サイズに関係なく、メンテナンス・タスクが定期的に実行されます。

自動化メンテナンス・タスクのフレームワークは、データベースに定義されているメンテナンス・ウィンドウに依存しています。表26-1に、新規Oracle Databaseの各インストールで自動的に定義されるメンテナンス・ウィンドウのリストを示します。

関連項目:

26.3 自動化メンテナンス・タスクの構成

メンテナンス・ウィンドウのサブセットで特定のメンテナンス・タスクを有効または無効にするには、DBMS_AUTO_TASK_ADMIN PL/SQLパッケージを使用します。

26.3.1 すべてのメンテナンス・ウィンドウに対するメンテナンス・タスクの有効化と無効化

1回の操作ですべてのメンテナンス・ウィンドウに対して特定の自動化メンテナンス・タスクを無効または有効にできます。

管理者は、1回の操作ですべてのメンテナンス・ウィンドウに対して特定の自動化メンテナンス・タスクを無効にできます。無効にするには、DBMS_AUTO_TASK_ADMIN PL/SQLパッケージのDISABLEプロシージャをwindow_name引数なしでコールします。たとえば、次のプロシージャを使用して自動SQLチューニング・アドバイザ・タスクを完全に無効にできます。

BEGIN
  dbms_auto_task_admin.disable(
    client_name => 'sql tuning advisor',
    operation   => NULL,
    window_name => NULL);
END;
/

このメンテナンス・タスクを再度有効にするには、次のようにENABLEプロシージャを使用します。

BEGIN
  dbms_auto_task_admin.enable(
    client_name => 'sql tuning advisor',
    operation   => NULL,
    window_name => NULL);
END;
/

client_name引数に使用するタスク名は、DBA_AUTOTASK_CLIENTデータベース・ディクショナリ・ビューにリストされています。

すべてのウィンドウに対して自動化メンテナンス・タスクすべてを有効または無効にするには、引数を指定せずにENABLEまたはDISABLEプロシージャをコールします。

EXECUTE DBMS_AUTO_TASK_ADMIN.DISABLE;

26.3.2 特定のメンテナンス・ウィンドウに対するメンテナンス・タスクの有効化と無効化

デフォルトでは、すべてのメンテナンス・タスクが事前定義のすべてのメンテナンス・ウィンドウで実行されます。管理者は、特定のウィンドウに対してメンテナンス・タスクを無効にできます。

次の例は、ウィンドウMONDAY_WINDOWでの自動SQLチューニング・アドバイザの実行を無効にしています。

BEGIN
  dbms_auto_task_admin.disable(
    client_name => 'sql tuning advisor', 
    operation   => NULL, 
    window_name => 'MONDAY_WINDOW');
END;
/

26.4 メンテナンス・ウィンドウの構成

事前定義のメンテナンス・ウィンドウをデータベース環境に適した時間に調整したり、新しいメンテナンス・ウィンドウを作成できます。メンテナンス・ウィンドウは、DBMS_SCHEDULER PL/SQLパッケージを使用してカスタマイズできます。

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

DBMS_SCHEDULER PL/SQLパッケージには、ウィンドウの属性を変更するためのSET_ATTRIBUTEプロシージャが含まれています。

たとえば、次のスクリプトは、メンテナンス・ウィンドウSATURDAY_WINDOWの期間を4時間に変更します。

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

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

関連項目:

ウィンドウの変更の詳細は、「ウィンドウを使用したジョブ・スケジューリングとジョブ優先度の管理」を参照してください。

26.4.2 新規メンテナンス・ウィンドウの作成

新規メンテナンス・ウィンドウを作成するには、Oracle Schedulerのウィンドウを作成して、ウィンドウ・グループMAINTENANCE_WINDOW_GROUPに追加する必要があります。

DBMS_SCHEDULER.CREATE_WINDOWパッケージ・プロシージャを使用してウィンドウを作成し、DBMS_SCHEDULER.ADD_GROUP_MEMBERプロシージャを使用して、この新規ウィンドウをウィンドウ・グループに追加します。

次の例は、EARLY_MORNING_WINDOWという名前のメンテナンス・ウィンドウを作成しています。このウィンドウは、午前5時から午前6時まで毎日1時間実行されます。

BEGIN
  DBMS_SCHEDULER.CREATE_WINDOW(
    window_name     => 'EARLY_MORNING_WINDOW',
    duration        =>  NUMTODSINTERVAL(1, 'hour'),
    resource_plan   => 'DEFAULT_MAINTENANCE_PLAN',
    repeat_interval => 'FREQ=DAILY;BYHOUR=5;BYMINUTE=0;BYSECOND=0');
  DBMS_SCHEDULER.ADD_GROUP_MEMBER(
    group_name  => 'MAINTENANCE_WINDOW_GROUP',
    member      => 'EARLY_MORNING_WINDOW');
END;
/

関連項目:

26.4.3 メンテナンス・ウィンドウの削除

既存のメンテナンス・ウィンドウを削除するには、MAINTENANCE_WINDOW_GROUPウィンドウ・グループから該当するウィンドウを削除します。

ウィンドウは存在し続けますが、自動化メンテナンス・タスクは実行されません。このウィンドウに割り当てられているOracle Schedulerの他のジョブは、引き続き通常どおりに実行されます。

次の例は、ウィンドウ・グループからEARLY_MORNING_WINDOWを削除しています。

BEGIN
  DBMS_SCHEDULER.REMOVE_GROUP_MEMBER(
    group_name  => 'MAINTENANCE_WINDOW_GROUP',
    member      => 'EARLY_MORNING_WINDOW');
END;
/

26.5 自動化メンテナンス・タスクに対するリソース割当ての構成

自動化メンテナンス・タスクに対するリソース割当てを増減できます。

26.5.1 自動化メンテナンス・タスクに対するリソース割当てについて

デフォルトでは、事前定義のすべてのメンテナンス・ウィンドウで、リソース・プランDEFAULT_MAINTENANCE_PLANが使用されます。自動化メンテナンス・タスクは、そのサブプランORA$AUTOTASKのもとで実行されます。このサブプランによって、リソース割当て合計に対する配分が複数のメンテナンス・タスク間に均一に分割されます。

DEFAULT_MAINTENANCE_PLANには、次のリソース割当てが定義されています。

コンシューマ・グループ/サブプラン レベル1 最大使用率の制限

ORA$AUTOTASK

5%

90

OTHER_GROUPS

20%

-

SYS_GROUP

75%

-

このプランでは、SYS_GROUPコンシューマ・グループのセッションが優先されます。(このグループのセッションは、SYSおよびSYSTEMのユーザー・アカウントで作成されたセッションです。)SYS_GROUPのセッションで使用されないリソース割当ては、プランの他のコンシューマ・グループやサブプランに属するセッションによって共有されます。この割当てでは、5%がメンテナンス・タスクに、20%がユーザー・セッションに割り当てられます。ORA$AUTOTASKの最大使用率の制限は90です。つまり、CPUがアイドル状態であっても、このグループ/プランにはCPUリソースの90%を超える値を割り当てることができません。

自動化メンテナンス・タスクに対するリソース割当てを増減するには、DEFAULT_MAINTENANCE_PLANを調整します。詳細は、「自動化メンテナンス・タスクに対するリソース割当ての変更」を参照してください。

リソース・プランと同様に、コンシューマ・グループまたはサブプランによって使用されていない割当て部分は、他のコンシューマ・グループまたはサブプランで使用できます。データベース・リソース・マネージャは、CPUの100%が使用されるまで、リソース・プランによるリソース割当ての制限を開始しません。

ノート:

DEFAULT_MAINTENANCE_PLANはデフォルトですが、任意のリソース・プランを任意のメンテナンス・ウィンドウに割り当てることができます。メンテナンス・ウィンドウのリソース・プランを変更する場合は、サブプランORA$AUTOTASKが新しいプランに含まれていることを確認してください。

関連項目:

リソース・プランの詳細は、「Oracle Database Resource Managerを使用したリソースの管理」を参照してください。

26.5.2 自動化メンテナンス・タスクに対するリソース割当ての変更

メンテナンス・ウィンドウ内の自動化メンテナンス・タスクに対するリソース割当てを変更するには、そのウィンドウのリソース・プランのサブプランORA$AUTOTASKに割り当てられているリソースの割合を変更する必要があります。

(デフォルトでは、事前定義の各メンテナンス・ウィンドウのリソース・プランはDEFAULT_MAINTENANCE_PLANです。)また、プランのトップレベルでのリソース割当てが100%になるように、ウィンドウのリソース・プランの1つ以上のサブプランまたはコンシューマ・グループに対するリソース割当てを調整する必要があります。リソース割当ての変更の詳細は、「Oracle Database Resource Managerを使用したリソースの管理」を参照してください。

26.6 自動化メンテナンス・タスクの参照情報

Oracle Databaseには事前定義されたメンテナンス・ウィンドウがあります。また、データ・ディクショナリ・ビューもあるため、自動化メンテナンスに関する情報を問い合せることができます。

26.6.1 事前定義のメンテナンス・ウィンドウ

デフォルトでは、7種類のメンテナンス・ウィンドウが事前定義されており、それぞれが曜日を表します。

週末のメンテナンス・ウィンドウであるSATURDAY_WINDOWSUNDAY_WINDOWは、平日のメンテナンス・ウィンドウよりも期間が長くなっています。ウィンドウ・グループMAINTENANCE_WINDOW_GROUPは、この7種類のウィンドウで構成されています。表26-1に、事前定義のメンテナンス・ウィンドウのリストを示します。

表26-1 事前定義のメンテナンス・ウィンドウ

ウィンドウ名 説明

MONDAY_WINDOW

月曜の午後10時に開始して午前2時に終了します。

TUESDAY_WINDOW

火曜の午後10時に開始して午前2時に終了します。

WEDNESDAY_WINDOW

水曜の午後10時に開始して午前2時に終了します。

THURSDAY_WINDOW

木曜の午後10時に開始して午前2時に終了します。

FRIDAY_WINDOW

金曜の午後10時に開始して午前2時に終了します。

SATURDAY_WINDOW

土曜の午前6時に開始して20時間後に終了します。

SUNDAY_WINDOW

日曜の午前6時に開始して20時間後に終了します。

26.6.2 自動化メンテナンス・タスクのデータベース・ディクショナリ・ビュー

データ・ディクショナリ・ビューのセットを問い合せて、自動化メンテナンス・タスクについての情報を取得できます。

表26-2に、自動化メンテナンス・タスクのデータベース・ディクショナリ・ビューに関する情報を示します。

表26-2 自動化メンテナンス・タスクのデータベース・ディクショナリ・ビュー

ビュー名 説明

DBA_AUTOTASK_CLIENT_JOB

自動化メンテナンス・タスク用に作成され、現在実行中のスケジューラのジョブに関する情報が含まれます。また、これらのジョブのターゲット・オブジェクトだけでなく、同じタスクを以前にインスタンス化したときの付加的な統計に関する情報も示します。この付加的なデータの一部は、一般的なスケジューラ・ビューから取得されます。

DBA_AUTOTASK_CLIENT

7日間および30日間の各自動化メンテナンス・タスクに関する統計データが表示されます。

DBA_AUTOTASK_JOB_HISTORY

自動化メンテナンス・タスクのジョブ実行履歴がリストされます。ジョブの実行が終了すると、このビューにジョブが追加されます。

DBA_AUTOTASK_WINDOW_CLIENTS

MAINTENANCE_WINDOW_GROUPに属するウィンドウが、各メンテナンス・タスクのウィンドウの「有効」または「無効」ステータスとともにリストされます。主にCloud Controlによって使用されます。

DBA_AUTOTASK_CLIENT_HISTORY

各自動化メンテナンス・タスクのジョブ実行回数について、ウィンドウ別に履歴が表示されます。この情報は、Cloud Controlの「ジョブ履歴」ページで確認できます。

関連項目:

ビューの列の詳細は、「リソース・マネージャのデータ・ディクショナリ・ビュー」を参照してください。