182 DBMS_WORKLOAD_CAPTURE

DBMS_WORKLOAD_CAPTUREパッケージでは、ワークロード取得システムを構成し、ワークロード取得データを生成します。

この取得のリプレイは、 DBMS_WORKLOAD_REPLAY パッケージによって実装されます。

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

参照:

データベース・リプレイの詳細は、『Oracle Database Testingガイド』を参照してください。

182.1 DBMS_WORKLOAD_CAPTUREの概要

取得インフラストラクチャはインスタンス全体(およびOracle Real Application Clusters(Oracle RAC)内)にわたるため、いずれの時点でも生成されるワークロード取得は1つのみです。したがって、いずれかの時点で1つの状態が存在するため、取得インタフェースにステート・オブジェクトをパラメータとして渡す必要はありません。つまり、すべてのサブプログラムはオブジェクトのメソッドにはできませんが、パッケージ全体のPL/SQLサブプログラムとなります。

182.2 DBMS_WORKLOAD_CAPTUREのセキュリティ・モデル

このセキュリティ・モデルは、DBMS_WORKLOAD_CAPTUREの使用に必要な権限を示します。

この項で示すコードには、次の操作に必要な最小限の権限が記述されています。

  • ディレクトリ・オブジェクトの作成

  • DBMS_WORKLOAD_CAPTUREおよびDBMS_WORKLOAD_REPLAYパッケージで提供されるインタフェースの操作

  • リプレイ・クライアント・ユーザー(wrc someuser/somepasswordまたはwrc USER=someuser PASSWORD=somepassword)としての動作

DROP USER rom1 CASCADE;
CREATE USER rom1 IDENTIFIED BY rom1;
 
GRANT EXECUTE ON DBMS_WORKLOAD_CAPTURE TO rom1;
GRANT EXECUTE ON DBMS_WORKLOAD_REPLAY TO rom1;
 
GRANT CREATE SESSION TO rom1;
GRANT CREATE ANY DIRECTORY TO rom1;
GRANT SELECT_CATALOG_ROLE TO rom1;
GRANT BECOME USER TO rom1;

取得システムとリプレイ・システムの両方にあるファイルおよびディレクトリに対してアクセスおよび操作を行うには、適切なOS権限が必要です。つまり、取得またはリプレイを実行しているOracleプロセスおよびOSユーザーは、インスタンスが実行されているホストからアクセス可能な1つ以上の共通ディレクトリに対してアクセスおよび操作を行うことができる必要があります。また、リプレイを実行しているOSユーザーは、必要に応じてリプレイ・クライアントのホストに取得データをコピーできるように、リプレイ・クライアントで使用されるホスト上でのwrcの実行およびファイル・システムへの適切なアクセスを行うことができる必要があります。

182.3 DBMS_WORKLOAD_CAPTUREサブプログラムの要約

次の表に、DBMS_WORKLOAD_CAPTUREパッケージのサブプログラムをアルファベット順に示します。

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

サブプログラム 説明

ADD_FILTERプロシージャ

指定したフィルタを追加します。

DELETE_CAPTURE_INFOプロシージャ

特定のワークロード取得IDに対応するDBA_WORKLOAD_CAPTURESビューおよびDBA_WORKLOAD_FILTERSビュー内の行を削除します。

DELETE_FILTERプロシージャ

指定したフィルタを削除します。

EXPORT_AWRプロシージャ

特定の取得IDに関連付けられたAWRスナップショットをエクスポートします。

FINISH_CAPTUREプロシージャ

接続されたすべてのセッションに対して取得を停止するように信号を送信し、これ以降にデータベースへの要求が取得されないようにすることによって、ワークロード取得を終了します。

GET_CAPTURE_INFOファンクション

規定のディレクトリに存在するワークロード取得に関するすべての情報を取得して、DBA_WORKLOAD_CAPTURESビューおよびDBA_WORKLOAD_FILTERSビューにインポートし、適切なDBA_WORKLOAD_CAPTURES.IDを戻します。

IMPORT_AWRファンクション

