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サポートに連絡すると支援を受けることができます。問題の試行および再現に使用できるテスト・ケースを用意してください。