17 オプティマイザ統計のインポートとエクスポート

データ・ディクショナリとユーザー定義の統計表間でオプティマイザ統計をエクスポートおよびインポートできます。また、データベース間で統計のコピーもできます。

17.1 オプティマイザ統計の転送について

データベース間でオプティマイザ統計を転送する場合は、DBMS_STATSを使用してステージング表間で統計をコピーし、ツールを使用して表のコンテンツに宛先データベースがアクセスできるようにする必要があります。

17.1.1 オプティマイザ統計の転送の目的

インポートとエクスポートは、本番統計を使用したアプリケーションのテストを行う場合に特に役立ちます。

開発者は、アプリケーションのデプロイ前に、実際的な環境で問合せ計画をチューニングする必要があります。一般的なシナリオでは、DBMS_STATS.EXPORT_SCHEMA_STATSを使用して、本番データベースからテスト・データベースにスキーマ統計をエクスポートします。

17.1.2 オプティマイザ統計の転送の仕組み

通常の転送操作には、DBMS_STATSとファイル転送ユーティリティを組み合せて使用します。

次の図は、Oracle Data Pumpおよびftpを使用したプロセスを示しています。

図17-1 オプティマイザ統計の転送

図17-1の説明が続きます
「図17-1 オプティマイザ統計の転送」の説明

基本ステップは次のとおりです。

  1. 本番データベースで、DBMS_STATS.EXPORT_SCHEMA_STATSを使用してデータ・ディクショナリからステージング表に統計をコピーします。

  2. Oracle Data Pumpを使用してステージング表から.dmpファイルに統計をエクスポートします。

  3. ftpなどの転送ツールを使用して本番ホストからテスト・ホストに.dmpファイルを転送します。

  4. テスト・データベースで、Oracle Data Pumpを使用して.dmpファイルからステージング表に統計をインポートします。

  5. DBMS_STATS.IMPORT_SCHEMA_STATSを使用してステージング表からデータ・ディクショナリに統計をコピーします。

17.1.3 オプティマイザ統計をインポートおよびエクスポートするためのユーザー・インタフェース

DBMS_STATSは、スキーマと表の統計をインポートおよびエクスポートするためのインタフェースを提供します。

次のDBMS_STATSのサブプログラムを使用すると、スキーマと各種の表をエクスポートできます。

表17-1 スキーマと表統計をエクスポートするためのサブプログラム

サブプログラム 説明

EXPORT_DATABASE_STATS

このプロシージャは、データベース内のすべてのオブジェクトに関する統計情報をエクスポートして、statown.stattabで識別されるユーザー統計表に格納します。

EXPORT_DICTIONARY_STATS

このプロシージャは、すべてのデータ・ディクショナリのスキーマ(SYSSYSTEMおよびRDBMSコンポーネントのスキーマ)に関する統計情報をエクスポートして、stattabで識別されるユーザー統計表に格納します。

EXPORT_FIXED_OBJECT_STATS

このプロシージャは、固定表に関する統計情報をエクスポートして、stattabで識別されるユーザー統計表に格納します。

EXPORT_SCHEMA_STATS

このプロシージャは、ownnameで識別されるスキーマのすべてのオブジェクトに関する統計情報をエクスポートして、stattabで識別されるユーザー統計表に格納します。

デフォルトでは、stat_categoryパラメータにはリアルタイム統計の実行中に収集された統計が含まれます。REALTIME_STATS値ではオンライン統計のみが指定されます。

EXPORT_TABLE_STATS

このプロシージャは、特定の表に関する統計情報(関連する索引統計を含む)をエクスポートして、stattabで識別されるユーザー統計表に格納します。

デフォルトでは、stat_categoryパラメータにはリアルタイム統計の実行中に収集された統計が含まれます。REALTIME_STATS値ではオンライン統計のみが指定されます。

次のDBMS_STATSのサブプログラムを使用すると、スキーマと各種の表をインポートできます。

表17-2 オプティマイザ統計をインポートするためのサブプログラム

サブプログラム 説明

IMPORT_DATABASE_STATS

このプロシージャは、データベース内のすべてのオブジェクトに関する統計情報をユーザー統計表からインポートして、データ・ディクショナリに格納します。

IMPORT_DICTIONARY_STATS

このプロシージャは、すべてのデータ・ディクショナリのスキーマ(SYSSYSTEMおよびRDBMSコンポーネントのスキーマ)に関する統計情報をユーザー統計表からインポートして、ディクショナリに格納します。

IMPORT_FIXED_OBJECT_STATS

このプロシージャは、固定表に関する統計情報をユーザー統計表からインポートして、データ・ディクショナリに格納します。

IMPORT_SCHEMA_STATS

このプロシージャは、ownnameで識別されるスキーマのすべてのオブジェクトに関する統計情報をユーザー統計表からインポートして、データ・ディクショナリに格納します。

デフォルトでは、stat_categoryパラメータにはリアルタイム統計の実行中に収集された統計が含まれます。REALTIME_STATS値ではオンライン統計のみが指定されます。

IMPORT_TABLE_STATS

このプロシージャは、stattabで識別されるユーザー統計表から特定の表に関する統計情報をインポートして、データ・ディクショナリに格納します。

デフォルトでは、stat_categoryパラメータにはリアルタイム統計の実行中に収集された統計が含まれます。REALTIME_STATS値ではオンライン統計のみが指定されます。

関連項目:

DBMS_STATSについて学習するには、Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンスを参照してください

17.2 テスト・データベースへのオプティマイザ統計の転送: チュートリアル

Oracle Data Pumpを使用して、本番データベースからテスト・データベースにスキーマ統計を転送できます。

前提条件と制限

オプティマイザ統計のエクスポートの準備をする際は、次のことに注意してください。

  • 統計をエクスポートする前に、統計を保持するための表を作成する必要があります。統計表は、DBMS_STATS.CREATE_STAT_TABLEプロシージャで作成します。

  • オプティマイザでは、ユーザー所有の表に格納された統計は使用されません。オプティマイザで使用されるのは、データ・ディクショナリに格納されている統計のみです。オプティマイザにユーザー定義の表の統計を使用させるには、DBMS_STATSインポート・プロシージャを使用してデータ・ディクショナリにこれらの統計をインポートします。

  • データ・ポンプ・エクスポートとインポート・ユーティリティは、データベースから表とともにオプティマイザ統計をエクスポートおよびインポートします。列にシステム生成の名前が付けられている場合、元のエクスポート(exp)では統計をデータとともにエクスポートできませんが、この制限はデータ・ポンプのエクスポートには適用されません。

    ノート:

    DBMS_STATSを使用した統計のエクスポートおよびインポートは、データ・ポンプ・エクスポートおよびインポートの使用とは異なる操作になります。

前提条件

このチュートリアルでは、次のことが前提となっています。

  • 本番データベースで代表的なshスキーマの統計を生成し、DBMS_STATSを使用してそれらをテスト・データベースにインポートします。

  • 管理ユーザーのdba1は、本番データベースとテスト・データベースの両方に存在します。

  • opt_stats表を作成してスキーマ統計を格納します。

  • Oracle Data Pumpを使用してopt_stats表をエクスポートおよびインポートします。

スキーマ統計を生成してそれらを別のデータベースにインポートするには:

  1. 本番ホストで、SQL*Plusを起動して、管理者dba1として本番データベースに接続します。

  2. 本番統計を保持するための表を作成します。

    たとえば、次のPL/SQLプログラムを実行して、ユーザー統計表opt_statsを作成します。

    BEGIN
      DBMS_STATS.CREATE_STAT_TABLE ( 
        ownname => 'dba1'
    ,   stattab => 'opt_stats'
    );
    END;
    /
    
  3. スキーマ統計を収集します。

    たとえば、スキーマ統計を次のように手動で収集します。

    -- generate representative workload
    EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SH');
    
  4. DBMS_STATSを使用して統計をエクスポートします。

    たとえば、スキーマ統計を取得してそれらを以前に作成したopt_stats表に格納します。

    BEGIN
      DBMS_STATS.EXPORT_SCHEMA_STATS (
        ownname => 'dba1'
    ,   stattab => 'opt_stats'
    );
    END;
    /
    
  5. Oracle Data Pumpを使用して、統計表のコンテンツをエクスポートします。

    たとえば、オペレーティング・スキーマ・プロンプトでexpdpコマンドを実行します。

    expdp dba1 DIRECTORY=dpump_dir1 DUMPFILE=stat.dmp TABLES=opt_stats
    
  6. dumpファイルをテスト・データベースのホストに転送します。

  7. テスト・ホストにログインし、Oracle Data Pumpを使用して統計表のコンテンツをインポートします。

    たとえば、オペレーティング・スキーマ・プロンプトでimpdpコマンドを実行します。

    impdp dba1 DIRECTORY=dpump_dir1 DUMPFILE=stat.dmp TABLES=opt_stats 
    
  8. テスト・ホストで、SQL*Plusを起動して、管理者dba1としてテスト・データベースに接続します。

  9. DBMS_STATSを使用してユーザー統計表から統計をインポートし、それらをデータ・ディクショナリに格納します。

    次のPL/SQLプログラムでは、opt_stats表からデータ・ディクショナリにスキーマ統計をインポートします。

    BEGIN
      DBMS_STATS.IMPORT_SCHEMA_STATS( 
        ownname => 'dba1'
    ,   stattab => 'opt_stats' 
    );
    END;
    /

関連項目: