31 DBMS_AUTO_INDEX

DBMS_AUTO_INDEXパッケージは、Oracleデータベースの自動索引を管理するためのインタフェースを提供します。

この章のトピックは、次のとおりです:

31.1 DBMS_AUTO_INDEXの概要

DBMS_AUTO_INDEXパッケージは、自動索引を構成して、Oracleデータベースでの自動索引付け操作のレポートを生成するためのインタフェースです。

31.2 DBMS_AUTO_INDEXサブプログラムの要約

この表は、DBMS_AUTO_INDEXパッケージのサブプログラムを示し、簡単に説明しています。

表31-1 DBMS_AUTO_INDEXパッケージのサブプログラム

プロシージャ 説明

CONFIGUREプロシージャ

自動索引付けに関連する設定を構成します。

DROP_AUTO_INDEXESプロシージャ

このプロシージャを使用して、保存パラメータの設定をオーバーライドする自動作成索引を手動で削除できます。

DROP_SECONDARY_INDEXESプロシージャ

スキーマまたは表から、制約に使用されるもの以外のすべての索引を削除します。

REPORT_ACTIVITYファンクション

特定の期間中にデータベースで実行された自動索引付け操作のレポートを返します。

REPORT_LAST_ACTIVITYファンクション

データベースで最後に実行された自動索引付け操作のレポートを返します。

31.2.1 CONFIGUREプロシージャ

このプロシージャでは、自動索引付けに関連する設定を構成します。

構文

DBMS_AUTO_INDEX.CONFIGURE (
   parameter_name         IN VARCHAR2,
   parameter_value        IN VARCHAR2,
   allow                  IN BOOLEAN  DEFAULT TRUE);

パラメータ

表31-2 CONFIGUREプロシージャのパラメータ

パラメータ 説明

parameter_name

自動索引付けの構成設定。次の値のうち1つを取ることができます。

  • AUTO_INDEX_MODE: 自動索引の操作モード。次の値のうち1つを取ることができます。

    • IMPLEMENT: このモードでは、新しい自動索引が可視索引として作成されます。また、既存の不可視の自動索引も可視索引に設定されます。このモードでは、SQL文で自動索引が使用できるようになります。

    • REPORT ONLY: このモードでは、新しい自動索引が不可視の索引として作成され、SQL文では使用できなくなります。

    • OFF:モードをOFFに設定することで、新しい自動索引が考慮され、作成されなくなります。ただし、既存の自動索引は無効化されません。

  • AUTO_INDEX_SCHEMA: 自動索引の使用を包含または除外するスキーマ。その値は大/小文字が区別され、ワイルドカードを使用できます。動作の制御には、allowパラメータを使用します。

    自動索引付けプロセスでは、2つのスキーマ・リスト(包含リストと除外リスト)を管理します。包含リストには、自動索引を使用できるスキーマが含まれています。除外リストには、自動索引を使用できないスキーマが含まれています。どちらのリストも初期状態では空になっていて、自動索引けが有効化されているデータベースでは、そのデータベース内のすべてのスキーマで自動索引を使用できます。

    包含リストに1つ以上のスキーマが含まれている場合は、包含リストに登録されているスキーマのみが自動索引を使用できます。

    包含リストが空で、除外リストに1つ以上のスキーマが含まれている場合は、除外リストに登録されているスキーマ以外のすべてのスキーマで自動索引を使用できます。

    両方のリスト(包含リストと除外リスト)に1つ以上のスキーマが含まれている場合は、除外リストに登録されたスキーマ以外のすべてのスキーマで自動索引を使用できます。

  • AUTO_INDEX_RETENTION_FOR_AUTO: 未使用の自動索引をデータベースで保持する日数。この日数を経過すると、その自動索引は削除されます。デフォルト値は373日です。

  • AUTO_INDEX_RETENTION_FOR_MANUAL: 手動で作成した未使用の索引(自動索引以外)をデータベースで保持する日数。この日数を経過すると、その索引は削除されます。NULLに設定すると、手動で作成した索引は自動索引付けプロセスでは削除されなくなります。デフォルト値はNULLです。

  • AUTO_INDEX_REPORT_RETENTION: 自動索引付けのログが削除されるまでデータベースで保持する日数。このログに基づいて自動索引付けレポートが作成されるため、AUTO_INDEX_REPORT_RETENTIONに指定した値を超える期間の自動索引付けレポートは生成できません。デフォルト値は373日です。

  • AUTO_INDEX_DEFAULT_TABLESPACE: 自動索引の格納に使用する表領域。デフォルトはNULLです。データベースの作成時に指定したデフォルトの永続表領域が、自動索引の格納に使用されることを意味します。

  • AUTO_INDEX_SPACE_BUDGET: 自動索引に使用する表領域サイズの割合。この構成設定は、データベースの作成時に指定したデフォルト表領域が、自動索引の格納に使用される場合にのみ使用できます。

  • AUTO_INDEX_COMPRESSION:

    自動索引圧縮の拡張索引圧縮を有効および無効にする値。サポートされる値は次のとおりです。
    • ON:自動索引圧縮を有効化するため
    • OFF:自動索引圧縮を無効にします。

    デフォルト値はOFFです。

