B.1 付録: UTL_HTTPのトラブルシューティング

この付録では、UTL_HTTPパッケージの使用中に発生する可能性のある問題のトラブルシューティングのステップについて説明します。

UTL_HTTPパッケージは、内部、外部またはセキュアなWebサイトから特定のURLにアクセスするために使用されます。このパッケージのトラブルシューティングには、様々なコンピテンス領域の専門知識が必要な場合があります。このガイドでは、項目のチェックリストを確認します。このガイドでは、チェックリストのコンテキストでエラーが発生した場所に応じて、実際の問題の支援に最適なコンピテンス領域を決定します。

UTL_HTTPパッケージの概要

UTL_HTTPパッケージ(PL/SQLパッケージ)メソッドを使用して、特定のWebサーバー・ページからHTMLテキストを取得できます。取得したテキストは、アプリケーション内で使用できます(通常はデータのテキストを解析します)。アプリケーションでは、データベース内でPL/SQLプロシージャを実行して、必要なパラメータを渡した後でUTL_HTTPパッケージをコールします。導出された結果は、様々なタスクを実行するために処理できます。

UTL_HTTPパッケージは、データベース内で使用されます。このパッケージは、インターネットまたはイントラネット上でHTTPまたはHTTPS接続を作成し、アプリケーションが処理できるテキストを返します。HTTPサーバーは、アクセスしているサーバーを除き、この目的のために必要ありません。これは、HTTPまたはHTTPSリクエストを処理する任意のWebサーバー(必ずしもOracleサーバーではない)にできます。PL/SQLまたはSQLからHTTPコールアウトを行うと、データベースがテキストベースのブラウザになります。

UTL_HTTPパッケージは、PL/SQL Webツールキットとは異なります。このツールキットは、Oracle HTTP Serverとともにデータベース内のプロシージャにアクセスし、ブラウザに戻るためのHTMLページを生成するために使用されます。UTL_HTTPパッケージは、Web経由でアクセスされるアプリケーション内で使用できますが、その処理ではブラウザに何も返送されません(アプリケーション内の別の時点で、コードによってPL/SQLツールキットOWAおよびHTPパッケージがコールされる場合を除く)。

トラブルシューティングのステップ

トラブルシューティングには、次のステップで列挙された次のチェックが含まれています。これらのタスクを指定された順序で実行し、次のステップに進む前に各ステップが完了していることを確認することをお薦めします。

  • データベース・チェック(ステップ1から3)では、UTL_HTTPパッケージが有効で、必要な権限が正しく設定されていることを確認します

  • セキュアなWebサイト・アクセス(HTTPS)チェック(ステップ4および5)では、セキュアでないWebサイトがアクセスされているかどうかを確認します。これには、次のものが含まれます: Oracleウォレットが使用されている場合は、ウォレットの場所を確認し、Oracleにウォレットを開く権限があるかどうかを確認し、ウォレット・パスワードが正しいかどうかを確認します

  • 構成チェック(ステップ6)では、UTL-HTTPパッケージが別のOracle製品とともに使用されているかどうかを確認します

  • 言語チェック(ステップ7)では、プログラムの問題のトラブルシューティングに言語処理グループが関与する必要があるかどうかを確認します

ステップ1: UTL_HTTPパッケージが有効であることの確認

UTL_HTTPパッケージが有効かどうかを確認するには、次のコマンドを使用します。

ノート:

依存オブジェクトは、データベースのバージョンによって異なる場合があります。
SQL> column object_name format a15

SQL>SELECT object_name, 
           object_type, 
           status 
    FROM dba_objects
      WHERE object_name IN 
         (SELECT referenced_name 
            FROM dba_dependencies
            WHERE name='UTL_HTTP') 
      ORDER BY object_name, object_type;

出力例は次のとおりです:

OBJECT_NAME     OBJECT_TYPE        STATUS
--------------- ------------------ -------
PLITBLM         PACKAGE            VALID
PLITBLM         SYNONYM            VALID
STANDARD        PACKAGE            VALID
STANDARD        PACKAGE BODY       VALID
UTL_HTTP        PACKAGE            VALID
UTL_HTTP        PACKAGE BODY       VALID
UTL_HTTP        SYNONYM            VALID
UTL_HTT_LIB     LIBRARY            VALID
UTL_RAW         PACKAGE            VALID
UTL_RAW         PACKAGE BODY       VALID
UTL_RAW         SYNONYM            VALID

もう1つの出力例は次のとおりです:

OBJECT_NAME     OBJECT_TYPE        STATUS
--------------- ------------------ -------
STANDARD        PACKAGE            VALID
STANDARD        PACKAGE BODY       VALID
UTL_HTTP        PACKAGE            VALID
UTL_HTTP        PACKAGE BODY       VALID
UTL_HTTP        SYNONYM            VALID

いずれかのオブジェクトが無効な場合は、htlrp.sqlスクリプトを実行して検証します。

cd $ORACLE_HOME/rdbms/admin sqlplus
 
SQL> SELECT object_name FROM DBA_OBJECTS WHERE status = 'INVALID';
SQL> connect / as sysdba
SQL> @utlrp.sql
SQL> quit

ステップ2: 必要な権限が正しく設定されているかどうかの確認

すべてのパッケージがVALIDのステータスで返される場合は、権限を確認します。

権限をチェックするには、次のコマンドを使用します:

SQL> column grantee format a10
SQL> column owner format a6
SQL> column table_name format a15
SQL> column grantor format a10
SQL> column privilege format a10
SQL> SELECT * FROM dba_tab_privs WHERE table_name='UTL_HTTP';

出力例は次のとおりです:

GRANTEE    OWNER  TABLE_NAME      GRANTOR    PRIVILEGE  GRA HIE
---------- ------ --------------- ---------- ---------- --- ---
PUBLIC     SYS    UTL_HTTP        SYS        EXECUTE    NO  NO

ステップ3: アラート・ログ(alert.log)の確認

前のステップでエラーが返されない場合は、alert.logファイルで、UTL_HTTPパッケージが実行された時間に関連する追加情報を確認します。DBA (データベース管理者)の場合は、background_dump_dest初期化パラメータを問い合せて、alert.logファイルの場所を検索できます。

SQL> column value format a40
SQL> column name format a30
SQL> SELECT name, value FROM v$parameter WHERE name='background_dump_dest';

DBAデータベース・チェック

次のいずれかに該当する場合、それ以降のトラブルシューティングは、データベースDBAグループの範囲内に含まれる必要があります。

  • パッケージが無効です。

  • 権限が付与されていません。

  • alert.logファイルにエラーがあります。

  • UTL_HTTP関数またはプロシージャを実行すると、ORA-00600またはORA-03113エラーが発生します。

ステップ4: セキュアなWebサイト・アクセス(HTTPSアクセス)であるかどうかの確認

WebサイトのターゲットURLにhttpではなくhttpsが含まれている場合、WebサイトはセキュアなWebサイトです。

ノート:

サーバーでブラウザが使用可能な場合は、セキュアURLにアクセスできることを確認する必要があります。ブラウザでURLにアクセスできない場合、utl_httpパッケージもこれにアクセスできません。また、クライアント認証をリクエストするダイアログ・ボックスが表示されないことを確認します(これはまだサポートされていないため)。

ブラウザと同様に、UTL_HTTPパッケージは、直接またはHTTPプロキシを介して、Secured Socket Layer (SSL)プロトコルを使用したHTTP (HTTPSとも呼ばれる)もサポートします。Oracle Databaseリリース23aiより前のリリースでは、Oracleウォレットは、UTL_HTTPパッケージを使用してHTTPSリクエストを行う必要があります(HTTPS以外のフェッチにはOracleウォレットは必要ありません)。Oracle Database 23ai以降では、Oracleウォレットのかわりにオペレーティング・システムの証明書ストアを使用できます(接続先のWebサービスがオペレーティング・システムによって信頼されている場合)。