特定の取得IDに関連付けられたAWRスナップショットをインポートします。

REPORTファンクション

1つ以上の異なるソースを使用して、対象とするワークロード取得に関するレポートを戻します。

START_CAPTUREプロシージャ

すべてのインスタンスでワークロード取得を開始します。

182.3.1 ADD_FILTERプロシージャ

このプロシージャは、ワークロードのサブセットを取得するフィルタを追加します。

構文

DBMS_WORKLOAD_CAPTURE.ADD_FILTER (
   fname           IN   VARCHAR2 NOT NULL, 
   fattribute      IN   VARCHAR2 NOT NULL, 
   fvalue          IN   VARCHAR2 NOT NULL);
DBMS_WORKLOAD_CAPTURE.ADD_FILTER (
   fname           IN   VARCHAR2 NOT NULL, 
   fattribute      IN   VARCHAR2 NOT NULL, 
   fvalue          IN   NUMBER NOT NULL);

パラメータ

表182-2 ADD_FILTERプロシージャのパラメータ

パラメータ 説明

fname

追加するフィルタの名前。後でフィルタが不要になった場合、削除するときに使用できます。(必須)

fattribute

フィルタを適用する必要がある属性を指定します(必須)。有効な値は、次のとおりです。

  • INSTANCE_NUMBER - NUMBER

  • USER - STRING

  • MODULE - STRING

  • ACTION - STRING

  • PROGRAM - STRING

  • SERVICE - STRING

  • PDB_NAME - STRING

fvalue

フィルタがアクティブであるとみなされるようにするために、特定の属性と同じとなる値を指定します。STRINGタイプのすべての属性について%のようなワイルドカードを使用できます。つまり、NUMBER属性のフィルタは属性=値として解析され、STRING属性のフィルタは属性と同様の値として解析されます(必須)。

使用上の注意

  • ワークロード取得フィルタは、START_CAPTUREプロシージャへのdefault_action入力に従って、DEFAULT INCLUSIONモードまたはDEFAULT EXCLUSIONモードのいずれかで機能します。

  • ADD_FILTERでは、次のワークロード取得に影響する新しいフィルタを追加します。フィルタがINCLUSIONフィルタまたはEXCLUSIONフィルタのいずれとみなされるかは、START_CAPTUREプロシージャへのdefault_action入力の値によって決まります。

  • 一度指定したフィルタは、次のワークロード取得でのみ有効です。後続の取得に同じ一連のフィルタを使用する必要がある場合は、START_CAPTUREプロシージャの実行前に、毎回それらのフィルタを指定する必要があります。

  • すべてのフィルタは、DBA_WORKLOAD_FILTERSビューに示されています。

  • PDBタイプのフィルタを指定することによって、特定のPDBのワークロードを取得できます。

  • デフォルトでは、取得はINCLUSIONモードで動作し、指定のフィルタの条件を満たすリクエストを除くすべてが記録されます。たとえば、SCOTTからのリクエストをすべて除外する場合は、取得を開始する前に次のようなフィルタを追加できます。

    EXEC DBMS_WORKLOAD_CAPTURE.ADD_FILTER ('filter user1', 'USER', 'SCOTT');
    
  • 複数のフィルタは、論理和演算子ORに従って評価されます。このため、SCOTTJOHNの両方のワークロードを記録する必要がある場合は、さらにフィルタを追加します。

    EXEC DBMS_WORKLOAD_CAPTURE.ADD_FILTER ('filter user2', 'USER', 'JOHN');
    
  • CDBでは、次のようなフィルタによって特定のPDBのワークロードを除外します。

    EXEC DBMS_WORKLOAD_CAPTURE.ADD_FILTER ('filter pdb workload', 'PDB_NAME', 'CDB1_PDB1');
    
  • DBMS_APPLICATION_INFOを使用して、データベースに対して発行されたワークロードを識別するには、次のようにします。

    DBMS_APPLICATION_INFO.SET_MODULE('ORDER_ENTRY', NULL);
    -- run some SQL here
    DBMS_APPLICATION_INFO.SET_ACTION('ORDER_ENTRY_LOG');
    -- run logging SQL
    
  • ワークロードを取得した後、取得内容からロギングSQLを除外する場合は、次のように取得のフィルタを指定します。

    DBMS_WORKLOAD_CAPTURE.ADD_FILTER('filter logging operations', 'ACTION', 'ORDER_ENTRY_LOG');
    
  • 受注トランザクションの全体をフィルタによって除外するには、次のようなフィルタを定義します。

    DBMS_WORKLOAD_CAPTURE.ADD_FILTER('filter order entry', 'MODULE', 'ORDER_ENTRY');