parameter_value

parameter_nameで指定した構成設定の値。

NULLに設定すると、構成設定にデフォルト値が割り当てられます。

allow

このパラメータは、AUTO_INDEX_SCHEMA構成設定にのみ適用されます。有効な値は次のとおりです。

  • TRUE: 指定したスキーマを包含リストに追加します。

  • FALSE: 指定したスキーマを除外リストに追加します。

  • NULL: 指定したスキーマが現在追加されているリストから削除されます。

包含リストと除外リストの詳細は、AUTO_INDEX_SCHEMA構成設定の説明を参照してください。

これらの例は、初期状態の包含リストと除外リストが空であるという前提に基づいています。

次の例では、除外リストにSHスキーマとHRスキーマを追加して、SHスキーマとHRスキーマのみが自動索引を使用できないようにします。

begin
    dbms_auto_index.configure(
         parameter_name  => 'AUTO_INDEX_SCHEMA', 
         parameter_value => 'SH',
         allow           => FALSE);

    dbms_auto_index.configure(
         parameter_name  => 'AUTO_INDEX_SCHEMA', 
         parameter_value => 'HR',
         allow           => FALSE);
end;

次の例では、除外リストからHRスキーマを削除して、このスキーマでも自動索引が使用できるようにします。この時点で、除外リストにはSHスキーマのみが追加されているため、このスキーマのみが自動索引を使用できません。

begin
    dbms_auto_index.configure(
         parameter_name  => 'AUTO_INDEX_SCHEMA', 
         parameter_value => 'HR',
         allow           => NULL);
end;

次の例では、除外リストからすべてのスキーマを削除して、すべてのスキーマで自動索引を使用できるようにします。

begin
    dbms_auto_index.configure(
         parameter_name  => 'AUTO_INDEX_SCHEMA', 
         parameter_value => NULL,
         allow           => TRUE);
end;

次の例では、包含リストにHRスキーマを追加して、HRスキーマのみが自動索引を使用できるようにします。

begin
    dbms_auto_index.configure(
         parameter_name  => 'AUTO_INDEX_SCHEMA', 
         parameter_value => 'HR',
         allow           => TRUE);
end;

次の例では、自動索引の保存期間を90日間に設定します。

begin
    dbms_auto_index.configure(
         parameter_name  => 'AUTO_INDEX_RETENTION_FOR_AUTO', 
         parameter_value => '90');
end;

次の例では、自動索引の保存期間をデフォルト値の373日間に設定します。

begin
    dbms_auto_index.configure(
         parameter_name  => 'AUTO_INDEX_RETENTION_FOR_AUTO', 
         parameter_value => NULL);
end;

31.2.2 DROP_AUTO_INDEXESプロシージャ

このプロシージャを使用して、保存パラメータの設定をオーバーライドする自動作成索引を手動で削除できます。

構文

DBMS_AUTO_INDEX.DROP_AUTO_INDEXES (
   owner           IN  VARCHAR2 DEFAULT NULL,
   index_name      IN  VARCHAR2 DEFAULT NULL,
   allow_recreate  IN  BOOLEAN DEFAULT FALSE);

パラメータ

