55 DBMS_DEBUG_JDWP_CUSTOM

DBMS_DEBUG_JDWP_CUSTOMパッケージは、Java Debug Wire Protocol (JDWP)を使用するデバッガへのデータベース・セッションのデバッグ接続要求のカスタム処理を実行する手段をユーザーに提供します。

55.1 DBMS_DEBUG_JDWP_CUSTOMの概要

DBMS_DEBUG_JDWP_CUSTOMパッケージは、Java Debug Wire Protocol (JDWP)を使用して、データベース・セッションをデバッガに接続しようとすると起動されます。データベースに接続する前に、クライアント側のOCIアプリケーションで、ORA_DEBUG_JDWP環境変数を設定する必要があります。スキーマにこのパッケージを定義すると、データベース・セッションをデバッガに接続する前に、カスタム・アクションを実行できます。

55.2 DBMS_DEBUG_JDWP_CUSTOMのセキュリティ・モデル

このDBMS_DEBUG_JDWP_CUSTOMパッケージのデフォルトの実装では、追加のセキュリティ・チェックは実行されず、デバッグ接続を行うためのDBMS_DEBUG_JDWPパッケージが起動されるだけです。DBMS_DEBUG_JDWPパッケージが起動されると、接続する前に、必要なDEBUG CONNECTシステム権限またはユーザー権限がチェックされます。

追加のカスタム・セキュリティ・チェックを実行する必要があるデータベース・ユーザーは、次の手順を実行してこのデフォルトの実装をオーバーライドする必要があります。

  • ユーザー独自のスキーマにDBMS_DEBUG_JDWP_CUSTOMパッケージを定義します。

  • DBMS_DEBUG_JDWPパッケージのユーザーのローカル・コピーでこのパッケージを起動する前にチェックを実装します。

55.3 DBMS_DEBUG_JDWP_CUSTOMサブプログラムの要約

この表は、DBMS_DEBUG_JDWP_CUSTOMサブプログラムの要約を示しています。

表55-1 DBMS_DEBUG_JDWP_CUSTOMサブプログラム

サブプログラム 説明

CONNECT_DEBUGGERプロシージャ

このプロシージャは、デバッガへの現在のデータベース・セッションのデバッグ接続要求を処理するために起動されます。

55.3.1 CONNECT_DEBUGGERプロシージャ

このプロシージャは、デバッガへの現在のデータベース・セッションのデバッグ接続要求を処理するために起動されます。

構文


 PROCEDURE CONNECT_DEBUGGER
 (
    HOST                VARCHAR2,
    PORT                VARCHAR2,
    DEBUG_ROLE          VARCHAR2 := NULL,
    DEBUG_ROLE_PWD      VARCHAR2 := NULL,
    OPTION_FLAGS        PLS_INTEGER := 0,
    EXTENSIONS_CMD_SET  PLS_INTEGER := 128
 )

パラメータ

前述のパラメータは、デバッグ接続要求を処理するためのプロシージャをデフォルトで実装するためのものです。この要求の処理をカスタマイズする必要があるユーザーは、ユーザー独自のスキーマに同じ名前のプロシージャを含むパッケージ(仕様部および本体)を定義することで、DBMS_DEBUG_JDWP_CUSTOMパッケージ・プロシージャのこのデフォルトの実装をオーバーライドする必要があります。引数の数および名前はカスタマイズできますが、パッケージ(DBMS_DEBUG_JDWP_CUSTOM)およびプロシージャ(CONNECT_DEBUGGER)に対して同じ名前を指定する必要があります。ユーザーがカスタマイズしたバージョンのパッケージには、引数が異なる、オーバーロードされたバージョンのCONNECT_DEBUGGERプロシージャが含まれている場合があります。カスタム・パッケージ・プロシージャに対するすべての引数は、VARCHAR2型またはPL/SQLがVARCHAR2から暗黙的に変換できる型である必要があります。

たとえば、営業時間外のデバッグを許可しない場合に、デバッグ中に表示されるプログラム値にオプションのNLS設定を適用している場合は、次の方法で、ユーザーのスキーマにパッケージのカスタム実装を定義できます。

CREATE OR REPLACE PACKAGE DBMS_DEBUG_JDWP_CUSTOM AUTHID CURRENT_USER IS
  PROCEDURE CONNECT_DEBUGGER(HOST VARCHAR2,
                             PORT VARCHAR2,
                             NLS_LANGUAGE VARCHAR2 DEFAULT NULL,
                             NLS_TERRITORY VARCHAR2 DEFAULT NULL);
END;
/

CREATE OR REPLACE PACKAGE BODY DBMS_DEBUG_JDWP_CUSTOM IS

  PROCEDURE CONNECT_DEBUGGER(HOST VARCHAR2,
                             PORT VARCHAR2,
                             NLS_LANGUAGE VARCHAR2 DEFAULT NULL,
                             NLS_TERRITORY VARCHAR2 DEFAULT NULL) IS
  BEGIN
    SELECT EXTRACT(HOUR FROM LOCALTIMESTAMP) INTO HOUR FROM DUAL;
    IF (HOUR < 9 OR HOUR > 5) THEN
      RAISE_APPLICATION_ERROR(-20000,
        'Debug connection disallowed outside business hours');
    ELSE
      IF (NLS_LANGUAGE IS NOT NULL) THEN
        DBMS_DEBUG_JDWP.SET_NLS_PARAMETER('NLS_LANGUAGE', NLS_LANGUAGE);
      END IF;
      IF (NLS_TERRITORY IS NOT NULL) THEN
        DBMS_DEBUG_JDWP.SET_NLS_PARAMETER('NLS_TERRITORY', NLS_TERRITORY);
      END IF;
      DBMS_DEBUG_JDWP.CONNECT_TCP(HOST, PORT);
    END IF;
  END;

END;
/

クライアント・アプリケーションを実行してプロシージャのパラメータに引数を渡す前に、次のようにORA_DEBUG_JDWP環境変数を設定する必要があります。

> setenv ORA_DEBUG_JDWP "host=123.45.67.89;port=4000;nls_language=american"
> myapp -user hr/hr
...