182.3.2 DELETE_CAPTURE_INFOプロシージャ

このプロシージャは、特定のワークロード取得IDに対応するDBA_WORKLOAD_CAPTURESビューおよびDBA_WORKLOAD_FILTERSビュー内の行を削除します。

構文

DBMS_WORKLOAD_CAPTURE.DELETE_CAPTURE_INFO
   capture_id     IN   NUMBER);

パラメータ

表182-3 DELETE_CAPTURE_INFOプロシージャのパラメータ

パラメータ 説明

capture_id

削除する必要があるワークロード取得のID。DBA_WORKLOAD_CAPTURES.IDに対応します。(必須)

使用上の注意

進行中の取得のIDを渡すと、まず最初に、その取得が自動的に停止します。

182.3.3 DELETE_FILTERプロシージャ

このプロシージャは、指定したフィルタを削除します。

構文

DBMS_WORKLOAD_CAPTURE.DELETE_FILTER (
   filter_name           IN   VARCHAR2(40) NOT NULL);

パラメータ

表182-4 DELETE_FILTERプロシージャのパラメータ

パラメータ 説明

filter_name

削除するフィルタ。

使用上の注意

DELETE_FILTERプロシージャは、以前の取得で使用されなかったフィルタにのみ影響します。したがって、フィルタを削除できるのは、そのフィルタがすべての取得の完了後にADD_FILTERプロシージャによって追加された場合のみです。START_CAPTUREおよびFINISH_CAPTUREよりも前にADD_FILTERによって追加されたフィルタは、このサブプログラムによって削除できません。

182.3.4 EXPORT_AWRプロシージャ

このプロシージャは、特定の取得IDに関連付けられたAWRスナップショットをエクスポートします。

構文

DBMS_WORKLOAD_CAPTURE.EXPORT_AWR (
   capture_id     IN NUMBER);

パラメータ

表182-5 EXPORT_AWRプロシージャのパラメータ

パラメータ 説明

capture_id

AWRスナップショットがエクスポートされる取得のID。(必須)

使用上の注意

このプロシージャは対応するワークロード取得が現行のデータベースで実行され(このことは、DBA_WORKLOAD_CAPTURES内の対応する行がGET_CAPTURE_INFOファンクションのコールによって作成されていないことを意味します)、元の取得時間に対応するAWRスナップショットが使用可能である場合にのみ機能します。

182.3.5 FINISH_CAPTUREプロシージャ

このプロシージャでは、接続されたすべてのセッションに対してワークロード取得を停止するように信号を送信し、これ以降にデータベースへの要求が取得されないようにします。

構文

DBMS_WORKLOAD_CAPTURE.FINISH_CAPTURE
   timeout     IN   NUMBER  DEFAULT 30
   reason       IN   VARCHAR2 DEFAULT NULL);

パラメータ

表182-6 FINISH_CAPTUREプロシージャのパラメータ

パラメータ 説明

timeout

プロシージャがタイムアウトになるまでの待機時間を秒単位で指定します。現行のワークロード取得を取り消し、セッションによる取得バッファのフラッシュの実行を待機しない場合は、0を指定します。デフォルト値: 30秒

reason

プロシージャをコールする理由を指定します。理由は、DBA_WORKLOAD_CAPTURESビューのERROR_MESSAGE列に表示されます。

使用上の注意

  • デフォルトでは、FINISH_CAPTUREは、タイムアウトになる前に、データベース・クラスタ内のすべてのセッションから正常であることの確認応答を受け取るために30秒待機します。

  • FINISH_CAPTUREが確認応答を待機しているときに、ユーザーの要求を実行しているセッションまたは新しいユーザーの要求を受け取ったセッションは、いずれもバッファをフラッシュし、FINISH_CAPTUREに確認応答を返信します。

  • FINISH_CAPTUREの継続期間中、データベース・セッションがアイドル状態になったままの場合(次のユーザー要求を待機している場合)、そのセッションは取得バッファをフラッシュしていない可能性があるため、FINISH_CAPTUREに確認応答を送信しません。

    これを回避するには、FINISH_CAPTUREの起動中にアイドル状態になったままのセッション(次のユーザー要求を待機しているセッション)をなくします。FINISH_CAPTUREを実行する前にデータベース・セッションをクローズするか、またはFINISH_CAPTUREの期間中にそれらのセッションに新しいデータベース要求を送信します。

182.3.6 GET_CAPTURE_INFOファンクション

このプロシージャは、規定のディレクトリに存在するワークロード取得に関するすべての情報を取得してDBA_WORKLOAD_CAPTURESビューおよびDBA_WORKLOAD_FILTERSビューにインポートし、適切なDBA_WORKLOAD_CAPTURES.IDを戻します。

構文

DBMS_WORKLOAD_CAPTURE.GET_CAPTURE_INFO
   dir     IN   VARCHAR2)
  RETURN NUMBER;

パラメータ

表182-7 GET_CAPTURE_INFOファンクションのパラメータ

パラメータ 説明

dir

すべてのワークロード取得ファイルが保存されるDIRECTORYオブジェクトの名前(大/小文字が区別される)(必須)。

使用上の注意

規定のディレクトリでの取得を記述した適切な行がDBA_WORKLOAD_CAPTURESにすでに存在する場合、GET_CAPTURE_INFOファンクションは、その行のDBA_WORKLOAD_CAPTURES.IDを戻します。規定のディレクトリに存在する取得と一致する既存の行が存在しない場合は、DBA_WORKLOAD_CAPTURESに新しい行が挿入され、その行のIDが戻されます。

182.3.7 IMPORT_AWRファンクション

EXPORT_AWRプロシージャを使用して元の取得システムからすでにAWRスナップショットがエクスポートされている場合、このプロシージャでは、特定の取得IDに関連付けられたAWRスナップショットがインポートされます。

構文

DBMS_WORKLOAD_CAPTURE.IMPORT_AWR (
   capture_id       IN   NUMBER,
   staging_schema   IN   VARCHAR2,
   force_cleanup    IN   BOOLEAN DEFAULT FALSE)
 RETURN NUMBER;

パラメータ

表182-8 IMPORT_AWRファンクションのパラメータ

パラメータ 説明

capture_id

AWRスナップショットがインポートされる取得のID。(必須)

staging_schema

取得ディレクトリからSYS AWRスキーマにAWRスナップショットをインポートする間に、ステージング領域として使用できる現行データベース内の有効なスキーマの名前。SYSスキーマは有効な入力ではありません(必須。大/小文字が区別される)。

force_cleanup

値:

  • TRUE: 特定のstaging_schemaに存在するAWRデータを、実際のインポート操作の前にすべて削除します。AWR内のいずれかの表と一致する名前を持つ表は、実際のインポートより前に、すべて削除されます。通常、これは、次のSQLによって戻されるすべての表の削除と同等です。

    SELECT table_name FROM dba_tables
    WHERE owner = staging_schema
    AND table_name like 'WR_$%';

    このオプションは、staging_schema内の該当する表に重要なデータがないことが確実な場合にのみ使用してください。

  • FALSE: (デフォルト)インポート操作の前にstaging_schemaから表を削除しません。

戻り値

AWRスナップショットをインポートするときに使用した、ランダムに生成された新しいデータベースIDを戻します。DBA_WORKLOAD_CAPTURESビューのAWR_DBID列に同じ値があります。

使用上の注意

入力として指定したstaging_schemaに、任意のAWR表と同じ名前(WRM$_SNAPSHOTWRH$_PARAMETERなど)を持つ表が含まれている場合、IMPORT_AWRは失敗します。このような表をstaging_schemaから削除してから、IMPORT_AWRを起動します。

182.3.8 REPORTファンクション

このファンクションは、規定のワークロード取得に関するレポートを生成します。

構文

DBMS_WORKLOAD_CAPTURE.REPORT (
   capture_id      IN   NUMBER,
   format          IN   VARCHAR2)
 RETURN CLOB;

パラメータ

表182-9 REPORTファンクションのパラメータ

パラメータ 説明

capture_id

取得レポートが必要なワークロード取得のID。(必須)

これは、レポートを生成する必要があるワークロード取得を含むディレクトリに関連します。ワークロード取得を含む、ホスト・システム内の有効なディレクトリを示す有効なDIRECTORYオブジェクトである必要があります。

format

レポートの書式を指定します。有効な値は、DBMS_WORKLOAD_CAPTURE.TYPE_TEXTおよびDBMS_WORKLOAD_CAPTURE.TYPE_HTMLです。(必須)

戻り値

指定した形式で表示されたレポート本文。CLOBとして戻されます。

表182-10 Reportファンクションで使用される定数

定数 タイプ 説明

TYPE_HTML

VARCHAR2(4)

'HTML'

HTMLバージョンのレポートを生成します。

TYPE_TEXT

VARCHAR2(4)

'TEXT'

format引数への入力として使用し、テキスト・バージョンのレポートを生成します。

182.3.9 START_CAPTUREプロシージャ

このプロシージャは、すべてのインスタンスでワークロード取得を開始します。

構文

DBMS_WORKLOAD_CAPTURE.START_CAPTURE (
   name              IN  VARCHAR2,
   dir               IN  VARCHAR2,
   duration          IN  NUMBER   DEFAULT NULL,
   default_action    IN  VARCHAR2 DEFAULT 'INCLUDE',
   auto_unrestrict   IN  BOOLEAN  DEFAULT TRUE,
   capture_sts       IN  BOOLEAN  DEFAULT FALSE,
   sts_cap_interval  IN  NUMBER   DEFAULT 300,
   plsql_mode        IN  VARCHAR2 DEFAULT 'TOP_LEVEL');

パラメータ

表182-11 START_CAPTUREプロシージャのパラメータ

パラメータ 説明

name

ワークロード取得の名前。後で参照するために、「感謝祭の週末」や「クリスマスの最盛期のワークロード」など、ワークロード取得にラベルを付けることができます。ワークロード取得の名前は、取得されたワークロード・アクションとともに保存されます。(必須)

dir

すべてのワークロード取得ファイルが保存されるDIRECTORYオブジェクトの名前(大/小文字が区別される)。すべてのワークロード取得ファイルを格納するのに十分な領域が必要です。(必須)

duration

ワークロードを取得する必要がある期間(秒単位)を指定するオプションの入力。DEFAULTNULLで、これは、ユーザーがDBMS_WORKLOAD_CAPTURE.FINISH_CAPTUREを実行するまでワークロード取得が続行されることを意味します。

default_action

INCLUDEまたはEXCLUDEに設定できます。デフォルトですべてのユーザー要求を取得するか、または取得しないかが決定されます。また、指定したワークロード・フィルタをINCLUSIONフィルタとみなすか、またはEXCLUSIONフィルタとみなすかも決定されます。

  • INCLUDEの場合、フィルタで定義されたワークロードの部分以外は、データベースへのすべてのユーザー要求がデフォルトで取得されます。この場合、ADD_FILTERプロシージャを使用して指定したフィルタはすべてEXCLUSIONフィルタとして処理され、取得しないワークロードが決定されます。(DEFAULTおよび指定したすべてのフィルタは、EXCLUSIONフィルタとみなされます。)

  • EXCLUDEの場合、フィルタで定義されたワークロードの部分以外は、データベースへのユーザー要求はデフォルトでは取得されません。この場合、ADD_FILTERプロシージャを使用して指定したフィルタはすべてINCLUSIONフィルタとして処理され、取得するワークロードが決定されます。

