Oracle Database 管理者ガイド 11gリリース1(11.1) E05760-03 |
|
Oracle Databaseでは、データベース管理者が通常実行する一般的なメンテナンス・タスクの多くが自動化されました。これらの自動化メンテナンス・タスクは、システムの負荷が軽いと予測される時間帯に実行されます。管理者は、個々のメンテナンス・タスクを有効または無効にしたり、これらのタスクの実行時期やタスクに対するリソース割当てを構成できます。
この章の内容は次のとおりです。
自動化メンテナンス・タスクとは、データベースのメンテナンス操作を実行するために、一定の間隔をおいて自動的に開始されるタスクです。問合せオプティマイザのスキーマ・オブジェクトに関する統計を収集するタスクなどはその一例です。自動化メンテナンス・タスクはメンテナンス・ウィンドウ内で実行されます。このウィンドウは、システムの負荷が低い時間帯にタスクが発生するように事前定義した時間間隔です。管理者は、データベースのリソース使用パターンに基づいてメンテナンス・ウィンドウをカスタマイズしたり、特定のデフォルト・ウィンドウでの実行を禁止できます。独自のメンテナンス・ウィンドウを作成することもできます。
Oracle Databaseでは、3種類の自動化メンテナンス・タスクが事前定義されています。
セグメント・アドバイザを手動で実行すると、最新の推奨事項を取得したり、自動セグメント・アドバイザで再生可能な領域を調査しなかったセグメントについて推奨事項を取得することもできます。
デフォルトでは、これら3種類の自動化メンテナンス・タスクは、すべてのメンテナンス・ウィンドウで実行するように構成されています。
メンテナンス・ウィンドウは、自動化メンテナンス・タスクが実行される連続した時間間隔です。メンテナンス・ウィンドウは、MAINTENANCE_WINDOW_GROUP
というウィンドウ・グループに属するOracle Schedulerのウィンドウです。スケジューラのウィンドウは、単純な繰返し間隔(毎週土曜の午前0時から午前6時の間など)の場合や複雑な間隔(会社の休業日を除いて、毎月最後の稼働日の午前0時から午前6時の間など)の場合があります。
メンテナンス・ウィンドウがオープンすると、Oracle Databaseでは、そのウィンドウでの実行がスケジュールされている各メンテナンス・タスクに対してOracle Schedulerのジョブが作成されます。各ジョブには、実行時に生成されるジョブ名が割り当てられます。自動化メンテナンス・タスクのジョブ名はすべてORA$AT
で始まります。たとえば、自動セグメント・アドバイザのジョブには、ORA$AT_SA_SPC_SY_26
という名前が指定されます。自動化メンテナンス・タスクのジョブが終了すると、そのジョブはOracle Schedulerのジョブ・システムから削除されます。ただし、スケジューラのジョブ履歴には記録が残ります。
非常に長いメンテナンス・ウィンドウの場合、自動SQLチューニング・アドバイザを除くすべての自動化メンテナンス・タスクは4時間ごとに再起動されます。この機能によって、ウィンドウ・サイズに関係なく、メンテナンス・タスクが定期的に実行されます。
自動化メンテナンス・タスクのフレームワークは、データベースに定義されているメンテナンス・ウィンドウに依存しています。表24-1に、新規Oracle Databaseの各インストールで自動的に定義されるメンテナンス・ウィンドウのリストを示します。
メンテナンス・ウィンドウのサブセットで特定のメンテナンス・タスクを有効または無効にするには、DBMS_AUTO_TASK_ADMIN
PL/SQLパッケージを使用します。
この項の内容は、次のとおりです。
管理者は、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;
関連項目:
|
デフォルトでは、すべてのメンテナンス・タスクが事前定義のすべてのメンテナンス・ウィンドウで実行されます。管理者は、特定のウィンドウに対してメンテナンス・タスクを無効にできます。次の例は、ウィンドウMONDAY_WINDOW
での自動SQLチューニング・アドバイザの実行を無効にしています。
BEGIN dbms_auto_task_admin.disable( client_name => 'sql tuning advisor', operation => NULL, window_name => 'MONDAY_WINDOW'); END;
事前定義のメンテナンス・ウィンドウをデータベース環境に適した時間に調整したり、新しいメンテナンス・ウィンドウを作成できます。メンテナンス・ウィンドウは、DBMS_SCHEDULER
PL/SQLパッケージを使用してカスタマイズできます。
この項の内容は、次のとおりです。
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
を使用して再度有効にする必要があります。現在オープン中のウィンドウを変更した場合は、そのウィンドウの次回オープンまで変更内容が反映されません。
DBMS_SCHEDULER
PL/SQLパッケージには、ADD_WINDOW_GROUP_MEMBER
サブプログラムが用意されています。このサブプログラムはウィンドウをウィンドウ・グループに追加します。メンテナンス・ウィンドウを作成するには、スケジューラのウィンドウを作成して、ウィンドウ・グループMAINTENANCE_WINDOW_GROUP
に追加する必要があります。
次の例は、DBMS_SCHEDULER
パッケージを使用して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_window_group_member( group_name => 'MAINTENANCE_WINDOW_GROUP', window_list => 'EARLY_MORNING_WINDOW'); END;
関連項目:
|
既存のメンテナンス・ウィンドウを削除するには、MAINTENANCE_WINDOW_GROUP
ウィンドウ・グループから該当するウィンドウを削除します。ウィンドウは存在し続けますが、自動化メンテナンス・タスクは実行されません。このウィンドウに割り当てられているスケジューラの他のジョブは、引き続き通常どおりに実行されます。
次の例は、ウィンドウ・グループからEARLY_MORNING_WINDOW
を削除しています。
BEGIN DBMS_SCHEDULER.REMOVE_WINDOW_GROUP_MEMBER( group_name => 'MAINTENANCE_WINDOW_GROUP', window_list => 'EARLY_MORNING_WINDOW'); END;
関連項目:
|
ここでは、メンテナンス・ウィンドウに対するリソース割当てについて説明します。この項の内容は、次のとおりです。
デフォルトでは、事前定義のすべてのメンテナンス・ウィンドウで、リソース・プランDEFAULT_MAINTENANCE_PLAN
が使用されます。自動化メンテナンス・タスクは、そのサブプランORA$AUTOTASK_SUB_PLAN
のもとで実行されます。このサブプランによって、リソース割当て合計に対する配分が複数のメンテナンス・タスク間に均一に分割されます。
DEFAULT_MAINTENANCE_PLAN
には、次のリソース割当てが定義されています。
コンシューマ・グループ/サブプラン | レベル1 | レベル2 |
---|---|---|
|
- |
25% |
|
- |
5% |
|
- |
70% |
|
100% |
- |
このプランでは、SYS_GROUP
コンシューマ・グループのセッションが優先されます(このグループのセッションは、SYS
およびSYSTEM
のユーザー・アカウントで作成されたセッションです)。SYS_GROUP
のセッションで使用されないリソース割当ては、プランの他のコンシューマ・グループやサブプランに属するセッションによって共有されます。この割当てでは、25%がメンテナンス・タスクに、5%が診断操作を実行するバックグラウンド・プロセスに、70%がユーザー・セッションに割り当てられます。自動化メンテナンス・タスクに対するリソース割当てを増減するには、DEFAULT_MAINTENANCE_PLAN
を調整します。詳細は、「自動化メンテナンス・タスクに対するリソース割当ての変更」を参照してください。
リソース・プランと同様に、コンシューマ・グループまたはサブプランによって使用されていない割当て部分は、他のコンシューマ・グループまたはサブプランで使用できます。データベース・リソース・マネージャは、CPUの100%が使用されるまで、リソース・プランによるリソース割当ての制限を開始しません。
メンテナンス・ウィンドウ内の自動化メンテナンス・タスクに対するリソース割当てを変更するには、そのウィンドウのリソース・プランのサブプランORA$AUTOTASK_SUB_PLAN
に割り当てられているリソースの割合を変更する必要があります(デフォルトでは、事前定義の各メンテナンス・ウィンドウのリソース・プランはDEFAULT_MAINTENANCE_PLAN
です)。プランのトップレベルでのリソース割当てが100%になるように、ウィンドウのリソース・プランの1つ以上のサブプランまたはコンシューマ・グループに対するリソース割当てを調整する必要があります。リソース割当ての変更の詳細は、第25章「Oracle Database Resource Managerを使用したリソース割当ての管理」を参照してください。
ここでは、自動化メンテナンス・タスクについて説明します。この項の内容は、次のとおりです。
デフォルトでは、7種類のメンテナンス・ウィンドウが事前定義されており、それぞれが曜日を表します。週末のメンテナンス・ウィンドウであるSATURDAY_WINDOW
とSUNDAY_WINDOW
は、平日のメンテナンス・ウィンドウよりも期間が長くなっています。ウィンドウ・グループMAINTENANCE_WINDOW_GROUP
は、この7種類のウィンドウで構成されています。表24-1に、事前定義のメンテナンス・ウィンドウのリストを示します。
表24-2に、自動化メンテナンス・タスクのデータベース・ディクショナリ・ビューに関する情報を示します。