Amazon Web Services ブログ

Amazon RDS for Oracle で Oracle 診断イベントをシステムレベルで設定する

本投稿は、Lesley Ajanoh による記事 Set Oracle diagnostics system events on Amazon RDS for Oracle を翻訳したものです。

Amazon Relational Database Service (Amazon RDS) for Oracle では、Oracle サポートから要求される Oracle 診断イベントパラメータをシステムレベルで設定して、ORAエラーや異常な動作をしているプロセスの追加の診断情報を出力することが可能です。これらのイベントパラメータは、 rdsadmin.rdsadmin_util パッケージのシステムイベントプロシージャを使用して設定できます。2022 年第 1 四半期の時点で、このプロシージャでは、errorstack と context イベントタイプの設定と、設定可能な診断イベントパラメータのリスト表示をサポートしています。この設定可能なリストに存在しない診断イベントは、セッションレベルで (直接または LOGON トリガーを使用して)設定することもできます。診断イベントの設定の詳細については、「システム診断イベントの設定と設定の解除」を参照してください。

Amazon RDS for Oracle は、クラウドでの Oracle デプロイメントのセットアップ、運用、スケーリングを容易にする完全マネージド型の商用データベースです。Amazon RDS は、プロビジョニング、バックアップ、ソフトウェアのパッチ適用、モニタリング、およびハードウェアのスケーリングといった時間のかかるデータベース管理タスクを管理することによって、ユーザーがイノベーションとアプリケーション開発に集中できるようにします。
従来、Amazon RDS for Oracle では、systemstate、hanganalyze およびその他のイベントパラメータをセッションレベルで設定してトレース出力することしかできませんでした。詳細については、「Oracle Database のログファイル」を参照してください。
この記事では、 rdsadmin.rdsadmin_util.set_system_event プロシージャを使用して、Amazon RDS for Oracle で 10046 SQL トレースイベントパラメータを設定する方法を説明します。このイベントをシステムレベルで設定すると、すべてのデータベースセッションに影響するため、Oracle サポートからの要求に基づいて設定するよう注意してください。さらに、データベースに設定する前に、システムレベルでイベントを設定することによる影響 (ディスク領域の消費、CPU オーバーヘッド、パフォーマンスの低下など) をシステムが許容できるか確認してください。

前提条件

この記事では、Amazon RDS for Oracle インスタンスを使用します。開始する前に、次の前提条件を満たしていることを確認してください。

  1. AWS アカウントを作成するかアクセス可能であることを確認します。
  2. オンプレミスネットワークと Amazon VPC の間に Site-to-Site VPN 接続を作成するか、すでに存在し利用できることを確認します。詳細は、「AWS Site-to-Site VPN の仕組み」を参照してください。
  3. Oracle SQL Developer をインストールするか、オンプレミスですでに利用可能であるSQL Developerを利用します。Oracle SQL Developer をダウンロードして利用することも可能です。
  4. 上記 3. の代わりに、Oracle Client がインストールされている踏み台ホストと SQL*Plus を利用してデータベースに接続することもできます。詳細は、「SQL *Plus を使用した DB インスタンスへの接続」を参照してください。
  5. プライベートサブネットで、Amazon RDS for Oracle として Oracle Database Release 19.0.0.0 インスタンスを作成するか、すでに存在しているインスタンスを利用します。

ソリューションの概要

次の図は、ソリューションのアーキテクチャを示しています。

ステップの概要は以下の通りです。

  1. Oracle SQL Developer に接続します。
  2. Amazon RDS for Oracle の 19.0.0.0.ru-2022-01.rur-2022-01.r1 に接続します。
  3. イベント 10046 を設定します。
  4. Oracle Data Pump エクスポートを実行します。
  5. イベント設定によってプロセスコンテキストを出力できたことを確認します。
  6. Oracle Support に送付するファイルを特定します。

10046 SQL トレース イベントパラメータを設定する