auto_unrestrict

TRUEまたはFALSEに設定できます。

  • TRUEの場合、STARTUP RESTRICTを使用してRESTRICTEDモードで起動したすべてのインスタンスは、START_CAPTUREの実行によって自動的に制限解除されます。(DEFAULT)

  • FALSEの場合、データベース・インスタンスが自動的に制限解除されることはありません。

capture_sts

このパラメータがTRUEの場合、ワークロード取得と並行してSQLチューニング・セット取得も開始されます。取得されたSQLチューニング・セットは、EXPORT_AWRプロシージャを使用してAWRデータとともにエクスポートできます。現在、Oracle RAC環境でパラレルSTS取得はサポートされていないため、このパラメータをOracle RAC環境で使用しても効果は得られません。DBMS_WORKLOAD_REPLAYインタフェースを使用して定義された取得フィルタは、SQLチューニング・セット取得に適用されません。コール・ユーザーは、適切な権限('ADMINISTER SQL TUNING SET')を持っている必要があります。

SQLセット取得の開始に失敗した場合、ワークロード取得も停止されます。その理由は、DBA_WORKLOAD_CAPTURES.ERROR_MESSAGEに格納されます。デフォルト値はFALSEです。

sts_cap_interval

カーソル・キャッシュからのSQLセット取得の取得間隔を秒単位で指定します。デフォルト値は300です。

plsql_mode

PL/SQLキャプチャ・モードを指定します。

  • TOP_LEVEL - トップ・レベルのPL/SQLコールのみが取得されます。

  • EXTENDED - トップ・レベルのPL/SQLコールとPL/SQLからコールされたSQLの両方が取得されます。

使用上の注意

  • START_CAPTUREの正常な起動後にデータベースに送信されるすべてのユーザー要求は、期間を指定されている場合、その特定の期間特定のdirディレクトリに記録されます。期間が指定されていない場合は、取得はFINISH_CAPTUREプロシージャが実行されるまで無制限に続行されます。

  • 開始されたワークロード取得では、指定された期間の終了(データベース・インスタンスの停止および起動をまたぐ)、またはFINISH_CAPTUREの実行のいずれかが先に発生するまで、ユーザー要求を記録し続けます。

  • ワークロード・フィルタ(ADD_FILTERプロシージャを参照)を使用すると、データベースに送信されたユーザー要求のサブセットのみを取得できます。デフォルトでは、ワークロード・フィルタが定義されていないと、すべてのユーザー要求が取得されます。

  • Oracle Databaseのバックグラウンド・プロセス(SMONPMONMMONなど)およびOracle Database Schedulerジョブ( DBMS_SCHEDULERパッケージを参照)から開始されたワークロードは、ワークロード・フィルタの定義に関係なく取得されません。これらのアクティビティは、適切に構成されたリプレイ・システムで自動的に行われる必要があります。

  • STARTUP RESTRICTを使用してRESTRICTEDモードで起動されたすべてのデータベース・インスタンスは、デフォルトでは、START_CAPTUREが正常に起動すると、UNRESTRICTEDになります。このように動作させない場合は、auto_unrestrict入力パラメータにFALSEを使用します。

  • 取得されたワークロードのリプレイを開始する前にリプレイ・システムを開始ポイントにリストアできるように、適切に定義されたワークロードの開始ポイントを取得することが重要です。ワークロードの取得の開始ポイントを適切に定義するには、START_CAPTUREを実行したときにアクティブなユーザー・セッションが存在しないことが理想的です。継続中のセッションでトランザクションが実行されている場合、それらのトランザクションはその後のデータベース・リプレイで適切にリプレイされませんが、これは、トランザクションのうち、START_CAPTUREの後に実行されたコールの部分しかリプレイされないためです。