17 オプティマイザ統計のインポートとエクスポート
データ・ディクショナリとユーザー定義の統計表間でオプティマイザ統計をエクスポートおよびインポートできます。また、データベース間で統計のコピーもできます。
17.1 オプティマイザ統計の転送について
データベース間でオプティマイザ統計を転送する場合は、DBMS_STATS
を使用してステージング表間で統計をコピーし、ツールを使用して表のコンテンツに宛先データベースがアクセスできるようにする必要があります。
17.1.1 オプティマイザ統計の転送の目的
インポートとエクスポートは、本番統計を使用したアプリケーションのテストを行う場合に特に役立ちます。
開発者は、アプリケーションのデプロイ前に、実際的な環境で問合せ計画をチューニングする必要があります。一般的なシナリオでは、DBMS_STATS.EXPORT_SCHEMA_STATS
を使用して、本番データベースからテスト・データベースにスキーマ統計をエクスポートします。
17.1.2 オプティマイザ統計の転送の仕組み
通常の転送操作には、DBMS_STATS
とファイル転送ユーティリティを組み合せて使用します。
次の図は、Oracle Data Pumpおよびftp
を使用したプロセスを示しています。
基本ステップは次のとおりです。
-
本番データベースで、
DBMS_STATS.EXPORT_SCHEMA_STATS
を使用してデータ・ディクショナリからステージング表に統計をコピーします。 -
Oracle Data Pumpを使用してステージング表から
.dmp
ファイルに統計をエクスポートします。 -
ftp
などの転送ツールを使用して本番ホストからテスト・ホストに.dmp
ファイルを転送します。 -
テスト・データベースで、Oracle Data Pumpを使用して
.dmp
ファイルからステージング表に統計をインポートします。 -
DBMS_STATS.IMPORT_SCHEMA_STATS
を使用してステージング表からデータ・ディクショナリに統計をコピーします。
17.1.3 オプティマイザ統計をインポートおよびエクスポートするためのユーザー・インタフェース
DBMS_STATS
は、スキーマと表の統計をインポートおよびエクスポートするためのインタフェースを提供します。
次のDBMS_STATS
のサブプログラムを使用すると、スキーマと各種の表をエクスポートできます。
表17-1 スキーマと表統計をエクスポートするためのサブプログラム
サブプログラム | 説明 |
---|---|
|
このプロシージャは、データベース内のすべてのオブジェクトに関する統計情報をエクスポートして、 |
|
このプロシージャは、すべてのデータ・ディクショナリのスキーマ( |
|
このプロシージャは、固定表に関する統計情報をエクスポートして、 |
|
このプロシージャは、 デフォルトでは、 |
|
このプロシージャは、特定の表に関する統計情報(関連する索引統計を含む)をエクスポートして、 デフォルトでは、 |
次のDBMS_STATS
のサブプログラムを使用すると、スキーマと各種の表をインポートできます。
表17-2 オプティマイザ統計をインポートするためのサブプログラム
サブプログラム | 説明 |
---|---|
|
このプロシージャは、データベース内のすべてのオブジェクトに関する統計情報をユーザー統計表からインポートして、データ・ディクショナリに格納します。 |
|
このプロシージャは、すべてのデータ・ディクショナリのスキーマ( |
|
このプロシージャは、固定表に関する統計情報をユーザー統計表からインポートして、データ・ディクショナリに格納します。 |
|
このプロシージャは、 デフォルトでは、 |
|
このプロシージャは、 デフォルトでは、 |
関連項目:
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
表をエクスポートおよびインポートします。
スキーマ統計を生成してそれらを別のデータベースにインポートするには:
-
本番ホストで、SQL*Plusを起動して、管理者
dba1
として本番データベースに接続します。 -
本番統計を保持するための表を作成します。
たとえば、次のPL/SQLプログラムを実行して、ユーザー統計表
opt_stats
を作成します。BEGIN DBMS_STATS.CREATE_STAT_TABLE ( ownname => 'dba1' , stattab => 'opt_stats' ); END; /
-
スキーマ統計を収集します。
たとえば、スキーマ統計を次のように手動で収集します。
-- generate representative workload EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SH');
-
DBMS_STATS
を使用して統計をエクスポートします。たとえば、スキーマ統計を取得してそれらを以前に作成した
opt_stats
表に格納します。BEGIN DBMS_STATS.EXPORT_SCHEMA_STATS ( ownname => 'dba1' , stattab => 'opt_stats' ); END; /
-
Oracle Data Pumpを使用して、統計表のコンテンツをエクスポートします。
たとえば、オペレーティング・スキーマ・プロンプトで
expdp
コマンドを実行します。expdp dba1 DIRECTORY=dpump_dir1 DUMPFILE=stat.dmp TABLES=opt_stats
-
dumpファイルをテスト・データベースのホストに転送します。
-
テスト・ホストにログインし、Oracle Data Pumpを使用して統計表のコンテンツをインポートします。
たとえば、オペレーティング・スキーマ・プロンプトで
impdp
コマンドを実行します。impdp dba1 DIRECTORY=dpump_dir1 DUMPFILE=stat.dmp TABLES=opt_stats
-
テスト・ホストで、SQL*Plusを起動して、管理者
dba1
としてテスト・データベースに接続します。 -
DBMS_STATS
を使用してユーザー統計表から統計をインポートし、それらをデータ・ディクショナリに格納します。次のPL/SQLプログラムでは、
opt_stats
表からデータ・ディクショナリにスキーマ統計をインポートします。BEGIN DBMS_STATS.IMPORT_SCHEMA_STATS( ownname => 'dba1' , stattab => 'opt_stats' ); END; /
関連項目:
-
DBMS_STATS.CREATE_STAT_TABLE
ファンクションについて学習するには、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。 -
統計転送機能の概要は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
-
Oracle Data Pumpについて学習するには、『Oracle Databaseユーティリティ』を参照してください。