データベース

Oracleテンポラリテーブルに対して、プログラムで動的に統計情報を取得する。

概要

Oracleで用意されているテンポラリテーブル
CREATE GLOBAL TEMPORARY TABLE で作成
これを、一時計算領域として利用することは
セッション単位でロックや重複などを管理しなくて良くなるため
プログラミングとしては非常に使いやすくなる。

ただ、 GLOBAL TEMPORARY TABLEは
外部セッションから見た場合、0件に見えるので
統計情報を取得した場合に常に0件として統計情報を取得してしまう。

したがって、大量のデータを扱う場合
適切なパフォーマンスが実現できない問題に直面する。

これを解決する手段として
プログラムで動的に統計情報を取得する
方法について解説する。

利用環境

>
Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production
>

サンプルソース

    v_current_schema        VARCHAR2(100); --カレントスキーマ (統計情報動的取得用)


    -- 利用するテンポラリテーブルの、セッション内統計情報動的取得
    select sys_context( 'userenv', 'CURRENT_SCHEMA' )  INTO v_current_schema
    from dual;

    DBMS_STATS.GATHER_TABLE_STATS(OWNNAME => v_current_schema, TABNAME => '取得したいテンポラリテーブル名', OPTIONS => 'GATHER'  ,DEGREE => 4, CASCADE => TRUE , force => TRUE , Estimate_percent => 50);

-データベース