表31-3 DROP_AUTO_INDEXESプロシージャのパラメータ

パラメータ 説明

owner

索引所有者の名前。

index_name

索引の名前。
allow_recreate このパラメータは、削除された索引の自動作成を再び許可または禁止する場合に設定します。

単一の索引を削除して、再作成を許可します。

exec dbms_auto_index.drop_auto_indexes('SH','"SYS_AI_612ud3j5ngf0c"',TRUE);

SHが所有するすべての索引を削除して、再作成を許可します。

exec dbms_auto_index.drop_auto_indexes('SH',NULL,TRUE);

HRが所有するすべての索引を削除して、再作成を禁止してから、再作成ステータスを変更して元のように許可します。

exec dbms_auto_index.drop_auto_indexes('HR',NULL);
exec dbms_auto_index.drop_auto_indexes('HR', NULL, TRUE);

使用上のノート

  • パラメータ所有者およびindex_nameの値が明示的にNULLに設定されている場合、ユーザーが権限を持つすべての自動索引が削除されます。
  • 所有者が明示的に指定され、index_nameNULLに設定されている場合、指定されたスキーマ内のすべての自動索引が削除されます。削除された索引は、デフォルトではシステムによって自動的に再作成されません。この動作を変更するには、allow_recreateパラメータをTRUEに設定します。
  • このプロシージャは、削除された索引に関連付けられているallow_recreateステータスをFALSEからTRUEに更新します。逆も同様です。

31.2.3 DROP_SECONDARY_INDEXESプロシージャ

このプロシージャでは、表またはスキーマから制約に使用されるもの以外のすべての索引を削除します。

構文

DBMS_AUTO_INDEX.DROP_SECONDARY_INDEXES (
   ownname    IN  VARCHAR2 DEFAULT NULL,
   tabname    IN  VARCHAR2 DEFAULT NULL);

パラメータ

表31-4 DROP_SECONDARY_INDEXESプロシージャのパラメータ

パラメータ 説明

ownname

(オプション)すべての索引を削除する必要があるスキーマの名前。

ノート: 制約に使用されている索引は削除されません。

tabname

(オプション)すべての索引を削除する必要がある表の名前。

ノート: 制約に使用されている索引は削除されません。

次の例では、SHスキーマから制約に使用されるもの以外のすべての索引を削除します。

begin
    dbms_auto_index.drop_secondary_indexes('SH');
end;

次の例では、HRスキーマのEMP表から制約に使用されるもの以外のすべての索引を削除します。

begin
    dbms_auto_index.drop_secondary_indexes('HR', 'EMP');
end;

次の例では、データベース内のすべてのスキーマから、制約に使用されるもの以外のユーザーが削除権限を持つすべての索引を削除します。

begin
    dbms_auto_index.drop_secondary_indexes;
end;

31.2.4 REPORT_ACTIVITYファンクション

このファンクションは、特定の期間中にデータベースで実行された自動索引付け操作のレポートを返します。

構文

DBMS_AUTO_INDEX.REPORT_ACTIVITY (
   activity_start  IN  TIMESTAMP WITH TIME ZONE DEFAULT SYSTIMESTAMP - 1,
   activity_end    IN  TIMESTAMP WITH TIME ZONE DEFAULT SYSTIMESTAMP,
   type            IN  VARCHAR2 DEFAULT 'TEXT',
   section         IN  VARCHAR2 DEFAULT 'ALL',
   level           IN  VARCHAR2 DEFAULT 'TYPICAL')
RETURN CLOB;

パラメータ

表31-5 REPORT_ACTIVITYファンクションのパラメータ

パラメータ 説明

activity_start

実行された自動索引付け操作に関するレポートの対象になる開始時刻。NULLを指定すると、最後に実行された自動索引付け操作がレポートの対象になります。このパラメータに値が指定されていない場合は、現在の時刻から1日(24時間)前が開始時刻とみなされます。

activity_end

実行された自動索引付け操作に関するレポートの対象になる終了時刻。値が指定されていない場合は、現在の時刻が終了時刻とみなされます。

type

レポートの形式。次の値のうち1つを取ることができます。

  • TEXT

  • HTML

  • XML

デフォルト値は、TEXTです。

section

