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

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

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

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

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

インポートとエクスポートは、本番統計を使用したアプリケーションのテストを行う場合に特に役立ちます。DBMS_STATS.EXPORT_SCHEMA_STATSを使用して本番データベースからテスト・データベースにスキーマの統計をエクスポートすることで、開発者は、アプリケーションのデプロイ前に実行計画を実際の環境に合せることができます。

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

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

図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.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;
    /

関連項目: