すべての独自PL/SQLプロシージャで、Netscapeでは「ドキュメントにデータが含まれていません」というエラー、Internet Explorerでは空白ページが戻されます。
パフォーマンスの高いPL/SQLプロシージャがありますが、mod_plsqlを介した一部のHTTPリクエストに15秒以上かかることがあります。
PL/SQLアプリケーションに対して異なるホスト名、ポートまたはrequest_protocolをアサートするには、どうすればよいですか。
ファイルORACLE_HOME/Apache/Apache/conf/error_logにエラー「HTTP-503 ORA-12154」があります。これは何を意味しますか。
mod_plsqlの起動時に、/DAD/package.procedure()または/DAD/package.procedure(123)という形式のURLが機能しないのはなぜですか。
mod_plsqlとはなんですか。
mod_plsqlはOracle HTTP Serverのプラグインであり、SQL*Net接続を介してブラウザ・リクエストをデータベース・ストアド・プロシージャのコールにマッピングすることでデータベースと通信します。通常、仮想パスの/pls
で示されます。mod_plsqlゲートウェイは、Web上でのPL/SQLベースのアプリケーションの構築と運用をサポートします。PL/SQLストアド・プロシージャはデータベース表からデータを取得し、Webブラウザで表示する書式付きデータとHTMLコードが含まれたHTTPレスポンスを生成できます。詳細は、『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』を参照してください。
PL/SQL Web Toolkitとはなんですか。
PL/SQL Web Toolkitを使用すると、Webアプリケーションを、Oracleデータベース・サーバーに格納されるPL/SQLプロシージャとして開発できます。このツールキット内のパッケージにより定義されるプロシージャ、ファンクションおよびデータ型を、独自のストアド・プロシージャで使用できます。詳細は、『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』を参照してください。
mod_plsqlのリリースを確認するにはどうすればよいですか。
mod_plsqlのリリースは、mod_plsqlバイナリでoversioncheck
スクリプトを実行すると確認できます。
UNIXプラットフォームでは、次のコマンドを発行します。
ORACLE_HOME/ohs/modules/mod_plsql.so
Windowsプラットフォームでは、次のコマンドを発行します。
ORACLE_HOME\ohs\modules\mod_plsql.dll
OWAパッケージのリリースを確認するにはどうすればよいですか。
SQL*Plusを使用し、任意のユーザーとしてデータベースに接続します。
次のコマンドを実行します。
select owa_util.get_version from dual;
OWAパッケージのリリースが表示されます。たとえば、10.1.2.0.4。
この問合せに失敗した場合は、OWAパッケージのリリースが古すぎるためにバージョニング機能がありません。新しいリリースにアップグレードすることをお薦めします。
OWAパッケージをインストールするにはどうすればよいですか。
詳細は、1.2項「必須パッケージのインストール」を参照してください。
OWAパッケージをアンインストールするにはどうすればよいですか。
次のタスクを実行すると、OWAパッケージをアンインストールできます。
OWAパッケージのインストール元ディレクトリに移動します。たとえば、次のようになります。
cd ORACLE_HOME\ohs\mod_plsql
SQL*Plusを使用し、OWAパッケージの所有者として接続します。OWAパッケージの旧バージョンがある場合を除き、ここではSYSユーザーを使用する必要があります。
owadins.sql
スクリプトを起動してOWAパッケージをアンインストールします。
データベースに重複してインストールされているOWAパッケージを検出してクリーンアップするには、どうすればよいですか。
次のSQL問合せを使用すると、OWAパッケージの位置を判断できます。
SELECT OWNER, OBJECT_TYPE FROM DBA_OBJECTS WHERE OBJECT_NAME = 'OWA'
次の結果が表示されます。
SQL> 1 SELECT OWNER, OBJECT_TYPE 2 FROM DBA_OBJECTS 3* WHERE OBJECT_NAME = 'OWA' OWNER OBJECT_TYPE ----- ----------- SYS PACKAGE SYS PACKAGE BODY PUBLIC SYNONYM
このSQL問合せよりも多数の行が表示される場合は、他のスキーマに古いOWAパッケージが存在し、それがmod_plsqlユーザーにとって問題になっている可能性があることを意味します。この場合は、すべてのバージョンのOWAパッケージをデータベースからアンインストールし、製品とともに出荷されているOWAパッケージを再インストールします。
mod_plsqlを介してPL/SQLプロシージャにアクセス中にHTTPエラー・コードが戻されます。
mod_plsqlでは、Oracle HTTP ServerファイルのORACLE_HOME
\ohs\mod_plsql\logs
に詳細なエラー・メッセージが記録されます。このファイルを調べて問題を把握してください。mod_plsqlのロギングの詳細は、「mod_plsqlではどのような種類のロギング機能を使用できますか。」を参照してください。
すべての独自PL/SQLプロシージャで、Netscapeでは「ドキュメントにデータが含まれていません」というエラー、Internet Explorerでは空白ページが戻されます。
データベースにOWAパッケージが重複してインストールされていると、この問題が発生する場合があります。詳細は、「データベースに重複してインストールされているOWAパッケージを検出してクリーンアップするには、どうすればよいですか。」を参照してください。
パフォーマンスの高いPL/SQLプロシージャがありますが、mod_plsqlを介した一部のHTTPリクエストに15秒以上かかることがあります。
この問題の最も一般的な原因は、中間層とバックエンド・データベースのキャラクタ・セットが一致せず、Oracle HTTP ServerでHTTP KeepAlive
が有効化されていることです。設定にこの種の誤りがあると、無効なContent-Lengthがブラウザに送信され、ブラウザはKeepAliveTimeout
間隔によってストリームがクローズされた場合にのみレスポンス・ストリームの終わりを検出します。この問題を解決するには、DADとデータベースのPlsqlNLSLanguage
パラメータが一致するようにします。
これが問題の原因ではない場合、PL/SQLアプリケーションにパフォーマンス問題があると考えられます。これは次の方法で確認できます。
mod_plsqlのパフォーマンス・ロギングを有効にします。詳細は、「mod_plsqlではどのような種類のロギング機能を使用できますか。」を参照してください。
パフォーマンスの問題があるURLを数回実行します。
error_log
を見て、dbProcTimeにレポートされた時間を確認します。この時間は、データベースから見たターゲットPL/SQLプロシージャにかかった時間を表します。この値が高い場合は、標準のデータベース・プロファイリング方法を使用して、PL/SQLアプリケーションをデバッグする必要があります。
mod_plsqlを使用して独自データベース上でアプリケーションを実行することはできますか。
はい。ただし、アプリケーションを実行する前に、データベースにOWAパッケージをインストールする必要があります。1.2項「必須パッケージのインストール」を参照してください。
mod_plsql用のDADを作成するにはどうすればよいですか。
『Oracle Fusion Middleware Oracle HTTP Server管理者ガイド』の「mod_plsql」を参照してください。
mod_plsqlではどのような認証モードを使用できますか。
第2章「mod_plsqlを使用したアプリケーション・データベース・アクセスの保護」を参照してください。
mod_plsqlクリーンアップ・スレッドとはなんですか。
mod_plsqlは、各httpdプロセスでスレッドを起動します。このスレッドのジョブは、アイドル状態のデータベース・セッションとファイル・システムのキャッシュをクリーンアップすることです。このスレッドをクリーンアップ・スレッドと呼びます。
mod_plsqlには、どのような種類のデータベース接続プーリング機能がありますか。
第4章「PL/SQLのパフォーマンスの最適化」を参照してください。
mod_plsqlではどのようにしてデータベース・セッションがクリーンアップされますか。
mod_plsqlでは、PlsqlIdleSessionCleanupInterval
の構成設定に基づいて、使用されていないデータベース・セッションがクリーンアップされます。この他、プールされたデータベース・セッションから提供されるリクエストの数は、設定ディレクティブPlsqlMaxRequestsPerSession
により制御されます。HTTPDプロセスがシャットダウンされると、データベース・セッションがクローズされます。
プールされたデータベース接続がmod_plsqlに存在するときに、データベースを再起動するとどうなりますか。
詳細は、3.11.3項「接続プールでの停止中のデータベース接続の検出」を参照してください。
mod_plsqlではファイル・システム内でキャッシュされたコンテンツがどのようにクリーンアップされますか。
クリーンアップ・スレッドは、PlsqlCacheCleanupTime
の設定に基づいてファイル・システム・キャッシュをスキャンします。デフォルトのクリーンアップ時刻は、現地時間で毎日午後11時です。
URLに接頭辞/plsを付けずにmod_plsqlを起動できますか。
はい。mod_plsqlはOracle HTTP ServerのLocation
ディレクティブを使用するため、mod_plsqlで処理されるように任意の仮想パスを設定できます。
PL/SQLとmod_plsqlのパフォーマンスを改善するにはどうすればよいですか。
第4章「PL/SQLのパフォーマンスの最適化」を参照してください。
mod_plsqlではどのような種類のロギング機能を使用できますか。
mod_plsqlでは、デフォルトでOracle HTTP Server error_log
ファイルのORACLE_HOME/ohs/mod_plsql/logs
にアラート、警告またはエラーが記録されます。mod_plsqlで記録される情報の量は、Oracle HTTP Serverのhttpd.conf
のLogLevel
パラメータ設定で制御されます。デフォルトでは、このパラメータはwarn
に設定されます。
また、次の手順に従って、mod_plsqlのパフォーマンス・ロギングをリクエストごとに有効化することもできます。
ORACLE_INSTANCE\config\OHS\ohs1\httpd.conf
を編集し、LogLevel
をinfo
(デフォルトはwarn
)に設定します。
次のコマンドを使用してOracle HTTP Serverを再起動します。
ORACLE_INSTANCE
\bin\opmnctl restartproc type=ohs
mod_plsqlに対してなんらかのURLを発行し、ファイルORACLE_INSTANCE\diagnostics\logs\OHS\ohs1\error_log
が次のようなエントリで始まることを確認します。
[Tue Apr 01 14:54:49 2003] [info] mod_plsql: [perf] 130.35.92.145 /pls/app/htp.p status=200 user=scott reqTime=21ms connSU=(null), 0ms connRO=(null),0ms connNSSO=HIT,1ms procTime=17ms sessionTidyTime=0ms cache=(null) cookie=(null), 0ms pageCalls=0,0ms bytes=5 describe=No,0ms streamTime=0ms pid=175 sessFile=(null) userFile=834\0855 sysFile=470\5949 cacheLevel=(null) cacheTime=0ms dbProcTime=15ms id=1049237685:130.35.92.145:373:1 spid=(null) qs=(null) requestTrace=(null) cookieLen=0 cookieValue=(null) reqUserTime=16ms assertUser=(null) subid=(null) authLevel=(null) oraError=0
最後に、mod_plsqlでデバッグ・ロギングを有効化できます。これは最上位のロギング・レベルであり、アクティブ・サイトの場合はお薦めしません。
注意: このロギング・モードは、Oracleサポート・サービスから要請された場合にのみ有効化してください。 |
このモードでは、デバッグ・メッセージがOracle HTTP Serverのerror_log
ファイルに記録され、さらにmod_plsql固有のログがORACLE_HOME
\ohs\mod_plsql\logs
に作成されます。ログの場所は、ORACLE_HOME
\ohs\conf\moduleconf\plsql.conf
内でPlsqlLogDirectory
ディレクティブを使用して設定可能です。デバッグ・レベルのロギングを有効化する手順は、次のとおりです。
ORACLE_HOME
\ohs\conf\moduleconf\plsql.conf
を編集し、PlsqlLogEnable
をOn(デフォルトはOff)に設定します。
次のコマンドを使用してOracle HTTP Serverを再起動します。
ORACLE_INSTANCE\bin\opmnctl restartproc type=ohs
mod_plsqlには高可用性についてどのような考慮事項がありますか。
高可用性のために、mod_plsqlベースのアプリケーションでは次のことを認識する必要があります。
mod_plsqlの構成パラメータPlsqlDatabaseConnectString
には、Oracle Internet DirectoryのLDAP検索を介して名前解決が行われるように、接続文字列形式のNetServiceNameFormat
を使用する必要があります。これにより、データベースのhost:port:service_name
情報を中央のリポジトリで設定でき、必要に応じたRACノードの追加または削除が容易になります。
mod_plsqlでは、停止中のデータベース接続が自動的に検出されます。詳細は、3.11.3項「接続プールでの停止中のデータベース接続の検出」を参照してください。
データベースがファイアウォールで分離されている場合、mod_plsqlではどのような考慮事項がありますか。
mod_plsqlを実行する中間層とバックエンド・データベースの間にファイアウォールが存在する場合は、mod_plsqlでアイドル・セッションのクリーンアップ間隔を、ファイアウォールでの間隔よりも短く設定する必要があります。これにより、mod_plsqlが確立した接続をファイアウォールがクローズすることはなくなります。
注意: mod_plsqlのアイドル・セッション・クリーンアップ間隔は、ORACLE_HOME \ohs\conf\moduleconf\plsql.conf 内のパラメータPlsqlIdleSessionCleanupInterval を使用して設定できます。デフォルト値は15分です。 |
PL/SQLアプリケーションに対して異なるホスト名、ポートまたはrequest_protocolをアサートするには、どうすればよいですか。
Oracle HTTP Serverインスタンスの手前にWeb Cacheまたはロード・バランシング・ルーターが存在する場合は、サイトのホスト名とポートをWeb CacheまたはLBRのホスト名およびポートとしてアサートする必要があります。このような場合は、Oracle HTTP Server設定ディレクティブServerName
およびPort
を使用してアサートすることをお薦めします。なんらかの理由でホスト名とポートをOracle HTTP Serverレベルでアサートしない場合は、mod_plsql設定ディレクティブPlsqlCGIEnvironmentList
を使用して、mod_plsqlで実行中のPL/SQLアプリケーションに対してのみ異なるホスト名とポートをアサートできます。たとえば、次のようになります。
PlsqlCGIEnvironmentList SERVER_NAME=lbr.us.oracle.com
かわりにOracle HTTP Serverのhttpd.conf
内のServerName
ディレクティブを使用することを考慮してください。
PlsqlCGIEnvironmentList SERVER_PORT=9999
かわりにOracle HTTP Serverのhttpd.conf
内のPort
ディレクティブを使用することを考慮してください。
PlsqlCGIEnvironmentList HTTP_HOST=myservername.us.oracle.com:9999
SERVER_NAME:SERVER_PORT
の組合せです。
同様に、サイトが外部からはSSLとしてアクセスされるが、内部的には非SSLモードで(間にSSLアクセラレータを使用して)稼働する場合は、PL/SQLアプリケーションで非SSLリンクのかわりにSSLリンクを生成できるように、REQUEST_PROTOCOLをHTTPSとしてアサートできます。たとえば、次のようになります。
PlsqlCGIEnvironmentList REQUEST_PROTOCOL=https
特定のパターンを持つプロシージャ名へのアクセスを無効化するにはどうすればよいですか。
詳細は、2.1.2項「mod_plsqlでのPlsqlExclusionListディレクティブへのルールの追加」を参照してください。
ファイルORACLE_HOME/Apache/Apache/conf/error_logにエラー「HTTP-503 ORA-12154」があります。これは何を意味しますか。
このエラーは、mod_plsqlからデータベースに接続できないことを意味します。
次のことを確認してください。
データベースが稼働中であること。
DADに指定されているユーザー名およびパスワード情報が正しいこと。
中間層が、DADのPlsqlDatabaseConnectString
パラメータを使用してデータベースに接続できること。
ほとんどの場合、この問題が発生するのは、SQL*NetがORACLE_HOME
/network/admin
にある設定情報を使用して接続文字列パラメータを解決できないためです。
TNSFormat
またはNetServiceNameFormat
を使用して設定したエントリの場合は、tnsping dad_connect_string
を使用して接続文字列情報を確認します。たとえば、次のようになります。
tnsping "cn=iasdb,cn=oraclecontext"
または
tnsping iasdb.us.oracle.com
SIDFormat
およびServiceNameFormat
を使用して設定したエントリの場合は、データベース・リスナーのhostname、portおよびSID/service_name情報が一致していることを確認します。その後、SQL*PlusでDADにあるユーザー名、パスワードおよび接続文字列を使用してデータベースに接続できることを確認します。
接続できない場合、トラブルシューティング情報についてはOracle SQL*Netのマニュアルを参照してください。
注意: DADのデフォルトの接続文字列パラメータは、Oracle Internet DirectoryでLDAP検索を介して解決されるように設定されます。ldap.ora を変更した場合は、その変更にmod_plsqlからアクセスできるようにOracle HTTP Serverを再起動する必要があります。 |
mod_plsqlの起動時に、/DAD/package.procedure()または/DAD/package.procedure(123)という形式のURLが機能しないのはなぜですか。
mod_plsqlでは次の形式のURLをサポートしていません。
/DAD/package.procedure()
/DAD/package.procedure(123)
たとえば、次のようになります。
http://www.acme.com:9000/pls/mydad/mypackage.myproc()
またはhttp://www.acme.com:9000/pls/mydad/mypackage.myproc(123)
サポートされているURLの形式の詳細は、3.3項「mod_plsqlの実行」を参照してください。