レポートに含めるセクション。次の値の組合せを指定できます。

  • SUMMARY: レポートにサマリーの詳細セクションのみを含めます。

  • INDEX_DETAILS: レポートに自動索引の詳細セクションのみを含めます。

  • VERIFICATION_DETAILS: レポートに自動索引検証の詳細セクションのみを含めます。

  • ERRORS: レポートにエラーの詳細セクションのみを含めます。

  • ALL: レポートにすべてのセクション(サマリーの詳細、自動索引の詳細、自動索引検証の詳細およびエラーの詳細)を含めます。これはデフォルト値です。

次の例に示すように、これらの値の組合せは+演算子または-演算子を使用して指定できます。

  • SUMMARY +INDEX_DETAILS +ERRORS: レポートにサマリーの詳細、自動索引の詳細およびエラーの詳細セクションを含めます。

  • ALL -ERRORS: レポートにエラーの詳細セクション以外のすべてのセクションを含めます。

level

レポートに含める自動索引付け情報のレベル。次の値のうち1つを取ることができます。

  • BASIC: レポートに基本的な自動索引付け情報を含めます。

  • TYPICAL: レポートに一般的な自動索引付け情報を含めます。これはデフォルト値です。

  • ALL: レポートにすべての自動索引付け情報を含めます。

戻り値

指定した期間中にデータベースで実行された自動索引付け操作のレポート。

次の例では、過去24時間の間に実行された自動索引付け操作の一般的なレポートを生成します。レポートはテキスト形式で生成され、すべてのセクション(サマリーの詳細、自動索引の詳細、自動索引検証の詳細およびエラーの詳細)が含まれます。

declare
  report clob := null;
begin
  report := dbms_auto_index.report_activity();
end;

31.2.5 REPORT_LAST_ACTIVITYファンクション

このファンクションは、データベースで最後に実行された自動索引付け操作のレポートを返します。

構文

DBMS_AUTO_INDEX.REPORT_LAST_ACTIVITY (
   type            IN  VARCHAR2 DEFAULT 'TEXT',
   section         IN  VARCHAR2 DEFAULT 'ALL',
   level           IN  VARCHAR2 DEFAULT 'TYPICAL')
RETURN CLOB;

パラメータ

表31-6 REPORT_LAST_ACTIVITYファンクションのパラメータ

パラメータ 説明

type

レポートの形式。次の値のうち1つを取ることができます。

  • TEXT

  • HTML

  • XML

デフォルト値は、TEXTです。

section

レポートに含めるセクション。次の値の組合せを指定できます。

  • SUMMARY: レポートにサマリーの詳細セクションのみを含めます。

  • INDEX_DETAILS: レポートに自動索引の詳細セクションのみを含めます。

  • VERIFICATION_DETAILS: レポートに自動索引検証の詳細セクションのみを含めます。

  • ERRORS: レポートにエラーの詳細セクションのみを含めます。

  • ALL: レポートにすべてのセクション(サマリーの詳細、自動索引の詳細、自動索引検証の詳細およびエラーの詳細)を含めます。これはデフォルト値です。

次の例に示すように、これらの値の組合せは+演算子または-演算子を使用して指定できます。

  • SUMMARY +INDEX_DETAILS +ERRORS: レポートにサマリーの詳細、自動索引の詳細およびエラーの詳細セクションを含めます。

  • ALL -ERRORS: レポートにエラーの詳細セクション以外のすべてのセクションを含めます。

level

レポートに含める自動索引付け情報のレベル。次の値のうち1つを取ることができます。

  • BASIC: レポートに基本的な自動索引付け情報を含めます。

  • TYPICAL: レポートに一般的な自動索引付け情報を含めます。これはデフォルト値です。

  • ALL: レポートにすべての自動索引付け情報を含めます。

戻り値

データベースで最後に実行された自動索引付け操作のレポート。

次の例では、データベースで最後に実行された自動索引付け操作の一般的なレポートを生成します。レポートはテキスト形式で生成され、すべてのセクション(サマリーの詳細、自動索引の詳細、自動索引検証の詳細およびエラーの詳細)が含まれます。

declare
  report clob := null;
begin
  report := dbms_auto_index.report_last_activity();
end;