Oracleウォレットについて

Oracleウォレットには、UTL_HTTPパッケージのユーザーが信頼する認証局のリストが含まれます。Walletが作成されると、トラスト・ポイントとして認識された認証局に移入されます。リモートHTTPS Webサーバーの証明書に署名した認証局がトラスト・ポイントにない場合、認証局のルートの証明書を取得し、Oracle Wallet Managerを使用してウォレットのトラスト・ポイントとしてインストールする必要があります。

ステップ5: Oracleウォレットの場所の確認

UTL_HTTPパッケージがOracle Databaseサーバーで実行される場合、ウォレットにアクセスできる必要があります。ウォレットの存在およびファイル権限も確認するには、システム・シェルを使用してウォレット・ディレクトリに移動します。ディレクトリにはewallet.p12という名前のファイルがあり、少なくともOracleユーザーの読取り権限を使用してファイル権限を設定する必要があります。

たとえば、UNIXでは、次のように表示されます:

[sunsys]/etc/ORACLE/WALLETS/oracle> ls -al
 
drwxr-xr-x   2 oracle   dba          512 Jan 28 11:33 ./
drwxr-xr-x  10 oracle   dba          512 Jan 30 08:39 ../
-r--------   1 oracle   dba         8581 Jan 17 11:31 ewallet.p12

ウォレットを構成すると、次のSQLを使用してセキュアなWebサイトへのアクセスをテストできます:

SELECT utl_http.request('', '', 'file:', '') FROM DUAL;

たとえば:

SELECT utl_http.request('https://www.xyz.com','proxy.<Domin Name>:<Port  
Number>','file:/etc/ORACLE/WALLETS/oracle','welcome1') FROM DUAL;

ステップ6: UTL_HTTPパッケージが別のOracle製品と連携して使用されているかどうかの確認

ノート:

SQL*PlusまたはPL/SQLの使用は、別の製品の使用を構成するものではありません。

UTL_HTTPパッケージが別のOracle製品またはコンポーネント(Reports、Portal、Discovererなど)とともに使用されているかどうかを確認します。その場合は、関連するコンピテンス領域にサポート・サービス・リクエストを転送する必要があります。ただし、プレーンまたは単純な.htmlページをテストすることをお薦めします。単純なページがUTL_HTTPで機能するが、別のコンポーネントのページが機能しない場合、問題は、使用されているコンポーネント内(おそらく、ページがUTL_HTTPパッケージにレンダリングされる方法)にあります。

関連するグループに転送する理由は、この時点でUTL_HTTPパッケージが正常にインストールされていることが確認され、内部および外部のWebサイト(該当する場合はセキュア・サイトとともに)への接続が行われる可能性があるためです。たとえば、Reportsとともに使用すると、通常、Reports ServerのURLが使用されます。他のサイトへの接続が正常に機能するため、問題は実際のReports ServerとURLに関連している可能性があります。

ステップ7: 言語の確認

UTL_HTTPパッケージに新しい関数を追加すると、PL/SQL固有の機能内で統合される可能性が高くなり、プログラムに問題がある場合は言語グループが関与しています。これは、式、制御構造(IF-THEN-ELSE)またはループ(Simple、While、For)内でUTL_HTTPパッケージの結果を使用するガイドラインに該当します。

これまでに説明したすべてのタスクを正常に完了できるが、問題が未解決のままである場合、カスタム・アプリケーションの使用、パッケージまたはデータベースとの対話のバグが原因である可能性があります。UTL_HTTPパッケージには新しいパッチ更新が含まれるため、常に最新のデータベース・パッチ・セットを適用してください。

ステップ8: Oracleサポートへの連絡

それでも問題をトラブルシューティングできない場合は、Oracleサポートに連絡すると支援を受けることができます。問題の試行および再現に使用できるテスト・ケースを用意してください。