26 自動データベース・メンテナンス・タスクの管理
Oracle Databaseでは、データベース管理者が通常実行する一般的なメンテナンス・タスクのうちのいくつかが自動化されました。これらの自動化メンテナンス・タスクは、システムの負荷が軽いと予測される時間帯に実行されます。管理者は、個々のメンテナンス・タスクを有効または無効にしたり、これらのタスクの実行時期やタスクに対するリソース割当てを構成できます。
ノート:
この章では、PL/SQLパッケージを使用して、自動化メンテナンス・タスクを管理する方法について説明します。簡単な方法として、Oracle Enterprise Manager Cloud Control (Cloud Control)のグラフィカル・インタフェースを使用する方法があります。
Cloud Controlを使用して自動メンテナンス・タスクを管理するには:
-
データベース・ホームページにアクセスします。
-
「管理」メニューから、「Oracle Scheduler」を選択し、「自動化メンテナンス・タスク」を選択します。
-
「自動化メンテナンス・タスク」ページで、「構成」をクリックします。
- 自動化メンテナンス・タスクについて
自動化メンテナンス・タスクとは、データベースのメンテナンス操作を実行するために、一定の間隔をおいて自動的に開始されるタスクです。問合せオプティマイザのスキーマ・オブジェクトに関する統計を収集するタスクなどはその一例です。 - メンテナンス・ウィンドウについて
メンテナンス・ウィンドウは、自動化メンテナンス・タスクが実行される連続した時間間隔です。メンテナンス・ウィンドウは、MAINTENANCE_WINDOW_GROUP
という名前のウィンドウ・グループに属するOracle Schedulerウィンドウです。 - 自動化メンテナンス・タスクの構成
メンテナンス・ウィンドウのサブセットで特定のメンテナンス・タスクを有効または無効にするには、DBMS_AUTO_TASK_ADMIN
PL/SQLパッケージを使用します。 - メンテナンス・ウィンドウの構成
事前定義のメンテナンス・ウィンドウをデータベース環境に適した時間に調整したり、新しいメンテナンス・ウィンドウを作成できます。メンテナンス・ウィンドウは、DBMS_SCHEDULER
PL/SQLパッケージを使用してカスタマイズできます。 - 自動化メンテナンス・タスクに対するリソース割当ての構成
自動化メンテナンス・タスクに対するリソース割当てを増減できます。 - 自動化メンテナンス・タスクの参照情報
Oracle Databaseには事前定義のメンテナンス・ウィンドウが用意されています。また、データ・ディクショナリ・ビューもあるため、自動化メンテナンスに関する情報を問い合せることができます。
親トピック: データベース・リソースの管理とタスクのスケジューリング
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パッケージを使用します。
- すべてのメンテナンス・ウィンドウに対するメンテナンス・タスクの有効化と無効化
1回の操作ですべてのメンテナンス・ウィンドウに対して特定の自動化メンテナンス・タスクを無効または有効にできます。 - 特定のメンテナンス・ウィンドウに対するメンテナンス・タスクの有効化と無効化
デフォルトでは、すべての事前定義のメンテナンス・ウィンドウで、すべてのメンテナンス・タスクが実行されます。管理者は、特定のウィンドウに対してメンテナンス・タスクを無効にできます。
親トピック: 自動データベース・メンテナンス・タスクの管理
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;
関連項目:
-
DBMS_AUTO_TASK_ADMIN
PL/SQLパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
親トピック: 自動化メンテナンス・タスクの構成
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パッケージを使用してカスタマイズできます。
- メンテナンス・ウィンドウの変更
DBMS_SCHEDULER
PL/SQLパッケージには、ウィンドウの属性を変更するためのSET_ATTRIBUTE
プロシージャが含まれています。 - 新規メンテナンス・ウィンドウの作成
新規メンテナンス・ウィンドウを作成するには、Oracle Schedulerウィンドウ・オブジェクトを作成して、ウィンドウ・グループMAINTENANCE_WINDOW_GROUP
に追加する必要があります。 - メンテナンス・ウィンドウの削除
既存のメンテナンス・ウィンドウを削除するには、MAINTENANCE_WINDOW_GROUP
ウィンドウ・グループから該当するウィンドウを削除します。
親トピック: 自動データベース・メンテナンス・タスクの管理
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; /
関連項目:
-
DBMS_SCHEDULER
パッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
親トピック: メンテナンス・ウィンドウの構成
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; /
関連項目:
-
DBMS_SCHEDULER
パッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
親トピック: メンテナンス・ウィンドウの構成
26.5 自動化メンテナンス・タスクに対するリソース割当ての構成
自動化メンテナンス・タスクに対するリソース割当てを増減できます。
- 自動化メンテナンス・タスクに対するリソース割当てについて
デフォルトでは、事前定義のすべてのメンテナンス・ウィンドウで、リソース・プランDEFAULT_MAINTENANCE_PLAN
が使用されます。自動化メンテナンス・タスクは、そのサブプランORA$AUTOTASK
のもとで実行されます。このサブプランによって、リソース割当て合計に対する配分が複数のメンテナンス・タスク間に均一に分割されます。 - 自動化メンテナンス・タスクに対するリソース割当ての変更
メンテナンス・ウィンドウ内の自動化メンテナンス・タスクに対するリソース割当てを変更するには、そのウィンドウのリソース・プランのサブプランORA$AUTOTASK
に割り当てられているリソースの割合を変更する必要があります。
親トピック: 自動データベース・メンテナンス・タスクの管理
26.5.1 自動化メンテナンス・タスクに対するリソース割当てについて
デフォルトでは、事前定義のすべてのメンテナンス・ウィンドウで、リソース・プランDEFAULT_MAINTENANCE_PLAN
が使用されます。自動化メンテナンス・タスクは、そのサブプランORA$AUTOTASK
のもとで実行されます。このサブプランによって、リソース割当て合計に対する配分が複数のメンテナンス・タスク間に均一に分割されます。
DEFAULT_MAINTENANCE_PLAN
には、次のリソース割当てが定義されています。
コンシューマ・グループ/サブプラン | レベル1 | 最大使用率の制限 |
---|---|---|
|
5% |
90 |
|
20% |
- |
|
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には事前定義されたメンテナンス・ウィンドウがあります。また、データ・ディクショナリ・ビューもあるため、自動化メンテナンスに関する情報を問い合せることができます。
- 事前定義のメンテナンス・ウィンドウ
デフォルトでは、7種類のメンテナンス・ウィンドウが事前定義されており、それぞれが曜日を表します。 - 自動化メンテナンス・タスクのデータベース・ディクショナリ・ビュー
データ・ディクショナリ・ビューのセットを問い合せて、自動化メンテナンス・タスクについての情報を取得できます。
親トピック: 自動データベース・メンテナンス・タスクの管理
26.6.1 事前定義のメンテナンス・ウィンドウ
デフォルトでは、7種類のメンテナンス・ウィンドウが事前定義されており、それぞれが曜日を表します。
週末のメンテナンス・ウィンドウであるSATURDAY_WINDOW
とSUNDAY_WINDOW
は、平日のメンテナンス・ウィンドウよりも期間が長くなっています。ウィンドウ・グループMAINTENANCE_WINDOW_GROUP
は、この7種類のウィンドウで構成されています。表26-1に、事前定義のメンテナンス・ウィンドウのリストを示します。
表26-1 事前定義のメンテナンス・ウィンドウ
ウィンドウ名 | 説明 |
---|---|
|
月曜の午後10時に開始して午前2時に終了します。 |
|
火曜の午後10時に開始して午前2時に終了します。 |
|
水曜の午後10時に開始して午前2時に終了します。 |
|
木曜の午後10時に開始して午前2時に終了します。 |
|
金曜の午後10時に開始して午前2時に終了します。 |
|
土曜の午前6時に開始して20時間後に終了します。 |
|
日曜の午前6時に開始して20時間後に終了します。 |
親トピック: 自動化メンテナンス・タスクの参照情報
26.6.2 自動化メンテナンス・タスクのデータベース・ディクショナリ・ビュー
データ・ディクショナリ・ビューのセットを問い合せて、自動化メンテナンス・タスクについての情報を取得できます。
表26-2に、自動化メンテナンス・タスクのデータベース・ディクショナリ・ビューに関する情報を示します。
表26-2 自動化メンテナンス・タスクのデータベース・ディクショナリ・ビュー
ビュー名 | 説明 |
---|---|
|
自動化メンテナンス・タスク用に作成され、現在実行中のスケジューラのジョブに関する情報が含まれます。また、これらのジョブのターゲット・オブジェクトだけでなく、同じタスクを以前にインスタンス化したときの付加的な統計に関する情報も示します。この付加的なデータの一部は、一般的なスケジューラ・ビューから取得されます。 |
|
7日間および30日間の各自動化メンテナンス・タスクに関する統計データが表示されます。 |
|
自動化メンテナンス・タスクのジョブ実行履歴がリストされます。ジョブの実行が終了すると、このビューにジョブが追加されます。 |
|
|
|
各自動化メンテナンス・タスクのジョブ実行回数について、ウィンドウ別に履歴が表示されます。この情報は、Cloud Controlの「ジョブ履歴」ページで確認できます。 |
関連項目:
ビューの列の詳細は、「リソース・マネージャのデータ・ディクショナリ・ビュー」を参照してください。
親トピック: 自動化メンテナンス・タスクの参照情報