例として、Amazon RDS for Oracle で Oracle Data Pump エクスポートジョブの実行速度が遅く、Oracle サポートが、Data Pump プロセスの状態を取得するために、システムレベルで診断イベント 10046 レベル 12 を設定するようリクエストしたとします。次のステップを実行してください。

  1. SQL Developer を使用して、Amazon RDS for Oracle に接続します。
  2. 「Test」をクリックして接続できることを確認します。
  3. Amazon RDS for Oracle のプロシージャ rdsadmin.rdsadmin_util.set_system_event を実行して 10046 イベントを設定し、実際に設定できたことを確認します。
    SET SERVEROUTPUT ON
    EXEC rdsadmin.rdsadmin_util.set_system_event(10046,12);
    EXEC rdsadmin.rdsadmin_util.list_set_system_events;

    スクリプトの出力結果から、イベントタイプ(context または errorstack)を指定する必要はなく、イベントタイプが自動的に決定されていることを確認できます。

  4. Data Pump エクスポートジョブを実行します。(この例では TEST_USER スキーマをエクスポートしています。)
    DECLARE
        hdnl NUMBER;
    BEGIN
        hdnl := DBMS_DATAPUMP.OPEN( operation => 'EXPORT', job_mode => 'SCHEMA', job_name=>null);
        DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename => 'test_user.dmp', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_dump_file);
        DBMS_DATAPUMP.ADD_FILE( handle => hdnl, filename => 'test_user.log', directory => 'DATA_PUMP_DIR', filetype => dbms_datapump.ku$_file_type_log_file);
        DBMS_DATAPUMP.METADATA_FILTER(hdnl,'SCHEMA_EXPR','IN (''TEST_USER'')');
        DBMS_DATAPUMP.START_JOB(hdnl);
    END;
    /    

  5. Data Pump エクスポートのログファイルを参照し、ジョブに関する情報を取得します。
    select text
      from table (rdsadmin.rds_file_util.read_text_file('DATA_PUMP_DIR', 'test_user.log'));

  6. V$DIAG_TRACE_FILE ビューから、Data Pump プロセスのトレースファイル名(dw00_<process id>.trc および dm00_<process id>.trc) を確認します。
    select TRACE_FILENAME, MODIFY_TIME
      from V$DIAG_TRACE_FILE
     order by 1;

    エクスポートジョブの並列度が 1 より大きい場合、複数の Data Pump ワーカープロセスのトレースファイル (dw01_<process id>.trcdw02_<process id>.trcdw03_<process id>.trc など) が生成されます。

  7. ワーカープロセスのトレースファイルから、Oracle Data Pumpプロセスから出力されたイベント情報を表示します。
    select PAYLOAD
      from V$DIAG_TRACE_FILE_CONTENTS
     where TRACE_FILENAME='ORCL_dw00_22007.trc'
     order by LINE_NUMBER;
  8. 上記のスクリーンショットのようにクエリ結果を確認して、出力されたイベント情報を確認します。
    また、 rdsadmin.manage_tracefiles.set_tracefile_table_location プロシージャーを使用して、 tracefile_table ビューが特定のトレースファイルを指し示すように設定することができ、トレースファイルの内容を tracefile_table ビューから確認することが可能になります。

    exec rdsadmin.manage_tracefiles.set_tracefile_table_location('ORCL_dw00_22007.trc');
    select * from tracefile_table;

  9. 最後に、 rdsadmin.rdsadmin_util.unset_system_event プロシージャーを使用して 10046 システムイベントの設定を解除します。
    SET SERVEROUTPUT ON
    EXEC rdsadmin.rdsadmin_util.unset_system_event(10046);

まとめ

Amazon RDS for Oracle では、パラメータグループを使用してデータベースパラメータを管理できますが、これは特定のイベントパラメータをサポートしていません。イベントパラメータは通常、特定のORAエラーや異常な動作をしているプロセスの追加の診断情報の出力のために使用されます。このようなパラメータ設定は、通常 Oracle サポートからリクエストされます。
この記事では、システムイベントプロシージャを使用して、Data Pump エクスポートのシナリオにおいて 10046 イベントパラメータを設定し、Oracle サポートの追加診断データを取得する方法を説明しました。
Amazon RDS for Oracle で設定できるシステムイベントの詳細については、次のリソースを参照してください。

翻訳はソリューションアーキテクトの 鈴木健吾 が担当しました。原文はこちらです。