...

日本語 - OTN

by user

on
Category: Documents
10

views

Report

Comments

Transcript

日本語 - OTN
Oracle® HTTP Server
mod_plsql ユーザーズ・ガイド
10g リリース 1(10.1)
部品番号 : B13516-01
2004 年 2 月
Oracle HTTP Server mod_plsql ユーザーズ・ガイド , 10g リリース 1(10.1)
部品番号 : B13516-01
原本名 : Oracle HTTP Server mod_plsql User's Guide, 10g Release 1 (10.1)
原本部品番号 : B12303-01
原本著者 : Peter Lubbers
原本協力者 : Pravin Prabhakar, Pushkar Kapasi, Eric Lee, and Thomas Van Raalte
Copyright © 1996, 2003 Oracle Corporation. All rights reserved.
制限付権利の説明
このプログラム(ソフトウェアおよびドキュメントを含む)には、オラクル社およびその関連会社に所
有権のある情報が含まれています。このプログラムの使用または開示は、オラクル社およびその関連会
社との契約に記された制約条件に従うものとします。著作権、特許権およびその他の知的財産権と工業
所有権に関する法律により保護されています。
独立して作成された他のソフトウェアとの互換性を得るために必要な場合、もしくは法律によって規定
される場合を除き、このプログラムのリバース・エンジニアリング、逆アセンブル、逆コンパイル等は
禁止されています。
このドキュメントの情報は、予告なしに変更される場合があります。オラクル社およびその関連会社は、
このドキュメントに誤りが無いことの保証は致し兼ねます。これらのプログラムのライセンス契約で許
諾されている場合を除き、プログラムを形式、手段(電子的または機械的)
、目的に関係なく、複製また
は転用することはできません。
このプログラムが米国政府機関、もしくは米国政府機関に代わってこのプログラムをライセンスまたは
使用する者に提供される場合は、次の注意が適用されます。
U.S. GOVERNMENT RIGHTS
Programs, software, databases, and related documentation and technical data delivered to U.S.
Government customers are "commercial computer software" or "commercial technical data" pursuant to
the applicable Federal Acquisition Regulation, and agency-specific supplemental regulations. As such,
use, duplication, disclosure, modification, and adaptation of the Programs, including documentation and
technical data, shall be subject to the licensing restrictions set forth in the applicable Oracle license
agreement, and, to the extent applicable, the additional rights set forth in FAR 52.227-19, Commercial
Computer Software--Restricted Rights (June 1987). Oracle Corporation, 500 Oracle Parkway, Redwood
City, CA 94065.
このプログラムは、核、航空産業、大量輸送、医療あるいはその他の危険が伴うアプリケーションへの
用途を目的としておりません。このプログラムをかかる目的で使用する際、上述のアプリケーションを
安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)
、その他の対策を講じ
ることは使用者の責任となります。万一かかるプログラムの使用に起因して損害が発生いたしましても、
オラクル社およびその関連会社は一切責任を負いかねます。
Oracle は Oracle Corporation およびその関連会社の登録商標です。その他の名称は、Oracle
Corporation または各社が所有する商標または登録商標です。
目次
はじめに ............................................................................................................................................................................
v
関連ドキュメント ..................................................................................................................................................... vi
表記規則 ..................................................................................................................................................................... vi
Oracle のサービスとサポート ............................................................................................................................... vii
1
mod_plsql の概要
クライアント・リクエストの処理 .......................................................................................................................
データベース・アクセス記述子(DAD)
)...........................................................................................................
データベース・アクセス記述子(
mod_plsql の実行 ..................................................................................................................................................
トランザクション・モード ...................................................................................................................................
サポートされるデータ型 .......................................................................................................................................
パラメータの受渡し ...............................................................................................................................................
名前によるパラメータの受渡し(パラメータのオーバーロード).........................................................
1-2
1-3
1-4
1-7
1-7
1-7
1-8
柔軟なパラメータの受渡し ......................................................................................................................... 1-10
2 パラメータ・インタフェース .......................................................................................................... 1-10
4 パラメータ・インタフェース .......................................................................................................... 1-11
大きなパラメータの受渡し ......................................................................................................................... 1-12
ファイルのアップロードとダウンロード ......................................................................................................... 1-12
ドキュメント表の定義 ................................................................................................................................. 1-13
CONTENT 列のセマンティクス ........................................................................................................
CONTENT_TYPE 列のセマンティクス ............................................................................................
LAST_UPDATED 列のセマンティクス ............................................................................................
DAD_CHARSET 列のセマンティクス .............................................................................................
以前のスタイルのドキュメント表の定義 .................................................................................................
1-14
1-14
1-14
1-14
1-15
i
ドキュメントのアップロード / ダウンロードの構成パラメータ ........................................................ 1-15
PlsqlDocumentTablename ..................................................................................................................
PlsqlDocumentPath(ドキュメント・アクセス・パス)...............................................................
PlsqlDocumentProcedure(ドキュメント・アクセス・プロシージャ).....................................
PlsqlUploadAsLongRaw .....................................................................................................................
ファイルのアップロード .............................................................................................................................
1-16
1-16
1-17
1-17
1-18
アップロード・ファイルの属性(MIME タイプ)の指定 .................................................................... 1-20
複数のファイルのアップロード ................................................................................................................. 1-20
ファイルのダウンロード ............................................................................................................................. 1-21
BLOB のダイレクト・ダウンロード ......................................................................................................... 1-22
パスのエイリアシング(ダイレクト・アクセス URL)
).................................................................................
Common Gateway Interface(
(CGI)環境変数
)環境変数 ..............................................................................................
CGI 環境変数の追加およびオーバーライド ............................................................................................
PlsqlNLSLanguage .......................................................................................................................................
1-23
1-24
1-25
1-26
REQUEST_CHARSET CGI 環境変数 ................................................................................................ 1-26
REQUEST_IANA_CHARSET CGI 環境変数 ................................................................................... 1-26
mod_plsql での制限事項 .................................................................................................................................... 1-27
2
mod_plsql の設定
要件の確認 ............................................................................................................................................................... 2-2
必須パッケージのインストール ........................................................................................................................... 2-2
PL/SQL アプリケーション用の DAD の作成 .................................................................................................... 2-5
3
mod_plsql を使用したアプリケーション・データベース・アクセスの保護
mod_plsql を使用したユーザー認証 .................................................................................................................. 3-2
Basic(データベース制御認証).................................................................................................................... 3-2
Oracle HTTP Server mod_plsql の Basic 認証モード ............................................................................... 3-3
グローバル OWA、カスタム OWA およびパッケージ別(カスタム認証)......................................... 3-3
ユーザーの認証解除 ............................................................................................................................................... 3-4
PUBLIC に付与されている PL/SQL プロシージャの保護 .............................................................................. 3-5
mod_plsql での PlsqlExclusionList ディレクティブの使用 .................................................................... 3-5
PlsqlExclusionList ディレクティブへのアクセス ..................................................................................... 3-6
ii
4
PL/SQL パフォーマンスの最適化
Oracle HTTP Server での PL/SQL のパフォーマンス : 概要 ..........................................................................
Oracle HTTP Server でのプロセスベース操作とスレッドベース操作 .........................................................
mod_plsql のパフォーマンス・チューニングの問題 ......................................................................................
mod_plsql を使用した接続プーリング .......................................................................................................
4-2
4-4
4-4
4-5
プール内のデータベース・セッションのクローズ ................................................................................... 4-7
mod_plsql 接続プールの再起動 ................................................................................................................... 4-8
mod_plsql のパフォーマンス・チューニング領域 .......................................................................................... 4-8
PL/SQL ベース Web アプリケーション開発時の考慮事項 ..................................................................... 4-8
接続プーリングのヒントと Oracle HTTP Server 構成 ........................................................................... 4-10
データベース・セッション数のチューニング ......................................................................................... 4-12
2 リスナー方式 .............................................................................................................................................. 4-13
オーバーヘッドの問題 ................................................................................................................................. 4-15
Describe オーバーヘッド .................................................................................................................... 4-15
Describe オーバーヘッドの回避 ........................................................................................................ 4-15
柔軟なパラメータの受渡し(4 パラメータ)のオーバーヘッド .......................................................... 4-16
PL/SQL ベースの Web アプリケーションでのキャッシュの使用 ............................................................... 4-17
検証テクニックの使用 ................................................................................................................................. 4-17
Last-Modified メソッド .......................................................................................................................
Entity Tag メソッド .............................................................................................................................
mod_plsql への検証テクニックの使用 .............................................................................................
検証テクニックを使用した第 2 リクエスト .....................................................................................
Expires テクニックの使用 ..........................................................................................................................
4-18
4-18
4-19
4-20
4-21
PL/SQL ベースの Web アプリケーションでのシステムレベルおよびユーザーレベル・
キャッシュ ..................................................................................................................................................... 4-24
ファイル・システム・キャッシュのチューニングによるキャッシュ・パフォーマンスの改善 ............. 4-27
ファイル・システム・キャッシュのチューニングの概要 ..................................................................... 4-27
ファイル・システム・キャッシュの有効化 ............................................................................................. 4-29
より高速のファイル・システムに常駐するファイル・システム・キャッシュの構成 ..................... 4-29
ファイル・システム・キャッシュのサイズ変更 ..................................................................................... 4-30
PlsqlCacheTotalSize を使用したキャッシュ・サイズ合計の設定 ................................................
PlsqlCacheMaxAge を使用したキャッシュのエージング日数の設定 .........................................
PlsqlCacheMaxSize を使用したキャッシュ・ファイルの最大ファイル・サイズの設定 .........
キャッシュのクリーン・アップの構成 .....................................................................................................
4-30
4-31
4-32
4-32
Oracle HTTP Server のディレクティブ ........................................................................................................... 4-33
iii
A
よくある質問
索引
iv
はじめに
このマニュアルでは、mod_plsql のインストール、設定およびメンテナンスの方法について
説明します。次の章が含まれています。
■
第 1 章「mod_plsql の概要」では、mod_plsql とその機能の概要を説明します。
■
第 2 章「mod_plsql の設定」では、mod_plsql の使用方法について説明します。
■
■
■
第 3 章「mod_plsql を使用したアプリケーション・データベース・アクセスの保護」で
は、mod_plsql を使用してデータベース・アクセスを保護する方法について説明しま
す。
第 4 章「PL/SQL パフォーマンスの最適化」では、PL/SQL のパフォーマンスを最適化
する方法について説明します。
付録 A「よくある質問」では、よくある質問とそれに対する回答について説明します。
新機能
このリリースの mod_plsql には、次の新機能が組み込まれています。
■
■
■
■
拡張されたキャッシュ・クリーン・アップ・アルゴリズム。キャッシュのクリーン・
アップ時間を設定できます。
拡張された OWA パッケージ。マルチバイト・データベースからのレスポンス・データ
のバイト・パック率が改善され、データベースへのラウンドトリップの所要時間が短縮
されました。
htp.p など、頻繁にコールされる OWA パッケージ API における PL/SQL ファンクショ
ン・コールのオーバーヘッドの減少。
拡張された mod_plsql でのパフォーマンス・ロギング。詳細は、付録 A「よくある質
問」の「mod_plsql ではどのような種類のロギング機能を使用できますか ?」を参照し
てください。
v
DAD 構成でのスキーマ・パスワードの不明瞭化により強化されたセキュリティ。
■
mod_plsql にアクセスするための仮想パスに /pls が必要であるという要件の削除。
/pls は引き続き使用できますが、必須ではなくなりました。mod_plsql は Oracle
HTTP Server 構成と統合されているため、mod_plsql の URL を /pls 接頭辞で始める
必要はありません。
■
関連ドキュメント
次のマニュアルも役立ちます。
■
『Oracle Database アプリケーション開発者ガイド - 基礎編』
■
『Oracle HTTP Server 管理者ガイド』
表記規則
このマニュアルでは、次の表記規則を使用しています。
表記規則
.
.
意味
コード例の中にある垂直の省略記号は、コード例に直接関係のない情報
が省略されていることを示します。
.
vi
...
構文またはコマンドの中にある水平の省略記号は、例に直接関係のない
構文またはコマンドの一部が省略されていることを示します。
太字
本文の中にある太字は、本文中に定義されている用語を示します。
<>
山カッコで囲まれている項目は、ユーザーが指定する名前を示します。
[]
大カッコで囲まれている項目は、オプション句を示します。選択肢の中
から 1 つ選択するか、または何も入力しなくてもかまいません。
Oracle のサービスとサポート
Oracle 製品およびグローバル・サービスに関する情報は、次の URL で入手できます。
http://www.oracle.co.jp
次の各項に、各サービスに接続するための URL を記載します。
OTN-J(
(Oracle Technology Network Japan)
)
OTN-J(Oracle Technology Network Japan)へは、次の URL で登録することができます。
http://otn.oracle.co.jp
OTN-J では、テクニカル・ペーパー、ディスカッション・フォーラム、コード・サンプル、
製品マニュアル、セルフサービス開発者のサポート、および Oracle の開発者用の主要製品
を提供しています。これによって、Oracle テクノロジに基づいたアプリケーションの開発お
よび配布を促進できます。
オラクル社カスタマ・サポート・センター
テクニカル・サポートへの連絡先のリストは、次の URL で入手できます。
http://www.oracle.co.jp/support
問題点についての情報を事前に準備しておくためのテンプレートが用意されています。CSI
番号(ある場合)または詳細な連絡先情報が必要です。また、プロジェクト固有の情報があ
ればそれも含めてください。
vii
viii
1
mod_plsql の概要
mod_plsql は、Web 上での PL/SQL ベースのアプリケーションの構築をサポートします。
PL/SQL ストアド・プロシージャは、データベースからデータを取得し、Web ブラウザで表
示するデータとコードが含まれた HTTP レスポンスを生成します。mod_plsql は、OracleAS
Portal など、他の Oracle 製品もサポートしています。
この章の内容は、次のとおりです。
■
クライアント・リクエストの処理
■
データベース・アクセス記述子(DAD)
■
mod_plsql の実行
■
トランザクション・モード
■
サポートされるデータ型
■
パラメータの受渡し
■
ファイルのアップロードとダウンロード
■
パスのエイリアシング(ダイレクト・アクセス URL)
■
Common Gateway Interface(CGI)環境変数
■
mod_plsql での制限事項
mod_plsql の概要
1-1
クライアント・リクエストの処理
クライアント・リクエストの処理
mod_plsql は、データベースと通信を行う Oracle HTTP Server のプラグインです。これに
よって、ブラウザ・リクエストが、SQL*Net 接続を通じてデータベース・ストアド・プロ
シージャ・コールにマッピングされます。通常、仮想パスの /pls で示されます。
次に、サーバーがクライアント・リクエストを受信するときのステップの概要を説明しま
す。
1.
Oracle HTTP Server がクライアント・ブラウザから PL/SQL Server Page リクエストを
受信します。
2.
Oracle HTTP Server は、そのリクエストを mod_plsql にルーティングします。
3.
mod_plsql は、リクエストを Oracle データベースに転送します。mod_plsql は、DAD
に格納された設定情報を使用して、データベースに接続します。
1-2 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
データベース・アクセス記述子(DAD)
4.
mod_plsql は、コール・パラメータを準備して、アプリケーション内の PL/SQL プロ
シージャを実行します。
5.
PL/SQL プロシージャは、データベースからアクセスしたデータおよび PL/SQL Web
Toolkit を使用して、HTML ページを生成します。
6.
レスポンスが mod_plsql に返されます。
7.
Oracle HTTP Server は、そのレスポンスをクライアント・ブラウザに送信します。
mod_plsql から実行されたプロシージャは、HTTP レスポンスをクライアントに返します。
この作業を簡単にするために、mod_plsql には PL/SQL Web Toolkit が含まれています。
PL/SQL Web Toolkit には、OWA パッケージと呼ばれるパッケージのセットが含まれていま
す。これらのパッケージをストアド・プロシージャ内で使用して、リクエスト情報の取得、
HTML タグの作成およびクライアントへのヘッダー情報の返信を行います。すべてのユー
ザーがアクセスできるように、このツールキットは共通スキーマにインストールします。
データベース・アクセス記述子(DAD)
)
データベース・アクセス記述子(
各 mod_plsql リクエストは、データベース・アクセス記述子(DAD)に関連付けられてい
ます。DAD は、データベース・アクセスに使用される設定値のセットです。DAD により、
次のような情報が指定されます。
■
データベース別名(Net8 サービス名)
■
データベースがリモートの場合、その接続文字列
■
ドキュメントのアップロードおよびダウンロード用のプロシージャ
また、DAD にはユーザー名とパスワードの情報を指定できます。指定がない場合には、
URL の実行時にユーザー名とパスワードを入力するプロンプトが表示されます。
関連項目 : DAD パラメータの説明と mod_plsql 構成ファイルの概要は、
『Oracle HTTP Server 管理者ガイド』を参照してください。
mod_plsql の概要
1-3
mod_plsql の実行
mod_plsql の実行
mod_plsql を Web ブラウザで実行するには、次の形式で URL を入力します。
protocol://hostname[:port]/DAD_location/[[!][schema.][package.]proc_name[?query_string]]
表 1-1 mod_plsql 実行時のパラメータ
パラメータ
説明
protocol
http または https のいずれかを使用できます。SSL の場合は、
https を使用します。
hostname
Web サーバーが稼動しているマシンです。
port
Web サーバーがリスニングしているポートです。指定しない場
合、ポート 80 が使用されます。
(オプション)
DAD location
Web サーバーで設定した PL/SQL リクエストを処理するための
仮想パスです。DAD location に使用できるのは ASCII 文字のみ
です。
! character
柔軟なパラメータの受渡しスキームを使用することを示します。
詳細は、1-10 ページの「柔軟なパラメータの受渡し」を参照して
ください。
(オプション)
schema
(オプション)
package
(オプション)
データベース・スキーマ名です。指定しない場合、package.proc_
name の名前解決は、URL リクエストを処理したデータベース・
ユーザーに基づいて行われます。
PL/SQL ストアド・プロシージャを含んだパッケージです。指定
しない場合、プロシージャはスタンドアロンになります。
proc_name
実行する PL/SQL ストアド・プロシージャです。ファンクション
ではなく、プロシージャを指定する必要があります。IN 引数の
み使用可能です。
?query_string
ストアド・プロシージャのパラメータです。この文字列は、GET
メソッドの書式に従います。たとえば、次のようになります。
(オプション)
■
■
■
複数のパラメータはアンパーサント(&)で区切ります。渡
される値内にある空白文字はプラス(+)に置き換えられま
す。
HTML フォームを使用して文字列を生成する場合(文字列を
自分で生成するのではなく)、書式化は自動的に行われます。
HTTP リクエストが HTTP の POST メソッドを使用してデー
タを mod_plsql に送信する場合もあります。詳細は、1-6
ページの「POST メソッド、GET メソッドおよび HEAD メ
ソッド」を参照してください。
1-4 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
mod_plsql の実行
例 1-1 引数をとらないプロシージャの起動
http://www.acme.com:9000/pls/mydad/mypackage.myproc
この場合、www.acme.com で稼動し、ポート 9000 でリスニングしている Web サーバーが
リクエストを処理します。Web サーバーは、リクエストを受信すると、そのリクエストを
mod_plsql に渡します。これは、その Web サーバーが mod_plsql を実行するように設定さ
れていることが、/pls/mydad により示されるためです。次に、mod_plsql は、
/pls/mydad に関連付けられている DAD を使用して、mypackage に格納されている
myproc プロシージャを実行します。
例 1-2 引数をとるプロシージャの起動
http://www.acme.com:9000/pls/mydad/mypackage.myproc?a=v&b=1
この場合、www.acme.com で稼動し、ポート 9000 でリスニングしている Web サーバーが
リクエストを処理します。Web サーバーはリクエストを受信すると /pls/mydad に関連付
けられている DAD を使用して、mypackage に格納されている myproc プロシージャを実
行し、値 v および 1 を使用して 2 つの引数 a および b をこのプロシージャに渡します。
例 1-3 DAD 設定に格納されているデフォルト・プロシージャの起動
http://www.acme.com:9000/pls/mydad
この場合、www.acme.com で稼動し、ポート 9000 でリスニングしている Web サーバーが
リクエストを処理します。Web サーバーは、リクエストを受信すると /pls/mydad に関連
付けられている DAD を使用して、DAD で構成されているデフォルト・プロシージャを起
動します。たとえば、DAD /pls/mydad の設定パラメータ PlsqlDefaultPage が
myschema.mypackage.myproc に設定されている場合は、リクエストに対して
myschema.mypackage.myproc プロシージャが起動されます。
この例では、mydad という DAD のデフォルトのホーム・ページ(DAD の設定で指定され
ている)が表示されます。
mod_plsql の概要
1-5
mod_plsql の実行
POST メソッド、GET
メソッド、
メソッドおよび HEAD メソッド
HTTP プロトコルの POST メソッド、GET メソッドおよび HEAD メソッドは、パラメー
タ・データをアプリケーションに渡す方法(通常は名前 / 値ペア形式)をブラウザに対して
指示します。パラメータ・データは HTML フォームによって生成されます。
mod_plsql アプリケーションでは、いずれのメソッドも使用できます。各メソッドのセキュ
アは、使用する転送プロトコル(http または https)によって決定されます。
■
■
■
■
POST メソッドを使用する場合、パラメータは Request Body 内で渡されます。大量のパ
ラメータ・データをサーバーに渡す場合は、通常、POST メソッドを使用します。
GET メソッドを使用する場合、パラメータは問合せ文字列を使用して渡されます。この
メソッドには、使用するオペレーティング・システムにより、名前 / 値ペアの値の長さ
が環境変数の値の最大長を超えることができないという制限があります。さらに、オペ
レーティング・システムにより、定義できる環境変数の数も制限されます。
HEAD メソッドを使用する場合、GET メソッドと同じ機能を使用できます。唯一の違い
は、HTTP ステータス行および HTTP ヘッダーのみが返されることです。コンテンツ・
データは、ブラウザに返信されません。このメソッドは、リクエストが正しく処理され
ているかどうかの確認のみを行う監視ツールで有効です。
複合モードでの使用 - mod_plsql では、一部のパラメータを問合せ文字列で渡し、それ
以外のパラメータを POST データとして渡すことができます。たとえば、プロシージャ
foo (a varchar2, b number) で値 v と 1 をそれぞれ a と b に渡す場合は、次の 3 つの方
法で値を渡して URL を作成できます。
■
すべての値を問合せ文字列の一部として指定します。
http://host:port/pls/DAD/foo?a=v&b=1
■
すべての値を POST データの一部として指定します。
http://host:port/pls/DAD/foo, POST data="a=v&b=1"
■
一部のパラメータは URL で指定し、それ以外のパラメータは POST データで指定し
ます。
http://host:port/pls/DAD/foo?a=v, POST data="b=1"
1-6 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
パラメータの受渡し
トランザクション・モード
プロシージャを実行するために URL リクエストを処理した後、エラーがあれば、mod_plsql
によりロールバックが実行されます。そうでない場合は、コミットが実行されます。このメ
カニズムでは、トランザクションが複数の HTTP リクエストにまたがることはできません。
この状態を保持しないモデルの場合、アプリケーションは、通常 HTTP Cookie またはデー
タベース表を使用して状態を維持します。
サポートされるデータ型
HTTP でサポートされるのはキャラクタ・ストリームのみのため、mod_plsql では PL/SQL
データ型の次のサブセットがサポートされます。
■
NUMBER
■
VARCHAR2
■
TABLE OF NUMBER
■
TABLE OF VARCHAR2
レコードはサポートされません。
パラメータの受渡し
mod_plsql は、次の処理をサポートしています。
■
名前によるパラメータの受渡し
プロシージャまたはファンクションを起動する URL 内の各パラメータは、一意の名前
により識別されます。パラメータのオーバーロードがサポートされています。詳細は、
1-8 ページの「名前によるパラメータの受渡し(パラメータのオーバーロード)
」を参照
してください。
■
柔軟なパラメータの受渡し
プロシージャの先頭に感嘆符(!)が付加されます。詳細は、1-10 ページの「柔軟なパ
ラメータの受渡し」を参照してください。
■
大きなパラメータ(最大 32KB)の受渡し
詳細は、1-12 ページの「大きなパラメータの受渡し」を参照してください。
mod_plsql の概要
1-7
パラメータの受渡し
注意 : mod_plsql では、値を PL/SQL 表に格納することで複数の値をと
る変数が処理されます。これにより、ユーザーが選択できる値の数を柔軟
に設定し、ユーザーによる選択を 1 単位として簡単に処理できます。それ
ぞれの値は、PL/SQL 表の 1 行に索引 1 から順番に格納されます。複数の
値をとる変数の(問合せ文字列に指定されている順で)最初の値は索引 1、
同じ変数の 2 番目の値は索引 2 に格納されます。PL/SQL 表の値の順序が
プロシージャで重要な場合は、問合せ文字列に含まれる変数の順序を決定
するか、または PL/SQL アプリケーションを変更して内部的に順序付けさ
せる必要があります。
複数の値をとる変数がない場合、変数値はプロシージャのパラメータに位
置ではなく名前で渡されるため、変数の順序は重要ではありません。
mod_plsql 環境でパラメータとして使用する PL/SQL 表は、ベース型を
VARCHAR2 とする必要があります。Oracle では、VARCHAR2 を NUMBER、
DATE または LONG などの他のデータ型に変換できます。VARCHAR2 変数
の最大長は 32K です。
PL/SQL 表に対して 1 つ以上の値が送信されるという保証がない場合
(ユーザーがオプションをまったく選択しなくてもよい場合など)は、
HIDDEN フォーム・エレメントを使用して最初の値を提供します。
PL/SQL 表に値を提供しないとエラーが生成されます。また、PL/SQL 表
のデフォルト値は提供できません。
名前によるパラメータの受渡し(パラメータのオーバーロード)
オーバーロードにより、名前が同じでパラメータの数、順序またはデータ型のファミリが異
なる複数のサブプログラム(プロシージャまたはファンクション)を使用できます。オー
バーロードされたサブプログラムをコールすると、PL/SQL コンパイラは渡されたデータ型
に基づいて、どのサブプログラムをコールするかを決定します。
PL/SQL では、ローカル・サブプログラムとパッケージ・サブプログラムをオーバーロード
できます。スタンドアロン・サブプログラムはオーバーロードできません。
パラメータ数が同じサブプログラムをオーバーロードする場合は、パラメータに違う名前を
付ける必要があります。HTML データはデータ型に関連付けられないため、mod_plsql は、
どのバージョンのサブプログラムをコールすればよいか判断できません。
たとえば、PL/SQL では、プロシージャに対して同じパラメータ名を使用して、次の例に示
す 2 つのプロシージャを定義できますが、これを mod_plsql で使用するとエラーが発生しま
す。
-- legal PL/SQL, but not for mod_plsql
CREATE PACKAGE my_pkg AS
PROCEDURE my_proc (val IN VARCHAR2);
PROCEDURE my_proc (val IN NUMBER);
END my_pkg;
1-8 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
パラメータの受渡し
エラーを回避するには、パラメータに異なる名前をつけます。たとえば、次のようになりま
す。
-- legal PL/SQL and also works for mod_plsql
CREATE PACKAGE my_pkg AS
PROCEDURE my_proc (valvc2 IN VARCHAR2);
PROCEDURE my_proc (valnum IN NUMBER);
END my_pkg;
最初のバージョンのプロシージャを実行する URL は次のようになります。
http://www.acme.com/pls/mydad/my_pkg.my_proc?valvc2=input
2 番目のバージョンのプロシージャを実行する URL は次のようになります。
http://www.acme.com/pls/mydad/my_pkg.my_proc?valnum=34
オーバーロードと PL/SQL 配列
パラメータ名が同じで、1 つのプロシージャのデータ型が owa_util.ident_arr(varchar2 の
表)
、もう 1 つのプロシージャのデータ型がスカラー型のオーバーロード PL/SQL プロシー
ジャがあるとします。このような場合でも、mod_plsql はこの 2 つのプロシージャを区別で
きます。たとえば、次のプロシージャがあるとします。
CREATE PACKAGE my_pkg AS
PROCEDURE my_proc (val IN VARCHAR2); -- scalar data type
PROCEDURE my_proc (val IN owa_util.ident_arr); -- array data type
END my_pkg;
これらのプロシージャには、それぞれ val という同じ名前のパラメータが 1 つあります。
mod_plsql が val パラメータの値を 1 つだけ持つリクエストを受け取ると、スカラー・デー
タ型のプロシージャが実行されます。
例 1-4 次の URL を送信して、スカラー・バージョンのプロシージャを実行します。
http://www.acme.com/pls/mydad/my_proc?val=john
mod_plsql は、val パラメータの値が複数存在するリクエストを受け取ると、配列データ型
のプロシージャを実行します。
例 1-5 次の URL を送信して、配列バージョンのプロシージャを実行します。
http://www.acme.com/pls/mydad/my_proc?val=john&val=sally
確実に配列バージョンを実行できるようにする場合は、HTML ページで HIDDEN フォー
ム・エレメントを使用してダミーの値を送信します。このダミーの値は、プロシージャ内で
チェックされ、破棄されます。
mod_plsql の概要
1-9
パラメータの受渡し
柔軟なパラメータの受渡し
ユーザーがエレメントを必要な数だけ選択できるような HTML フォームを使用できます。
これらのエレメントにそれぞれ異なる名前が付いている場合は、オーバーロード・プロシー
ジャを作成して可能な組合せを個別に処理する必要があります。または、問合せ文字列に含
まれる名前が、ユーザーが選択するエレメントに関係なく確実に毎回一貫したものになるよ
うに、HIDDEN フォーム・エレメントを挿入できます。mod_plsql は、ユーザーが任意の
数のエレメントを選択できる HTML フォームを処理するために、柔軟なパラメータの受渡
しをサポートすることで、この操作を容易にします。
URL ベースのプロシージャ実行で柔軟なパラメータの受渡しを使用するには、URL 内でプ
ロシージャ名の先頭に感嘆符(!)を付加します。2 パラメータまたは 4 パラメータを使用で
きます。2 パラメータ・インタフェースによって、mod_plsql のパフォーマンスが改善され
ます。4 パラメータ・インタフェースは、互換性維持のためにサポートされています。
2 パラメータ・インタフェース
procedure [proc_name]
(name_array IN [array_type],
value_array IN [array_type]);
表 1-2 2 パラメータ・インタフェースのパラメータ
パラメータ
説明
proc_name
実行する PL/SQL プロシージャの名前です。
(必須)
name_array
問合せ文字列から取り出される名前(1 から順番に索引付けされる)
を送信された順序で示します。
value_array
問合せ文字列から取り出される値(1 から順番に索引付けされる)を
送信された順序で示します。
array_type
varchar2 型の表による任意の PL/SQL 索引です(owa.vc_arr など)
。
(必須)
例 1-6 次の URL を送信します。
http://www.acme.com/pls/mydad/!scott.my_proc?x=john&y=10&z=doe
感嘆符(!)接頭辞により、柔軟なパラメータの受渡しを使用する必要があることを
mod_plsql に知らせます。これにより、プロシージャ scott.myproc が実行され、次の 2 つの
引数が渡されます。
1-10 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
パラメータの受渡し
name_array ==> ('x', 'y', 'z')
value_array ==> ('john', '10', 'doe')
注意 : このスタイルの柔軟なパラメータの受渡しを使用する場合は、パ
ラメータ name_array および value_array を使用してプロシージャを定義す
る必要があります。これらの引数のデータ型は、例に示したデータ型と一
致する必要があります。
4 パラメータ・インタフェース
4 パラメータ・インタフェースは、互換性維持のためにサポートされています。
procedure [proc_name]
(num_entires IN NUMBER,
name_array IN [array_type],
value_array IN [array_type],
reserved in [array_type]);
表 1-3 4 パラメータ・インタフェースのパラメータ
パラメータ
説明
proc_name
実行する PL/SQL プロシージャの名前です。
(必須)
num_entries
問合せ文字列内の名前 / 値ペアの数です。
name_array
問合せ文字列から取り出される名前(1 から順番に索引付けされる)
を送信された順序で示します。
value_array
問合せ文字列から取り出される値(1 から順番に索引付けされる)を
送信された順序で示します。
reserved
未使用です。今後使用するために予約されています。
array_type
varchar2 型の表による任意の PL/SQL 索引です(owa.vc_arr など)
。
(必須)
例 1-7 query_string で名前 x が重複している次の URL を送信します。
http://www.acme.com/pls/mydad/!scott.my_pkg.my_proc?x=a&y=b&x=c
感嘆符(!)接頭辞により、柔軟なパラメータの受渡しを使用する必要があることを
mod_plsql に知らせます。これにより、プロシージャ scott.my_pkg.myproc が実行さ
れ、次の 2 つの引数が渡されます。
mod_plsql の概要
1-11
ファイルのアップロードとダウンロード
num_entries ==> 3
name_array ==> ('x', 'y', 'x');
value_array ==> ('a', 'b', 'c')
reserved ==> ()
注意 : このスタイルの柔軟なパラメータの受渡しを使用する場合は、パ
ラメータ num_entries、name_array、value_array および reserved を使用して
プロシージャを定義する必要があります。これらの引数のデータ型は、例
に示したデータ型と一致する必要があります。
大きなパラメータの受渡し
スカラー引数として渡される値と、varchar2 引数の索引付き表の要素として渡される値に使
用できるサイズは、最大 32KB です。
たとえば、柔軟なパラメータの受渡し(1-10 ページの「柔軟なパラメータの受渡し」を参
照)を使用する場合、URL の query_string 部分の名前または値は、それぞれ実行されるプロ
シージャの name_array または value_array 引数のエレメントとして渡されます。これ
らの名前または値に使用できるサイズは、最大 32KB です。
ファイルのアップロードとダウンロード
mod_plsql では、次のことが可能になります。
■
■
■
キャラクタ・セットを変換せずに、ファイルをロー・バイト・ストリームとしてアップ
ロードおよびダウンロードすることが可能です。ファイルは、ドキュメント表にアップ
ロードされます。PL/SQL アップロード・ハンドラ・ルーチンが適切な表の列を取得で
きるよう、主キーが渡されます。
異なるアプリケーションのファイルを混同しないよう、アプリケーションごとに 1 つ以
上の表を、アップロードされるファイル用に指定することが可能です。
問合せ文字列を使用しない形式の URL 経由でこれらの表のファイルにアクセスすること
が可能です。たとえば、次のようになります。
http://www.acme.com:9000/pls/mydad/docs/cs250/lecture1.htm
これは、URL の相互参照を含んだファイル・セットのアップロードをサポートするため
に必要です。
■
■
1 回のフォーム送信につき複数のファイルをアップロードすることが可能です。
ドキュメント表の LONG RAW および BLOB(バイナリ・ラージ・オブジェクト)型の
列にファイルをアップロードすることが可能です。
1-12 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
ファイルのアップロードとダウンロード
この項の内容は、次のとおりです。
■
ドキュメント表の定義
■
以前のスタイルのドキュメント表の定義
■
ドキュメントのアップロード / ダウンロードの構成パラメータ
■
ファイルのアップロード
■
アップロード・ファイルの属性(MIME タイプ)の指定
■
複数のファイルのアップロード
■
ファイルのダウンロード
■
BLOB のダイレクト・ダウンロード
ドキュメント表の定義
DAD ごとにドキュメント格納表を指定できます。ドキュメント格納表には、次の定義が必
要です。
CREATE TABLE [table_name] (
NAME
VARCHAR2(256) UNIQUE NOT NULL,
MIME_TYPE
VARCHAR2(128),
DOC_SIZE
NUMBER,
DAD_CHARSET
VARCHAR2(128),
LAST_UPDATED
DATE,
CONTENT_TYPE
VARCHAR2(128),
[content_column_name] [content_column_type]
[ , [content_column_name] [content_column_type]]
);
table_name は、ユーザーが選択できます。content_column_type 型には、LONG
RAW または BLOB のいずれかを使用します。
content_column_name は、対応する content_column_type によって異なります。
■
■
content_column_type が LONG RAW の場合、content_column_name は
CONTENT にする必要があります。
content_column_type が BLOB の場合、content_column_name は BLOB_
CONTENT にする必要があります。
次に、有効なドキュメント表の定義例を示します。
CREATE TABLE MYDOCTABLE (
NAME
VARCHAR(128)
MIME_TYPE
VARCHAR(128),
DOC_SIZE
NUMBER,
DAD_CHARSET
VARCHAR(128),
UNIQUE NOT NULL,
mod_plsql の概要
1-13
ファイルのアップロードとダウンロード
LAST_UPDATED
CONTENT_TYPE
CONTENT
BLOB_CONTENT
DATE,
VARCHAR(128),
LONG RAW,
BLOB ;
);
CONTENT 列のセマンティクス
表の内容は、CONTENT 列に格納されます。ドキュメント表には、複数の CONTENT 列を
含めることが可能です。ただし、ドキュメント表の各行について、CONTENT 列は 1 つのみ
使用されます。その他の CONTENT 列は NULL に設定されます。
CONTENT_TYPE 列のセマンティクス
CONTENT_TYPE 列は、ドキュメントが格納されている CONTENT 列を追跡するために使用
されます。ドキュメントがアップロードされると、mod_plsql により、この列の値が型名に
設定されます。
たとえば、ドキュメントが BLOB_CONTENT 列にアップロードされた場合、ドキュメント
の CONTENT_TYPE 列には文字列 BLOB が設定されます。
LAST_UPDATED 列のセマンティクス
LAST_UPDATED 列には、ドキュメントの作成日時または最終更新日時が反映されます。ド
キュメントがアップロードされると、mod_plsql により、ドキュメントの LAST_UPDATED
列にデータベース・サーバーの時間が設定されます。
その後、アプリケーションがドキュメントの内容または属性を変更する場合、
LAST_UPDATED の時間も更新されるようにする必要があります。
mod_plsql では、LAST_UPDATED 列を使用して、HTTP クライアント(ブラウザ)がドキュ
メントのキャッシュ済バージョンを使用できるかどうかをチェックし、HTTP クライアント
に結果を知らせます。これにより、ネットワークの通信量が削減され、サーバーのパフォー
マンスが改善されます。
DAD_CHARSET 列のセマンティクス
DAD_CHARSET 列は、ファイルのアップロード時のキャラクタ・セット設定を追跡します。
この列は、今後使用するために予約されています。
1-14 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
ファイルのアップロードとダウンロード
以前のスタイルのドキュメント表の定義
WebDB リリース 2.x より前のリリースで使用されているドキュメント・モデルとの下位互
換性を維持するために、mod_plsql では、CONTENT_TYPE、DAD_CHARSET および
LAST_UPDATED 列が存在しない、以前のドキュメント格納表の定義もサポートしていま
す。
/* older style document table definition (DEPRECATED) */
CREATE TABLE [table_name]
(
NAME
VARCHAR2(128),
MIME_TYPE
VARCHAR2(128),
DOC_SIZE
NUMBER,
CONTENT
LONG RAW
);
ドキュメントのアップロード / ダウンロードの構成パラメータ
DAD の次の設定パラメータが、ドキュメントのアップロードまたはダウンロード操作に影
響します。
■
PlsqlDocumentTablename
■
PlsqlDocumentPath(ドキュメント・アクセス・パス)
■
PlsqlDocumentProcedure(ドキュメント・アクセス・プロシージャ)
■
PlsqlUploadAsLongRaw
例 1-8 ドキュメントのアップロード / ダウンロードのパラメータ
DAD でこれらのパラメータが次のように設定されているとします。
PlsqlDocumentTablename
scott.my_document_table
PlsqlUploadAsLongRaw
html
PlsqlDocumentPath
docs
PlsqlDocumentProcedure
scott.my_doc_download_procedure
この場合は次のようになります。
■
■
■
mod_plsql は、scott スキーマの my_document_table データベース表からデータを取得
するか、この表にデータを格納します。
.html を除くすべてのファイル拡張子は、ドキュメント表に BLOB としてアップロード
されます。.html 拡張子が付いたファイルはすべて Long Raw としてアップロードされ
ます。
DAD location の直後に docs キーワードを含むすべての URL では、scott.my_doc_
download_procedure プロシージャが実行されます。
mod_plsql の概要
1-15
ファイルのアップロードとダウンロード
通常、このプロシージャは wpg_docload.download_file をコールして、URL 指定に基
づく名前を持ったファイルのダウンロードを開始します。
次に前述の構成の単純な例を示します。
http://www.acme.com/pls/dad/docs/index.html
この場合は、scott.my_document_table データベース表の Long Raw 列から index.html
ファイルがダウンロードされます。アプリケーション・プロシージャは開始するファイルの
ダウンロードを完全に制御し、ファイルレベルのアクセス制御とバージョニングを実装す
る、より複雑な PlsqlDocumentProcedure を柔軟に定義することに注意してください。
注意 : アプリケーション定義プロシージャ scott.my_doc_download_
procedure は引数なしで定義し、CGI 環境変数を使用してリクエストを処
理する必要があります。
PlsqlDocumentTablename
PlsqlDocumentTablename パラメータは、この DAD によってファイルがアップロードさ
れたときにドキュメントを格納する表を指定します。
構文 :
PlsqlDocumentTablename
[document_table_name]
PlsqlDocumentTablename
my_documents
または
PlsqlDocumentTablename
scott.my_document_table
PlsqlDocumentPath(ドキュメント・アクセス・パス)
(ドキュメント・アクセス・パス)
PlsqlDocumentPath パラメータは、ドキュメントにアクセスするためのパス・エレメン
トを指定します。PlsqlDocumentPath パラメータは、URL 内で DAD 名の後に付加され
ます。たとえば、ドキュメント・アクセス・パスが docs の場合、URL は次のようになりま
す。
http://www.acme.com/pls/mydad/docs/myfile.htm
mydad は DAD 名で、myfile.htm はファイル名です。
構文 :
PlsqlDocumentPath
[document_access_path_name]
1-16 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
ファイルのアップロードとダウンロード
PlsqlDocumentProcedure(ドキュメント・アクセス・プロシージャ)
(ドキュメント・アクセス・プロシージャ)
PlsqlDocumentProcedure プロシージャは、アプリケーション指定のプロシージャです。
このプロシージャはパラメータがなく、ドキュメント・アクセス・パスを持つ URL リクエ
ストを処理します。ドキュメント・アクセス・プロシージャは、ファイルをダウンロードす
るために、wpg_docload.download_file(filename) をコールします。ドキュメント・
アクセス・プロシージャは、URL 指定に基づいてファイル名を認識します。たとえば、アプ
リケーションでこれを使用して、ファイル・レベルのアクセス制御やバージョン管理を実装
することが可能です。このようなアプリケーションの例を、1-21 ページの「ファイルのダウ
ンロード」で示します。
構文 :
PlsqlDocumentProcedure
[document_access_procedure_name]
例 1-9
PlsqlDocumentProcedure
my_access_procedure
または
PlsqlDocumentProcedure
scott.my_pkg.my_access_procedure
PlsqlUploadAsLongRaw
DAD パラメータ PlsqlUploadAsLongRaw は、ファイル拡張子に基づいてファイルのアッ
プロードを設定します。PlsqlUploadAsLongRaw DAD パラメータの値は、1 行に 1 つの
エントリがあるファイル拡張子のリストです。これらの拡張子を持つファイルは、mod_
plsql により、ドキュメント表の LONG RAW 型の CONTENT 列にアップロードされます。他
の拡張子を持つファイルは、BLOB CONTENT 列にアップロードされます。
ファイル拡張子には、テキスト・リテラル(jpeg、gif など)またはアスタリスク(*)を使
用できます。アスタリスクは、PlsqlUploadAsLongRaw 設定でリストされていない拡張子
を持つすべてのファイルに一致します。
構文 :
PlsqlUploadAsLongRaw [file_extension]
PlsqlUploadAsLongRaw *
[file_extension] はファイル拡張子(ピリオド(.)の有無は関係なく、たとえば、txt
または .txt が使用可能です)またはワイルド・カード文字(*)です。
例 1-10
PlsqlUploadAsLongRaw
PlsqlUploadAsLongRaw
PlsqlUploadAsLongRaw
html
txt
*
mod_plsql の概要
1-17
ファイルのアップロードとダウンロード
ファイルのアップロード
クライアント・マシンからデータベースにファイルを送信する場合は、次に示す内容を含ん
だ HTML ページを作成します。
■
■
enctype 属性に multipart/form-data が設定され、action 属性に「アクション・プロ
シージャ」と呼ばれる mod_plsql プロシージャ・コールが関連付けられている FORM
タグ。
type 属性と name 属性に file が設定された INPUT エレメント。
INPUT type="file" エ
レメントを使用すると、ユーザーはファイル・システムのファイルを参照して、そこか
らファイルを選択できます。
ユーザーが「
「Submit」
」ボタンをクリックすると、次のイベントが発生します。
1.
ブラウザは、ユーザーが指定したファイルとその他のフォーム・データをサーバーに
アップロードします。
2.
mod_plsql は、ファイルの内容をデータベースのドキュメント格納表内に格納します。
表の名前は、PlsqlDocumentTablename DAD 設定から導出されます。
3.
FORM の action 属性で指定したアクション・プロシージャが、ファイルのアップロード
を行わずに mod_plsql プロシージャを実行する場合と同じように実行されます。
注意 : HTML ドキュメントの解析は、mod_plsql では使用されません。
HTML ファイルのアップロード時に mod_plsql を使用してその内容が解
析され、HTML ドキュメントが参照している他のファイルが識別されてい
ました。その後、この情報が表に格納されていました。表の名前は、ド
キュメント表の名前に part を追加したものが使用されていました。この機
能はカスタマにとって有用でないことが判明したため、リリース 9.0.4 以
上の mod_plsql では使用されなくなっています。
次の例に、アップロードするファイルをユーザーがファイル・システムから選択できる
HTML フォームを示します。このフォームには、ファイルに関する情報を入力できるその他
のフィールドも含まれています。
<html>
<head>
<title>test upload</title>
</head>
<body>
<FORM enctype="multipart/form-data"
action="pls/mydad/write_info"
method="POST">
<p>Author's Name:<INPUT type="text" name="who">
<p>Description:<INPUT type="text" name="description"><br>
<p>File to upload:<INPUT type="file" name="file"><br>
1-18 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
ファイルのアップロードとダウンロード
<p><INPUT type="submit">
</FORM>
</body>
</html>
ユーザーがフォームの「
「Submit」
」ボタンをクリックすると、次の処理が実行されます。
1.
ブラウザにより、INPUT type="file" エレメントにリストされたファイルがアップ
ロードされます。
2.
次に、write_info プロシージャが実行されます。
3.
このプロシージャは、フォームのフィールドの情報をデータベース内の表に書き込み、
ページをユーザーに返します。
注意 : アクション・プロシージャは、ユーザーにレスポンスを返す必要
はありませんが、次に示すように、送信が成功したか失敗したかをユー
ザーに知らせるようにすることをお薦めします。
procedure write_info (
who
in varchar2,
description in varchar2,
file
in varchar2) as
begin
insert into myTable values (who, description, file);
htp.htmlopen;
htp.headopen;
htp.title('File Uploaded');
htp.headclose;
htp.bodyopen;
htp.header(1, 'Upload Status');
htp.print('Uploaded ' || file || ' successfully');
htp.bodyclose;
htp.htmlclose;
end;
名前の競合の可能性を低減するために、ブラウザから取得したファイル名の先頭に、生成さ
れたディレクトリ名が付加されます。フォームで指定されたアクション・プロシージャによ
り、この名前が変更されます。このため、たとえば /private/minutes.txt がアップ
ロードされた場合、mod_plsql によって表に格納された名前は、
F9080/private/minutes.txt となります。アプリケーションは、コールしたストアド・
プロシージャの中で、この名前を変更できます。たとえば、アプリケーションにより、名前
を scott/minutes.txt に変更できます。
mod_plsql の概要
1-19
ファイルのアップロードとダウンロード
アップロード・ファイルの属性(MIME
タイプ)の指定
アップロード・ファイルの属性(
ストアド・プロシージャは、アップロード・ファイルの名前を変更する以外にも、他のファ
イル属性を変更できます。たとえば、1-18 ページの「ファイルのアップロード」に示した例
のフォームでは、アップロードするドキュメントの Multipurpose Internet Mail Extension
(MIME)タイプをユーザーが入力するフィールドとして表示できます。
MIME タイプは、write_info のパラメータとして受信できます。その場合、ドキュメント
表には、ファイルのアップロード時に mod_plsql がマルチパート・フォームから解析したデ
フォルトの MIME タイプではなく、そのドキュメントの MIME タイプが格納されます。
複数のファイルのアップロード
1 回の送信で複数のファイルを送信する場合は、アップロード・フォームに複数の <INPUT
type="file" name="file"> エレメントが含まれている必要があります。複数の INPUT エレメ
ントで、name に同じ名前を定義する場合、アクション・プロシージャでパラメータ名を
owa.vc_arr 型として宣言する必要があります。ファイルの INPUT エレメントに一意の名前
を定義することも可能で、その場合、アクション・プロシージャでそれぞれを varchar2 と
して宣言する必要があります。たとえば、フォームに次のエレメントが含まれているとしま
す。
<INPUT type="file" name="textfiles">
<INPUT type="file" name="textfiles">
<INPUT type="file" name="binaryfile">
この場合、アクション・プロシージャに次のパラメータを含める必要があります。
procedure handle_text_and_binary_files(textfiles IN owa.vc_arr, binaryfile IN
varchar2).
1-20 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
ファイルのアップロードとダウンロード
ファイルのダウンロード
ファイルをデータベースに送信した後、それらのファイルのダウンロード、データベースか
らの削除、および属性の読取りと書込みが可能になります。
ファイルをダウンロードするには、ダウンロードを開始するために
wpg_docload.download_file(file_name) をコールする、パラメータを持たないストア
ド・プロシージャを作成します。
ユーザーに表示される HTML ページには、ドキュメント・アクセス・パスを含み、ダウン
ロードするファイルを指定する URL へのリンクが示されます。
たとえば、DAD のドキュメント・アクセス・パスに docs、ドキュメント・アクセス・プロ
シージャに mydad.process_download が指定されている場合、ユーザーが次の URL をク
リックすると、mydad.process_download プロシージャがコールされます。
http://www.acme.com:9000/pls/mydad/docs/myfile.htm
次に、process_download の実装例を示します。
procedure process_download is
v_filename varchar2(255);
begin
-- getfilepath() uses the SCRIPT_NAME and PATH_INFO cgi
-- environment variables to construct the full pathname of
-- the file URL, and then returns the part of the pathname
-- following '/docs/'
v_filename := getfilepath;
select name into v_filename from plsql_gateway_doc
where UPPER(name) = UPPER(v_filename);
-- now we call docload.download_file to initiate
-- the download.
wpg_docload.download_file(v_filename);
exception
when others then
v_filename := null;
end process_download;
mod_plsql で実行中のプロシージャから wpg_docload.download_file(filename) を
コールすると、filename ファイルのダウンロードが開始されます。ファイルのダウンロー
ド中は、このプロシージャによって生成される(HTP インタフェースを介して生成される)
他の HTML は、ブラウザに返されません。
mod_plsql は、ドキュメント表からそのファイル名を探します。ドキュメント表内には、
NAME 列がファイル名に一致する一意の行が存在する必要があります。mod_plsql は、ド
キュメント表の MIME_TYPE 列の情報に基づき、HTTP レスポンス・ヘッダーを生成しま
す。CONTENT_TYPE 列の値により、ドキュメントの内容がどの CONTENT 列から取得され
るかが決まります。ドキュメントの内容は、HTTP Response Body として送信されます。
mod_plsql の概要
1-21
ファイルのアップロードとダウンロード
BLOB のダイレクト・ダウンロード
バイナリ・ラージ・オブジェクト(BLOB)データ型として格納されているコンテンツをダ
ウンロードすることもできます。
1.
wpg_docload.download_file(blob) をコールするストアド・プロシージャを作成します。
blob は BLOB データ型です。mod_plsql には BLOB の内容に関する情報が含まれてい
ないため、情報を入力する必要があります。
2.
Content-Type およびその他のヘッダーを設定します。
例 : 次のプロシージャでは、引数の名前を使用して表から BLOB を選択し、BLOB のダ
イレクト・ダウンロードを開始します。
procedure download_blob(varchar2 name) is
myblob blob;
begin
a.
name 引数を使用して、mytable から BLOB を選択します。
select blob_data into myblob from mytable where blob_name = name;
b.
コンテンツを説明するヘッダーを設定します。
owa_util.mime_header('text/html', FALSE);
htp.p('Content-Length: ' || dbms_lob.getlength(myblob));
owa_util.http_header_close;
c.
BLOB のダイレクト・ダウンロードを開始します。
wpg_docload.download_file(myblob);
end;
mytable 表の構造は、次のとおりです。
create table mytable
(
blob_name varchar2(128),
blob_data blob
);
3.
ユーザーに表示される HTML ページには、適切な引数を使用してこのストアド・プロ
シージャをコールする URL へのリンクが示されます。
4.
BLOB のダイレクト・ダウンロード中は、このプロシージャによって生成される(HTP
インタフェースを介して生成される)他の HTML は、ブラウザに返されません。
1-22 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
パスのエイリアシング(ダイレクト・アクセス URL)
パスのエイリアシング(ダイレクト・アクセス URL)
)
パスのエイリアシングにより、mod_plsql を使用するアプリケーションは、単純な URL に
よるアプリケーション内のオブジェクトへの直接参照を提供できます。この機能は、ドキュ
メント・ダウンロード機能の提供方法を汎用化するものです。パスのエイリアシングには、
DAD の次の設定パラメータを使用します。
■
PlsqlPathAlias
■
PlsqlPathAliasProcedure
たとえば、DAD でこれらのパラメータが次のように設定されているとします。
PlsqlPathAlias
myalias
PlsqlPathAliasProcedure
scott.my_path_alias_procedure
この場合、DAD location の直後に myalias キーワードを含むすべての URL で、scott.my_
path_alias_procedure プロシージャが実行されます。このプロシージャは、URL 指定に基づ
いて適切なレスポンスを開始できます。
注意 : アプリケーション定義プロシージャ scott.my_path_alias_
procedure は、varchar2 型の p_path という引数を 1 つとるように定義する
必要があります。この引数は、PlsqlPathAlias に使用されているキーワード
に続くすべてを受け取ります。
たとえば、前述の構成で次の URL があるとします。
http://www.acme.com/pls/dad/myalias/MyFolder/MyItem
この URL により、scott.my_path_alias_procedure プロシージャは
MyFolder/MyItem 引数を受け取ります。
mod_plsql の概要
1-23
Common Gateway Interface(CGI)環境変数
Common Gateway Interface(
(CGI)環境変数
)環境変数
OWA_UTIL パッケージには、CGI 環境変数の値を取得するための API が付属しています。
CGI 環境変数の値は、mod_plsql によって実行されるプロシージャにコンテキストを提供し
ます。mod_plsql は CGI によって処理されませんが、mod_plsql から実行される PL/SQL
アプリケーションは、これらの CGI 環境変数にアクセス可能です。
CGI 環境変数のリストを次に示します。
■
HTTP_AUTHORIZATION
■
DAD_NAME
■
DOC_ACCESS_PATH
■
HTTP_ACCEPT
■
HTTP_ACCEPT_CHARSET
■
HTTP_ACCEPT_LANGUAGE
■
HTTP_COOKIE
■
HTTP_HOST
■
HTTP_PRAGMA
■
HTTP_REFERER
■
HTTP_USER_AGENT
■
PATH_ALIAS
■
PATH_INFO
■
HTTP_ORACLE_ECID
■
DOCUMENT_TABLE
■
REMOTE_ADDR
■
REMOTE_HOST
■
REMOTE_USER
■
REQUEST_CHARSET(1-26 ページの「REQUEST_CHARSET CGI 環境変数」を参照)
■
REQUEST_IANA_CHARSET(1-26 ページの「REQUEST_IANA_CHARSET CGI 環境変
数」を参照)
■
REQUEST_METHOD
■
REQUEST_PROTOCOL
■
SCRIPT_NAME
1-24 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
Common Gateway Interface(CGI)環境変数
■
SCRIPT_PREFIX
■
SERVER_NAME
■
SERVER_PORT
■
SERVER_PROTOCOL
PL/SQL アプリケーションは、owa_util.get_cgi_env インタフェースを使用して CGI 環境変
数の値を取得できます。
構文 :
owa_util.get_cgi_env(param_name in varchar2) return varchar2;
param_name は、CGI 環境変数の名前です。param_name には大 / 小文字区別があります。
CGI 環境変数の追加およびオーバーライド
PlsqlCGIEnvironmentList DAD パラメータは、1 行に 1 つのエントリがある、名前 /
値ペアのリストです。任意の環境変数をオーバーライドしたり、新規の環境変数を追加でき
ます。名前が付属の環境変数(1-24 ページの「Common Gateway Interface(CGI)環境変
数」のリストを参照)の 1 つである場合、その環境変数は指定した値にオーバーライドされ
ます。名前が付属の環境変数のリストにない場合は、パラメータで指定された名前および値
と同じ新規の環境変数がリストに追加されます。
注意 : mod_plsql の構成ファイルについては、
『Oracle HTTP Server 管理
者ガイド』を参照してください。
パラメータの値が指定されていない場合は、Oracle HTTP Server から値が取得されます。
Oracle HTTP Server の場合は、次のように指定して CGI 環境変数の DOCUMENT_ROOT を
渡すことができます。
PlsqlCGIEnvironmentList DOCUMENT_ROOT
この設定パラメータから渡された新規の環境変数は、owa_util.get_cgi_env インタフェース
を介して PL/SQL アプリケーションで使用可能です。
例 1-11
PlsqlCGIEnvironmentList SERVER_NAME=myhost.mycompany.com
PlsqlCGIEnvironmentList REMOTE_USER=testuser
この例では、CGI 環境変数の SERVER_NAME と REMOTE_USER が付属の環境変数リスト
に含まれているため、これらの環境変数が指定の値にオーバーライドされます。
mod_plsql の概要
1-25
Common Gateway Interface(CGI)環境変数
例 1-12
PlsqlCGIEnvironmentList MYENV_VAR=testing
PlsqlCGIEnvironmentList SERVER_NAME=
PlsqlCGIEnvironmentList REMOTE_USER=user2
この例では、SERVER_NAME 変数と REMOTE_USER 変数がオーバーライドされます。
SERVER_NAME 変数は、値が指定されていないため、削除されます。MYENV_VAR という
新規の環境変数は、付属の環境変数のリストに含まれていないため追加されます。この環境
変数には、testing という値が割り当てられます。
PlsqlNLSLanguage
mod_plsql では、National Language Support(NLS)変数(PlsqlNLSLanguage)を、環境変
数として設定するか、または DAD レベルで設定できます。データベースと Oracle HTTP
Server の PlsqlNLSLanguage パラメータが一致するか、または文字幅が固定でサイズが同じ
であることが必要です。
DAD レベルで PlsqlNLSLanguage が設定されていない場合は、環境からの NLS 設定が使用
されます。NLS 設定が存在しない場合、Oracle の NLS_LANG 設定にはデフォルト・ルール
が適用されます。
REQUEST_CHARSET CGI 環境変数
mod_plsql に対するリクエストは、すべて DAD に関連付けられます。CGI 環境変数
REQUEST_CHARSET は、次のように設定されます。
■
REQUEST_CHARSET は、PlsqlNLSLanguage 環境変数から導出された使用中のデフォ
ルト・キャラクタ・セットに設定されます。ただし、DAD レベルで
PlsqlNLSLanguage パラメータが設定されている場合は、キャラクタ・セット情報を導
出します。
PL/SQL アプリケーションは、フォームのファンクション・コールによってこの情報にアク
セスできます。
owa_util.get_cgi_env('REQUEST_CHARSET');
REQUEST_IANA_CHARSET CGI 環境変数
これは、CGI 環境変数 REQUEST_CHARSET に相当する IANA(Internet Assigned Number
Authority)の環境変数です。IANA は、インターネット上のキャラクタ・セットの標準を
グローバルに調整する機関です。
1-26 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
mod_plsql での制限事項
mod_plsql での制限事項
mod_plsql には、次の制限があります。
■
■
■
■
HTTP Cookie ヘッダーの最大長は 32000 バイトです。このバイト数を超えるとエラーが
発生します。この制限は、PL/SQL の varchar2 型の制限によるものです。
HTTP Cookie 内にある各 Cookie の最大長は 3990 バイトです。このバイト数を超えると
エラーが発生します。この制限は、配列内の文字列の OCI 配列バインド制限によるもの
です。
mod_plsql では、一度に設定できる Cookie の最大数は制限されており変更できません。
この制限は、最大数 20 に設定されています。20 を超えると、それ以降の Cookie は削
除されます。
PL/SQL Gateway は、OUT パラメータを含むプロシージャを Web インタフェースから
コールすることをサポートしていません。この方法でコールすると ORA-6502 エラーが
発生します。OUT 変数を含むプロシージャはコールしないことをお薦めします。ただ
し、現行のアーキテクチャでは、変更後の値が受渡し時の長さを超えないかぎり値を変
更できます。この問題が発生する既存のアプリケーションは、次のいずれかの方法で変
更する必要があります。
■
■
■
■
■
■
OUT パラメータを含むプロシージャがブラウザ URL 経由で直接実行されないよう
に、この種のプロシージャのラッパーを実装します。
渡されるパラメータの値が割り当てられるローカル変数を作成し、それを内部的な
すべての変更に使用します。
PL/SQL プロシージャに渡すことのできる名前 / 値ペアの合計数は 2000 です。
mod_plsql では、1 つのプロシージャに渡すことのできるパラメータの合計数が 2000 に
制限されます。
mod_plsql では、1 つのプロシージャに渡すことのできる 1 つのパラメータのサイズが
32000 バイトに制限されます。
同じ DAD location を異なる仮想ホストで使用することはできません。
mod_plsql の概要
1-27
mod_plsql での制限事項
1-28 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
2
mod_plsql の設定
この章では、mod_plsql のセットアップおよび使用方法について説明します。この章の内容
は、次のとおりです。
■
要件の確認
■
必須パッケージのインストール
■
PL/SQL アプリケーション用の DAD の作成
mod_plsql の設定
2-1
要件の確認
要件の確認
mod_plsql を実行するには、次の要件を満たしている必要があります。
■
■
■
mod_plsql で必要な PL/SQL Web Toolkit パッケージをロードするデータベースの SYS
ユーザー・パスワードが必要です。
mod_plsql を接続するデータベースが稼動している必要があります。
Oracle HTTP Server の mod_plsql は、OWA パッケージのリリース 9.0.4.0.1 とともに出
荷されます。データベースにはリリース 9.0.4.0.1 以上の OWA パッケージをインストー
ルすることをお薦めします。
必須パッケージのインストール
インストールした Oracle HTTP Server mod_plsql を、それを含まないデータベースで使用す
る場合は、owaload.sql スクリプトを使用して必要なパッケージを手動で追加インストー
ルする必要があります。
注意 : Export Utility を使用して全データベースのエクスポートを実行し
た場合でも、OWALOAD.SQL スクリプトを SYS で実行して、新規のター
ゲット・インスタンスに mod_plsql を再インストールする必要がありま
す。インポート / エクスポート・メカニズムでは、SYS 内のオブジェクト
はインポートされないため、PL/SQL ツールキットを SYS にインストール
する必要があります。
1.
owaload.sql ファイルが入っているディレクトリにナビゲートします。このディレク
トリは、ORACLE_HOME/Apache/modpsql/owa です。
2.
SQL*Plus を使用して、SYS ユーザーで Oracle データベースにログインします。
3.
次の問合せを実行して、現在インストールされている OWA パッケージのリリースを確
認します。
select owa_util.get_version from dual;
■
■
問合せに成功し、9.0.4.0.1 より前のリリースが表示される場合は、新リリースの
OWA パッケージをインストールすることをお薦めします。
問合せに失敗した場合は、OWA パッケージがインストールされていないか、かな
り古いリリースの OWA パッケージが実行されています。新しい OWA パッケージ
をインストールするか、新リリースにアップグレードすることをお薦めします。
2-2 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
必須パッケージのインストール
注意 : 古い OWA パッケージの検出方法については、付録 A「よくある
質問」の「データベースに重複してインストールされている OWA パッ
ケージを検出してクリーン・アップするには、どうすればよいですか ?」
を参照してください。
4.
SQL プロンプトで、次のコマンドを実行します。
@owaload.sql log_file
表 2-1 必須パッケージのインストール時のパラメータ
エレメント
説明
owaload.sql
PL/SQL Web Toolkit パッケージを SYS スキーマにインストール
します。また、データベースの全ユーザーがアクセスできるよう、
パブリック・シノニムを作成してパッケージをパブリックにしま
す。このため、1 つのデータベースにつきインストールは 1 回のみ
である必要があります。
log_file
インストール・ログ・ファイルです。ログ・ファイルを作成する
ための書込み許可があることを確認してください。
5.
ログ・ファイルをスキャンして、エラーがないことを確認します。
注意 : owaload スクリプトは、データベース内にある OWA パッケージ
の既存のリリースをチェックし、次の場合にのみ新しいリリースをインス
トールします。
■
■
OWA パッケージが存在しない場合。
古いバージョンの OWA パッケージが検出された場合。データベース
に最新の OWA パッケージが存在するか、または新しいバージョンが
インストールされている場合は、owaload スクリプトは何も処理を
実行せず、その状況をログ・ファイルにレポートします。
mod_plsql の設定
2-3
必須パッケージのインストール
6.
手動で再コンパイルします。
注意 : OWA パッケージをインストールすると、依存オブジェクトはすべ
て無効になります。このパッケージは最初のアクセス時に自動的に再コン
パイルされますが、再インストール後に手動で再コンパイルすることをお
薦めします。
インストール後に、Select owa_util.get_version from dual; を実行して、
OWA パッケージのリリースをチェックします。表示されたリリースが 9.0.4.0.1 以上で
あることを確認してください。
7.
8.
次へのパブリック・アクセスが付与されていることに注意してください。
■
OWA_CUSTOM
■
OWA
■
HTF
■
HTP
■
OWA_COOKIE
■
OWA_IMAGE
■
OWA_OPT_LOCK
■
OWA_PATTERN
■
OWA_SEC
■
OWA_TEXT
■
OWA_UTIL
■
OWA_CACHE
■
WPG_DOCLOAD
次のパブリック・シノニムが作成されていることにも注意してください。
■
OWA_CUSTOM 用の OWA_CUSTOM
■
OWA_CUSTOM 用の OWA_GLOBAL
■
OWA 用の OWA
■
HTF 用の HTF
■
HTP 用の HTP
■
OWA_COOKIE 用の OWA_COOKIE
2-4 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
PL/SQL アプリケーション用の DAD の作成
■
OWA_IMAGE 用の OWA_IMAGE
■
OWA_OPT_LOCK 用の OWA_OPT_LOCK
■
OWA_PATTERN 用の OWA_PATTERN
■
OWA_SEC 用の OWA_SEC
■
OWA_TEXT 用の OWA_TEXT
■
OWA_UTIL 用の OWA_UTIL
■
OWA_CUSTOM 用の OWA_INIT
■
OWA_CACHE 用の OWA_CACHE
■
WPG_DOCLOAD 用の WPG_DOCLOAD
PL/SQL アプリケーション用の DAD の作成
Web 対応の PL/SQL アプリケーションにアクセスするには、最初に mod_plsql 用の
PL/SQL データベース・アクセス記述子(DAD)を設定する必要があります。DAD は、
mod_plsql が HTTP リクエストを処理するためにデータベース・サーバーにアクセスする方
法を指定する一連の値です。DAD には、接続詳細のみでなく、各種データベース操作と
mod_plsql 全般の重要な設定パラメータが含まれています。詳細は、『Oracle HTTP Server 管
理者ガイド』の mod_plsql の項を参照してください。
mod_plsql の設定
2-5
PL/SQL アプリケーション用の DAD の作成
2-6 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
3
mod_plsql を使用したアプリケーション・
データベース・アクセスの保護
この章では、既知のセキュリティ上の問題を回避するためにデータベースと PL/SQL をセッ
トアップする方法について説明します。この章の内容は、次のとおりです。
■
mod_plsql を使用したユーザー認証
■
ユーザーの認証解除
■
PUBLIC に付与されている PL/SQL プロシージャの保護
関連項目 : mod_plsql 設定パラメータの詳細は、
『Oracle HTTP Server 管
理者ガイド』を参照してください。
mod_plsql を使用したアプリケーション・データベース・アクセスの保護
3-1
mod_plsql を使用したユーザー認証
mod_plsql を使用したユーザー認証
mod_plsql は、Oracle HTTP Server から提供される認証レベルに加えて、様々な認証レベル
を提供します。Oracle HTTP Server はドキュメントや仮想パスなどを保護しますが、
mod_plsql はデータベースにログインしたり PL/SQL Web アプリケーションを実行する
ユーザーを保護します。
表 3-1 に示すように、様々な認証モードを有効化できます。
表 3-1 mod_plsql で使用する認証モード
認証モード
アプローチ
Basic
HTTP の Basic 認証を使用して認証が実行されます。ほとんどの
アプリケーションでは、Basic 認証が使用されます。
グローバル OWA
認証は、PL/SQL Web Toolkit パッケージを含むスキーマの
owa_custom.authorize プロシージャを使用して実行されます。
カスタム OWA
認証は、ユーザーのスキーマ(owa_customize.authorize)にある
パッケージとプロシージャを使用して実行されます。それが見つ
からない場合は、PL/SQL Web Toolkit パッケージを含むスキー
マのパッケージとプロシージャが使用されます。
パッケージ別
認証は、ユーザーのスキーマ(packageName.authorize)にある
パッケージとプロシージャを使用して実行されます。
シングル・サインオン
認証は、Oracle Application Server Single Sign-On を使用して実
行されます。このモードを使用するのは、アプリケーションが
OracleAS Single Sign-On で動作する場合のみです。
Basic(データベース制御認証)
(データベース制御認証)
モジュール mod_plsql は、データベース・レベルでの認証をサポートしています。HTTP
Basic 認証が使用されますが、この方式を使用してデータベースへのログオンを試行するこ
とで資格証明が認証されます。認証は、次のどちらかのユーザー名とパスワードを使用し
て、ユーザーのデータベース・アカウントと比較検証されます。
■
■
DAD に格納されているユーザー名とパスワード。エンド・ユーザーがログインする必
要はありません。この方法は、公開の情報を提供する Web ページに便利です。
ユーザーがブラウザの HTTP Basic 認証ダイアログ・ボックスを使用して入力するユー
ザー名とパスワード。ユーザーは、このダイアログ・ボックスにユーザー名とパスワー
ドを入力する必要があります。
3-2 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
mod_plsql を使用したユーザー認証
Oracle HTTP Server mod_plsql の Basic 認証モード
Oracle HTTP Server には、Basic 認証モード用に異なるメカニズムがあります。ユーザー名
とパスワードは DAD に格納する必要があります。Oracle HTTP Server で使用される HTTP
Basic 認証では、証明書はファイル・システム上のパスワード・ファイルに格納されます。
認証は、そのファイルに指定されているユーザーと比較検証されます。
Basic 認証モード
mod_plsql は Basic 認証をサポートしています。Oracle HTTP Server では、ユーザーの証明
書がファイル・システム上のパスワード・ファイルと比較認証されます。この機能は、
mod_auth というモジュールで提供されます。
グローバル OWA、カスタム
、カスタム OWA およびパッケージ別(カスタム認証)
カスタム認証を使用すると、データベース・レベルではなくアプリケーション自体でユー
ザーを認証できます。認証は、ユーザー記述の認証ファンクションをコールすることで実行
されます。
カスタム認証は OWA_CUSTOM を使用して実行され、動的なユーザー名 / パスワード認証
とは併用できません。カスタム認証では、DAD 構成ファイルに静的なユーザー名 / パス
ワードが格納されている必要があります。mod_plsql では、この DAD のユーザー名 / パス
ワードがデータベースへのログインに使用されます。mod_plsql のログイン後は、アプリ
ケーション・レベルの PL/SQL フックがコールされ、認証制御が元のアプリケーションに渡
されます。このコールバック関数は、アプリケーション開発者により実装されます。コール
バック関数から戻される値により、認証の成否が判別されます。値 TRUE は成功、FALSE は
失敗を意味します。
必要なカスタム認証の種類に応じて、認証ファンクションを様々な場所に配置できます。
■
■
■
グローバル OWA の場合は、すべてのユーザーおよびプロシージャに対して同じ認証
ファンクションをコールできます。
カスタム OWA の場合は、各ユーザーおよびすべてのプロシージャに対して異なる認証
ファンクションをコールできます。
パッケージ別認証を使用すると、特定のパッケージのプロシージャまたは匿名プロシー
ジャについてのみ、すべてのユーザーに対して認証ファンクションを実行できます。
たとえば、カスタム OWA を使用すると、認証ファンクションでユーザーがパスワード
welcome を持つユーザー guest としてログインしたことを確認したり、ユーザーの IP アド
レスをチェックしてアクセス権を判別できます。
mod_plsql を使用したアプリケーション・データベース・アクセスの保護
3-3
ユーザーの認証解除
表 3-2 にパラメータ値を示します。
表 3-2 カスタム認証モードとコールバック関数
モード
アクセス制御の有効範囲
コールバック関数
グローバル OWA
すべてのパッケージ
OWA パッケージ・スキーマ内の
owa_custom.authorize。
カスタム OWA
すべてのパッケージ
ユーザーのスキーマ内、または見つからない
場合は OWA パッケージ・スキーマ内の
owa_custom.authorize。
パッケージ別
指定したパッケージ
ユーザーのスキーマ内の
packageName.authorize。または
anonymous.authorize がコールされます。
ユーザーの認証解除
動的認証(DAD にユーザー名とパスワードなし)を使用する DAD の場合、mod_plsql で
は PL/SQL プロシージャを介してユーザーをプログラム的にログオフ(HTTP 認証情報を消
去)させることができ、すべてのブラウザ・インスタンスを終了する必要はありません。こ
の機能は、Netscape 3.0 以上および Microsoft Internet Explorer でサポートされます。他の
ブラウザの場合、ユーザーが認証を解除するにはブラウザの終了操作が必要になることがあ
ります。
ログアウトをシミュレートしてユーザーをサインオフ・ページにリダイレクトする独自のロ
グアウト・プロシージャを作成すると、認証解除をプログラム的に実行できます。
MyLogOffProc プロシージャを次のように作成または置換します。
BEGIN
-- Open the HTTP header
owa_util.mime_header('text/html', FALSE, NULL);
-- Send a cookie to logout
owa_cookie.send('WDB_GATEWAY_LOGOUT', 'YES', path=>'/');
-- Close the HTTP header
owa_util.http_header_close;
-- Generate the page
htp.p('You have been logged off from the WEBSITE');
htp.anchor( 'http://www.abc.com', 'click here');
htp.p('<BR>bye');
END;
3-4 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
PUBLIC に付与されている PL/SQL プロシージャの保護
もう 1 つの認証解除方法は、URL で DAD の後に /logmeoff を追加することです。たとえ
ば、次のようになります。
http://www.abc.com:2000/pls/myDAD/logmeoff
PUBLIC に付与されている PL/SQL プロシージャの保護
PUBLIC に付与されている各データベース・パッケージは、次の URL を使用して直接実行
できます。
http://hostname:port/pls/dad/schema.package.procedure
データベース内で PUBLIC に付与されている PL/SQL プロシージャの実行は、様々な認証
レベルで保護する必要があります。これらのプロシージャ(dbms_% パッケージ、utl_%
パッケージおよび SYS スキーマのすべてのパッケージ内)は、Web ブラウザから実行され
るとセキュリティ上の脆弱さを露呈します。この種のパッケージは、PL/SQL アプリケー
ション開発者のみを対象としています。
mod_plsql での PlsqlExclusionList ディレクティブの使用
この種の PL/SQL パッケージやアプリケーション固有の他のパッケージの実行を保護するた
めに、mod_plsql には PlsqlExclusionList という DAD パラメータ・ディレクティブが用意さ
れています。PlsqlExclusionList ディレクティブでは、ブラウザから直接実行することが禁止
されているプロシージャ、パッケージおよびスキーマ名のパターンを指定します。これは複
数行のディレクティブであり、各パターンを 1 行で指定します。パターンには大 / 小文字区
別がなく、*、? および [a-z] などの単純なワイルドカードを使用できます。ダイレクト
URL からアクセスできないデフォルトのパターンは、sys.*、dbms_*、utl_* および
owa_util.* です。
注意 : PlsqlExclusionList ディレクティブを #NONE# に設定すると、すべ
ての保護が無効化されます。アクティブな Web サイトの場合は、
#NONE# に設定しないことをお薦めします。この設定は、デバッグ時にの
み使用してください。
PlsqlExclusionList ディレクティブがオーバーライドされても、デフォルト設定は適用されま
せん。この場合は、除外するパターンのリストにデフォルトのリストを追加する必要があり
ます。
mod_plsql を使用したアプリケーション・データベース・アクセスの保護
3-5
PUBLIC に付与されている PL/SQL プロシージャの保護
PlsqlExclusionList ディレクティブへのアクセス
mod_plsql の構成ファイル dads.conf 内で PlsqlExclusionList ディレクティブを設定できま
す。この構成ファイルは、次のディレクトリにあります。
■
(UNIX の場合)ORACLE_HOME/Apache/modplsql/conf/
■
(Windows の場合)ORACLE_HOME¥Apache¥modplsql¥conf
ORACLE_HOME は、Oracle HTTP Server のインストール場所です。
PUBLIC に付与される PL/SQL プロシージャのセキュリティを確実に最適にするには、例
3-1 のように、dads.conf ファイル内で PlsqlExclusionList ディレクティブを使用してシステ
ム・デフォルト設定を指定します。
例 3-1 PlsqlExclusionList ディレクティブを使用して指定するシステム・デフォルト設定
PlsqlExclusionList
PlsqlExclusionList
PlsqlExclusionList
PlsqlExclusionList
PlsqlExclusionList
PlsqlExclusionList
PlsqlExclusionList
PlsqlExclusionList
sys.*
dbms_*
utl_*
owa_util.*
owa.*
htp.*
htf.*
myschema.mypackage*
mod_plsql では、このディレクティブで指定するパターンの他に、タブ、改行、一重引用符
(')またはバックスラッシュ(\)などの特殊文字を含む URL も無効化されます。これは変
更できません。
3-6 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
4
PL/SQL パフォーマンスの最適化
この章では、Oracle HTTP Server における PL/SQL のパフォーマンスを改善するテクニッ
クについて説明します。
この章の内容は、次のとおりです。
■
Oracle HTTP Server での PL/SQL のパフォーマンス : 概要
■
Oracle HTTP Server でのプロセスベース操作とスレッドベース操作
■
mod_plsql のパフォーマンス・チューニングの問題
■
mod_plsql のパフォーマンス・チューニング領域
■
PL/SQL ベースの Web アプリケーションでのキャッシュの使用
■
■
ファイル・システム・キャッシュのチューニングによるキャッシュ・パフォーマンスの
改善
Oracle HTTP Server のディレクティブ
PL/SQL パフォーマンスの最適化
4-1
Oracle HTTP Server での PL/SQL のパフォーマンス : 概要
Oracle HTTP Server での PL/SQL のパフォーマンス : 概要
この章では、Oracle HTTP Server における PL/SQL ベースの Web アプリケーションのパ
フォーマンスを改善する、いくつかのテクニックについて説明します。
表 4-1 に、データベース・アクセス記述子(DAD)パラメータと推奨設定を示します。デ
フォルトでは、これらの DAD パラメータは dads.conf ファイルに指定されます。UNIX シ
ステムでは、このファイルは ORACLE_HOME/Apache/modplsql/conf ディレクトリにあ
ります。Windows システムでは、このファイルはデフォルトで
ORACLE_HOME¥Apache¥Apache¥modplsql¥conf ディレクトリにあります。DAD パラ
メータの詳細は、このディレクトリにある dads.README ファイルを参照してください。
表 4-1 データベース・アクセス記述子(DAD)パラメータと推奨設定のサマリー
)パラメータと推奨設定のサマリー
データベース・アクセス記述子(
パラメータ
推奨設定
PlsqlAlwaysDescribeProcedure
off に設定すると、最大パフォーマンスが得られます。
デフォルト値 : off
PlsqlDatabaseConnectString
新しい DAD では、ServiceNameFormat を使用します。
SIDFormat は下位互換性が必要な場合にのみ使用してください。
注意 : データベースの HA 構成の場合は、LDAP 参照を介して接続文
字列パラメータを解決することをお薦めします。
PlsqlFetchBufferSize
日本語や中国語など、マルチバイト・キャラクタ・セットの場合は、
256 に設定するとパフォーマンスが改善されます。
デフォルト値 : 128
PlsqlIdleSessionCleanupInterval
このパラメータ値を大きくすると、プール内のデータベース接続が指
定の期間だけ引き続き使用可能になります。
デフォルト値 : 15(分)
関連項目 : 4-8 ページ「mod_plsql 接続プールの再起動」
PlsqlLogEnable
オラクル社カスタマ・サポート・センターからデバッグ目的で推奨さ
れないかぎり、このパラメータは Off に設定する必要があります。
デフォルト値 : off
4-2 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
Oracle HTTP Server での PL/SQL のパフォーマンス : 概要
表 4-1 データベース・アクセス記述子(DAD)パラメータと推奨設定のサマリー
)パラメータと推奨設定のサマリー(続き)
データベース・アクセス記述子(
)パラメータと推奨設定のサマリー(続き)
パラメータ
推奨設定
PlsqlMaxRequestsPerSession
PL/SQL ベースの Web アプリケーションにリソース・リークまたは
メモリー・リークがない場合は、このパラメータを大きい値(5000
など)に設定できます。
デフォルト値 : 1000
関連項目 : 4-7 ページの「プール内のデータベース・セッションのク
ローズ」および 4-10 ページの「接続プーリングのヒントと Oracle
HTTP Server 構成」
PlsqlNLSLanguage
このパラメータをデータベースのグローバリゼーション・サポート・
パラメータと一致するように設定すると、Oracle Net Services での
キャラクタ・セット変換のオーバーヘッドがなくなります。
PlsqlSessionStateManagement
データベースのリリースが 8.1.7.2 以上の場合は、このパラメータを
StatelessWithFastResetPackageState に設定します。
表 4-2 に、mod_plsql のキャッシュ・オプションとそれぞれの参照先情報を示します。
表 4-2 キャッシュ・オプション
オプション
説明
Expires テクニック
最大パフォーマンス : 内容の変更が予測可能な場合。
関連項目 : 4-21 ページ「Expires テクニックの使用」
検証テクニック
適正パフォーマンス : 内容の変更が予測できない場合。
関連項目 : 4-17 ページ「検証テクニックの使用」
システムレベル・
キャッシュ
システム上のすべてについて 1 つのコピーをキャッシュすること
によるパフォーマンス改善。
関連項目 : 4-24 ページ「PL/SQL ベースの Web アプリケーション
でのシステムレベルおよびユーザーレベル・キャッシュ」
関連項目 : 表 4-1 に示した DAD パラメータの詳細は、
『Oracle HTTP
Server 管理者ガイド』の第 6 章「Oracle HTTP Server モジュール」を参照
してください。
PL/SQL パフォーマンスの最適化
4-3
Oracle HTTP Server でのプロセスベース操作とスレッドベース操作
Oracle HTTP Server でのプロセスベース操作とスレッドベース
操作
この章では、Oracle HTTP Server がプロセスベースおよびスレッドベースの場合にプラット
フォームで起こる PL/SQL パフォーマンスの問題について説明します。UNIX ベースプラッ
トフォーム上で稼働している場合など、プロセスベースの Oracle HTTP Server では、サー
ブレット、PL/SQL、静的ファイルなど、あらゆるタイプの HTTP リクエストが各プロセス
で処理されます。Windows ベースのプラットフォームなど、スレッドベースの Oracle HTTP
Server の場合、Oracle HTTP Server プロセスは 1 つしかなく、そこに複数のスレッドが含ま
れており、個々のスレッドを使用してあらゆるタイプの HTTP リクエストを処理できます。
注意 : この章では、PL/SQL ベースの Web アプリケーションに該当する
パフォーマンス最適化について言及していますが、プラットフォームの違
い、つまりプロセスベースであるかスレッドベースであるかが重要な場合
があります。
mod_plsql のパフォーマンス・チューニングの問題
mod_plsql をチューニングして PL/SQL ベースの Web アプリケーションのパフォーマンス
を改善する場合は、mod_plsql の一部の内部機能を十分に理解しておくことが重要です。こ
の項では、一部の mod_plsql 機能の基本について概説します。
この項の内容は、次のとおりです。
■
mod_plsql を使用した接続プーリング
■
プール内のデータベース・セッションのクローズ
■
mod_plsql 接続プールの再起動
4-4 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
mod_plsql のパフォーマンス・チューニングの問題
mod_plsql を使用した接続プーリング
mod_plsql で提供されるデータベース・サーバー接続プーリングの論理は、具体例を使用す
ると理解しやすくなります。
たとえば、次の典型的な使用例を考えてみます。
1.
Oracle HTTP Server リスナーが起動されます。mod_plsql でメンテナンスされている接
続プールには、データベース接続はありません。
2.
ブラウザがデータベース・アクセス記述子(DAD)D1 について mod_plsql リクエスト
(R1)を発行します。
3.
Oracle HTTP Server プロセスの 1 つ(httpd プロセス P1)がリクエスト R1 の処理を開
始します。
4.
プロセス P1 の mod_plsql が接続プールをチェックし、そのユーザー・リクエスト用の
データベース接続がプール内にないことを検出します。
5.
DAD D1 の情報に基づいて、プロセス P1 の mod_plsql が新規データベース接続をオー
プンして PL/SQL リクエストを処理し、データベース接続をプールに追加します。
6.
この時点で、DAD D1 に関してプロセス P1 に送られる以降のリクエストすべてが、
mod_plsql によりプールされたデータベース接続を使用できるようになります。
7.
DAD D1 に対するリクエストを別のプロセス(プロセス P2)が受け取ると、プロセス
P2 の mod_plsql が専用データベース接続をオープンしてリクエストを処理し、その
データベース接続をプールに追加します。
8.
この時点で、DAD D1 に関してプロセス P2 に送られる以降のリクエストすべてが、
mod_plsql によりプールされたデータベース接続を使用できるようになります。
9.
ここで、DAD D2 に対するリクエスト R2 が発行され、このリクエストがプロセス P1 に
送られるとします。
10. プロセス P1 の mod_plsql では DAD D2 用のデータベース接続がプールされておらず、
DAD D2 用の新規データベース・セッションが作成されてリクエストの処理後にプール
されます。これで、プロセス P1 では 2 つのデータベース接続がプールされていること
になります。一方は DAD D1 用、他方は DAD D2 用です。
手順 1 ~ 10 に示した例の要点は次のとおりです。
a.
各 Oracle HTTP Server プロセスは、静的ファイル・リクエスト、サーブレット・
リクエストおよび mod_plsql リクエストなど、あらゆるタイプのリクエストを処理
します。どの Oracle HTTP Server プロセスが次のリクエストを処理するかは制御さ
れません。
b.
各 Oracle HTTP Server プロセスは、他のプロセスにより作成された接続プールを
使用または共有できません。
PL/SQL パフォーマンスの最適化
4-5
mod_plsql のパフォーマンス・チューニングの問題
注意 : Windows システムでは、Oracle HTTP Server は単一のプロセスで
す。そのため、接続プールは共有され、スレッドにまたがって使用できま
す。
c.
各 Oracle HTTP Server プロセスでは、データベース接続が DAD ごとに 1 つのみ
プールされます。
d.
ユーザー・セッションは、1 つの DAD についてプールされたデータベース接続内
で切り替えられます。Oracle Application Server Single Sign-On(SSO)に基づく
DAD の場合、ユーザー・セッションの切替えにはプロキシ認証が使用されます。非
SSO ユーザーの場合、DAD にないユーザー名とパスワードとともに HTTP Basic 認
証を使用すると、ユーザーは同じ接続で再認証されます。
e.
複数の DAD で同じデータベース・インスタンスを指すことはできますが、同じプ
ロセス内でもデータベース接続は DAD 間で共有されません。
f.
使用されない DAD があると、データベース接続はオープンされません。
最悪の場合、mod_plsql によりプールされるデータベース接続の合計数は、アクティブな
DAD の合計数を単一の Oracle HTTP Server インスタンスに対して指定の時点で実行されて
いる Oracle HTTP Server(httpd)プロセスの数で乗算した値の係数となります。Oracle
HTTP Server プロセス数を大きい値に構成している場合は、対応する数のデータベース・
セッションを処理するようにバックエンド・データベースを構成する必要があります。ま
た、この構成値は、バックエンド・データベースを使用する Oracle HTTP Server インスタ
ンス数の数倍に設定する必要があることに注意してください。
たとえば、3 つの Oracle HTTP Server インスタンスがそれぞれ最大 50httpd のプロセスと
2 つのアクティブ DAD を起動するように構成されている場合は、300(3*50*2)のセッ
ションが許可されるようにデータベースを設定する必要があります。この数には、他の Web
アプリケーションによる接続の許可に必要なセッションは含まれません。
UNIX システムでは、httpd プロセス間でデータベース接続を共有できず、プロセスベース
のプラットフォームでは Connection Reuse の方が Connection Pooling よりも高機能です。これ
は Oracle HTTP Server のプロセスモデルによるものであることに注意してください。
注意 : データベース・セッション数が問題である場合、対処方法につい
ては 4-13 ページの「2 リスナー方式」を参照してください。
Windows システムでは、Oracle HTTP Server は単一プロセスとして実行
され、接続プールが共有されます。そのため、Windows システムには 4-13
ページの「2 リスナー方式」は該当しません。
4-6 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
mod_plsql のパフォーマンス・チューニングの問題
プール内のデータベース・セッションのクローズ
プール内のデータベース・セッションは、次の場合にクローズされます。
1.
プール内の接続が使用され、構成された数のリクエストが処理された場合。
デフォルトでは、mod_plsql によりプールされた各接続を使用して最大 1000 のリクエ
ストが処理された後、データベース接続はシャットダウンされ、再確立されます。これ
は、PL/SQL ベースの Web アプリケーションのリソース・リークまたは Oracle クライ
アントのサーバー側のリソース・リークがシステムに影響を与えないようにするために
実行されます。デフォルト値の 1000 を変更するには、DAD 構成パラメータ
PlsqlMaxRequestsPerSession をチューニングします。
2.
プール内の接続が長時間アイドル状態になっていた場合。
デフォルトでは、アイドル時間の 15 分を過ぎると、プール内の各接続は自動的にク
リーン・アップされます。この操作は、mod_plsql のクリーン・アップ・スレッドによ
り実行されます。負荷が大きいサイトの場合、各接続の使用は少なくとも 15 分に 1 回に
なり、接続のクリーン・アップは長時間実行されない場合があります。このような場合、
接続は PlsqlMaxRequestsPerSession の構成値に基づいてクリーン・アップされま
す。mod_plsql 構成パラメータ PlsqlIdleSessionCleanupInterval をチューニン
グして、デフォルト値の 15 分を変更します。サイトの負荷が大きくない場合は、パ
フォーマンスを改善するためにデフォルト値を大きくすることを考慮してください。
3.
UNIX システムで Oracle HTTP Server プロセスが停止する場合。
UNIX システムでは、Oracle HTTP Server プロセスの停止時期が Oracle HTTP Server
構成パラメータ MaxRequestsPerChild で制御されます。たとえば、このパラメータ
を 5000 に設定すると、各 Oracle HTTP Server プロセスは正確に 5000 のリクエストを
処理してから停止します。また、Oracle HTTP Server プロセスは、構成パラメータ
MinSpareServers、MaxSpareServers および MaxClients に基づく Oracle HTTP
Server メンテナンスの一部として起動および停止できます。mod_plsql の接続プーリン
グを有効にするには、各 Oracle HTTP Server プロセスがある期間だけアクティブ状態
を保つように Oracle HTTP Server を構成する必要があります。Oracle HTTP Server を正
しく構成しないと、Oracle HTTP Server プロセスがの起動に負荷がかかり停止するよう
に設定される場合があります。このような構成では、新規の各 Oracle HTTP Server プロ
セスが接続プールを補充しなければ、以降のリクエストはプーリングを利用できなくな
ります。
関連項目 : 『Oracle HTTP Server 管理者ガイド』の第 6 章「Oracle HTTP
Server モジュール」を参照してください。
PL/SQL パフォーマンスの最適化
4-7
mod_plsql のパフォーマンス・チューニング領域
mod_plsql 接続プールの再起動
この再起動は、主にデータベースの停止時間に依存します。停止から 15 分以上経過してデー
タベースを再起動する場合は、ユーザーが Oracle HTTP Server リスナーを使用しようとし
ても問題はありません。これは、mod_plsql のクリーン・アップ・スレッドにより、15 分以
上使用されていないデータベース・セッションがクリーン・アップされるためです。アイド
ル・セッションのクリーン・アップ用に指定されている時間は、
PlsqlIdleSessionCleanupInterval 構成パラメータを使用してチューニングできます
(デフォルト値は 15 分です)
。
データベースが 15 分以内に再起動されると、最初のリクエストのいくつかがエラーを戻し
ますが、システムは短時間で再び使用可能になります。失敗したリクエスト数は、mod_
plsql によりプールされていた接続の数と同数になります。
関連項目 : 表 4-1「データベース・アクセス記述子(DAD)パラメータ
と推奨設定のサマリー」
mod_plsql のパフォーマンス・チューニング領域
mod_plsql の使用中は、次の 3 つの領域がパフォーマンスとスケーラビリティに影響しま
す。
■
PL/SQL ベース Web アプリケーション開発時の考慮事項
■
接続プーリングのヒントと Oracle HTTP Server 構成
■
データベース・セッション数のチューニング
PL/SQL ベース Web アプリケーション開発時の考慮事項
PL/SQL Gateway ユーザーの場合、PL/SQL ベースの Web アプリケーション開発時の考慮
事項は次のとおりです。
1.
データベース・アクセス記述子(DAD)の使用の管理
)の使用の管理
データベース・アクセス記述子(
各 Oracle HTTP Server ノードで使用される DAD の数を制限してください。
注意 : 使用されていない DAD があってもパフォーマンスには影響しま
せん。
4-8 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
mod_plsql のパフォーマンス・チューニング領域
2.
ネストした表の使用
PL/SQL には、表の作成機能が用意されています。PL/SQL 表を作成するには、表の
データ型と索引を示す表を作成します。表の索引は、-2147483647 ~ +2147483647 の 2
進整数です。この表索引オプションには疎密性があり、顧客番号、従業員番号または他
の有効な索引キーなど、有意な索引番号を使用できます。PL/SQL 表は、大量データの
処理に使用します。
PL/SQL には、TABLE および VARRAY(可変サイズ配列)コレクション型が用意されて
います。TABLE コレクション型は、ネストした表と呼ばれます。ネストした表にはサイ
ズ制限がなく、疎密性があってもかまいません。つまり、ネストした表の要素は、
DELETE プロシージャを使用して削除できます。可変サイズ配列は、データベースに格
納されている場合にサイズが最大となり、その順序と添字が維持されます。ネストした
表のデータは、その表に関連付けられたシステム表に格納されます。可変サイズ配列は、
アプリケーションによりデータがバッチ配列スタイルで処理されるバッチ操作に適して
います。ネストした表は格納表に格納され、各要素が格納表の 1 行にマップされるため、
問合せの効率が向上します。
3.
プロシージャ名のオーバーロードの慎重な使用
PL/SQL ベースの Web アプリケーションでは、プロシージャ名のオーバーロード機能
を慎重に使用する必要があります。最善の方法は、名前の異なる複数のプロシージャを
使用することでプロシージャ名のオーバーロードを回避することです。
4.
型パラメータの決定時に大きなオーバーヘッドが発生するアプリケーションのリライト
の検討
PL/SQL ベースの Web アプリケーションでは、URL で十分な詳細が提供されないため
にパラメータの型(スカラーや配列など)が不明なプロシージャを実行する際の、オー
バーヘッドに注意する必要があります。このような場合、プロシージャの最初の試行は
失敗し、mod_plsql で実行するにはプロシージャのシグネチャを記述する必要がありま
す。
5.
2 パラメータ・スタイルの柔軟なパラメータの受渡しによるプロシージャの使用
プロシージャでは、4 パラメータ・スタイルのパラメータの受渡しではなく、より効率
的な 2 パラメータ・スタイルの柔軟なパラメータの受渡しを使用する必要があります。
関連項目 : 『Oracle Database アプリケーション開発者ガイド - 基礎編』
PL/SQL パフォーマンスの最適化
4-9
mod_plsql のパフォーマンス・チューニング領域
接続プーリングのヒントと Oracle HTTP Server 構成
Oracle HTTP Server で接続プーリングを構成する際の考慮事項は、次のとおりです。
1.
デフォルトの接続プーリングを使用し、PlsqlMaxRequestsPerSession の値を設定
します。
新規データベース接続の作成はコストがかかる操作で、最善の方法は、リクエストごと
に専用データベース接続をオープンおよびクローズする必要をなくすことです。最適な
テクニックとしては、あるリクエストでオープンされたデータベース接続を以降のリク
エストで確実に再利用させることです。まれに、データベースへのアクセス頻度がきわ
めて低く、パフォーマンスが主な課題ではない場合は、接続プーリングを無効化できま
す。たとえば、管理者がなんらかの管理タスクを実行するためにサイトにアクセスする
頻度が低い場合は、アプリケーションへのアクセスに使用する DAD で接続プーリング
を無効化するように選択できます。接続プーリングを無効化するには、DAD パラメータ
PlsqlMaxRequestsPerSession を値 1 に設定します。
注意 : PlsqlMaxRequestsPerSession を値 1 に設定すると、使用可
能なデータベース・セッション数が減少し、パフォーマンスに影響する可
能性があります。
2.
UNIX システムでは、1 度起動されたプロセスがしばらくは停止されないように、
Oracle HTTP Server 構成を適切にチューニングする必要があります。このようにチュー
ニングしないと、mod_plsql の接続プーリングが役立たなくなります。Oracle HTTP
Server リスナーがプロセスを継続的に起動および停止しなくてもよいようにする必要が
あります。Web サイトの平均負荷を判断するために、サイトで適切な負荷分析を実行し
てください。指定の httpd プロセス数でシステム上の平均負荷を処理できるように、
Oracle HTTP Server 構成をチューニングする必要があります。また、httpd.conf ファ
イルの MaxClients 構成パラメータでは、ランダムな負荷の変動も処理できる必要が
あります。
3.
UNIX システムでは、Oracle HTTP Server プロセスが最終的に終了および再起動される
ように構成する必要があります。この構成が必要なのは、Oracle HTTP Server を介して
アクセスされる各種コンポーネントでのメモリー・リークの可能性を制御するためで
す。特に mod_plsql では、データベース・セッションのリソース・リークが原因で問題
が発生しないように、この構成が必要となります。MaxRequestsPerChild 構成パラ
メータが大きい値に設定されていることを確認してください。PL/SQL ベースの Web ア
プリケーションの場合は、このパラメータを 0 に設定しないでください。
注意 : Windows システムでは、データベース・セッションのリソース・
リークが原因で問題が発生しないように、Oracle HTTP Server を定期的に
再起動する必要があります。
4-10 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
mod_plsql のパフォーマンス・チューニング領域
4.
負荷の大きいサイトでは、Oracle HTTP Server 構成パラメータ KeepAlive を無効化す
る必要があります。これにより各プロセスは、現行のリクエストの処理が完了した直後
に、他のクライアントからのリクエストの処理で使用可能になります。負荷が大きくな
く、Oracle HTTP Server プロセス数が Oracle HTTP Server リスナーに対する同時リク
エスト数よりも常に大きいことが保証されているサイトの場合は、KeepAlive パラ
メータを有効化するとパフォーマンスが改善されます。その場合は、必ず
KeepAliveTimeout パラメータを適切にチューニングしてください。
5.
Oracle HTTP Server 構成では Timeout の設定値を小さくする必要があります。これに
より、クライアントが適時にレスポンスを戻さない場合には、Oracle HTTP Server プロ
セスが早期に解放されることが保証されます。レスポンスの遅いクライアントがタイム
アウトになる可能性があるため、値を低めに設定しないでください。
6.
ほとんどの Web サイトには多数の静的イメージ・ファイルがあり、一貫したユーザー・
インタフェースを提供するために各画面に表示されます。この種のファイルはほとんど
変化せず、Oracle HTTP Server リスナーで処理される各イメージに mod_expires を使
用してタグ付けすると、システムの負荷を大幅に削減できます。また、Web サイトのフ
ロントエンドで Oracle Application Server Web Cache を使用することも考慮してくださ
い。
■
■
Web サイトで mod_expires を使用するメリットがあるかどうかを確認するには、
次の方法があります。
–
Netscape、またはページ・キャッシュ情報を表示できるブラウザを使用して、
サイト上でアクセス頻度の高い複数の Web ページにアクセスします。各ページ
でマウスを右クリックし、ポップアップ・メニューから「View Info」(また
はブラウザの場合は同等のコマンド)を選択します。ページ情報ウィンドウの
上部パネルに多数の異なるイメージと静的コンテンツが表示される場合は、そ
のサイトでは mod_expires を使用するとメリットが得られます。
–
また、Oracle HTTP Server のアクセス・ログを調べて、HTTP 304(Not
Modified)ステータスになるリクエストのパーセンテージを確認する方法もあ
ります。grep ユーティリティを使用して access_log 内で 304 を検索し、検
出された行数を access_log の合計行数で除算します。このパーセンテージが
高い場合は、サイトで mod_expires を使用するとメリットが得られます。
静的ファイルに Expires ヘッダーでタグ付けする方法は、次のとおりです。
–
静的イメージ・ファイルの処理に使用される Location ディレクティブを検索
します。そのディレクティブに ExpiresActive および ExpiresDefault
ディレクティブを追加します。
Alias /images/ "/u01/app/oracle/myimages/"
<Directory "/u01/app/oracle/myimages/">
AllowOverride None
Order allow, deny
Allow from all
PL/SQL パフォーマンスの最適化
4-11
mod_plsql のパフォーマンス・チューニング領域
ExpiresActive On
ExpiresDefault A2592000
</Directory>
ブラウザでは、今後 30 日間、/images パスから提供される静的ファイルすべ
てがキャッシュされます。詳細は、『Oracle HTTP Server 管理者ガイド』を参
照してください。
■
静的ファイルが Expires ヘッダーでタグ付けされているかどうかを判断する方法
は、次のとおりです。
–
Netscape または選択したブラウザを使用して、ブラウザでキャッシュされた
ファイルをすべてクリーン・アップします。
–
Expires ヘッダーでタグ付けされているイメージを含む Web ページにアクセ
スします。そのページでマウスを右クリックし、ポップアップ・メニューから
「View Info」を選択するか、またはブラウザの場合は同等のコマンドを使用し
ます。
–
ページ情報の上部パネルで、Expires ヘッダーでタグ付けする必要のあるイ
メージを選択します。
–
下部パネルに表示される情報を検討します。Expires ヘッダーが有効な日付に
設定されている必要があります。このエントリが No date given の場合、
ファイルは Expires ヘッダーでタグ付けされていません。
データベース・セッション数のチューニング
データベース・セッション数をチューニングする際の考慮事項は、次のとおりです。
1.
Oracle init$SID.ora 構成ファイルの processes および sessions パラメータは、
Oracle で最大数のデータベース・セッションを処理できるように設定する必要がありま
す。この数は、DAD 数× Oracle HTTP Server プロセスの最大数× Oracle HTTP Server
インスタンス数に比例して設定してください。
2.
2 リスナー方式を使用するか、共有サーバーを使用すると、データベース・セッション
数が減少します。4-13 ページの「2 リスナー方式」を参照してください。
3.
UNIX プラットフォームでは、接続プールは Oracle HTTP Server プロセス間で共有され
ません。このため、アプリケーションで使用する DAD はできるだけ少なくすることを
お薦めします。
4-12 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
mod_plsql のパフォーマンス・チューニング領域
2 リスナー方式
すべての UNIX ベースプラットフォームなど、Oracle HTTP Server がプロセスベースのプ
ラットフォームでは、サーブレット、PL/SQL、静的ファイルおよび CGI など、あらゆるタ
イプの HTTP リクエストが各プロセスで処理されます。単一 Oracle HTTP Server リスナー設
定では、各 httpd プロセスによりデータベースへの専用接続プールがメンテナンスされま
す。最大データベース・セッション数は、httpd.conf 構成ファイルの StartServers、
MinSpareServers および MaxSpareServers の設定とシステム上の負荷により制御され
ます。このアーキテクチャでは、mod_plsql リクエスト数に基づくデータベース・セッショ
ン数のチューニングは許可されません。mod_plsql リクエストの数に基づいてデータベー
ス・セッション数をチューニングするには、mod_plsql リクエスト専用に別個の HTTP リス
ナーをインストールします。このアプローチでは、mod_plsql リクエストの処理に必要な
データベース・セッション数が大幅に削減されます。
たとえば、メインの Oracle HTTP Server リスナーが mylsnr1.mycompany.com のポート
7777 で実行されているとします。最初に、mylsnr2.mycompany.com のポート 8888 に別の
Oracle HTTP Server リスナーをインストールできます。次に、
mylsnr1.mycompany.com:7777 に対するすべての mod_plsql リクエストを、
mylsnr2.mycompany.com:8888 の第 2 リスナーにリダイレクトします。次の手順を検討
してください。
1.
mylsnr1.mycompany.com:7777 に対する PL/SQL リクエストをすべて
mylsnr2.mycompany.com:8888 にリダイレクトするには、構成を次のように変更し
ます。
a.
ポート 7777 で実行中の Oracle HTTP Server リスナーについて、
ORACLE_HOME/Apache/modplsql/conf/plsql.conf ファイルを編集します。
次の行の先頭に # を付けてコメント化します。
#LoadModule plsql_module...
b.
mylsnr1.mycompany.com で PL/SQL リクエストの処理に使用される DAD
location を、mylsnr2.mycompany.com の
ORACLE_HOME/Apache/modplsql/conf/dads.conf 構成ファイルにコピーし
ます。
mylsnr1.mycompany.com 上で、DAD location 構成パラメータの先頭に # 文字を
付けてコメント化します。
#<Location /pls/dad>
#...
#</Location>
c.
dads.conf に次の行を追加して、この DAD location に対する mod_plsql リクエ
ストをすべて第 2 リスナーに転送するように、このリスナーを構成します。
ProxyPass /pls/dad http://mylsnr2.mycompany.com:8888/pls/dad
すべての DAD location について構成手順を繰り返します。
PL/SQL パフォーマンスの最適化
4-13
mod_plsql のパフォーマンス・チューニング領域
2.
PL/SQL プロシージャではブラウザに表示される URL が生成されるため、すべての
URL は mylsnr2.mycompany.com:8888 上の内部 mod_plsql リスナーへの参照を使
用せずに構成する必要があります。PL/SQL ベース Web アプリケーションでの URL の
生成方法に応じて、次の 3 つのオプションがあります。
■
■
URL がアプリケーションにハードコード化される場合は、ハードコード値として
常に HOST=mylsnr1.mycompany.com および PORT=7777 を使用して生成されるこ
とを確認します。この使用例では、変更する必要はありません。
PL/SQL ベースの Web アプリケーションで常に CGI 環境変数 SERVER_NAME および
SERVER_PORT が使用される場合は、mylsnr2.mycompany.com 上でリスナーの
構成を簡単に変更できます。第 2 リスナーの
ORACLE_HOME/Apache/Apache/conf/httpd.conf ファイルを編集し、
ServerName 行と Port 行を次のように変更します。
ServerName mylsnr1.mycompany.com (was mylsnr2.mycompany.com)
Port 7777
(was 8888)
■
URL が CGI 環境変数 HTTP_HOST を使用して生成される場合は、
ポート 8888 で実行
される Oracle HTTP Server リスナーについては、この CGI 環境変数をオーバーラ
イドする必要があります。DAD ごとに
ORACLE_HOME/Apache/modplsql/conf/dads.conf ファイルに次の行を追加
して、デフォルトの CGI 環境変数 HOST、SERVER_NAME および SERVER_PORT を
オーバーライドします。
PlsqlCGIEnvironmentList
PlsqlCGIEnvironmentList
PlsqlCGIEnvironmentList
SERVER_NAME mylsnr1.mycompany.com
SERVER_PORT 7777
HOST mylsnr1.us.oracle.com:7777
いずれの手順も、アプリケーションで第 2 リスナーが存在しない場合と同様に URL を
生成させることを意図しています。
3.
設定をテストし、すべての DAD に問題なくアクセスできることを確認します。
4.
この設定では、メイン・リスナー mylsnr1.mycompany.com を Oracle HTTP Server
リスナーの合計負荷に基づいて構成できます。mylsnr2.mycompany.com 上の第 2 リ
スナーは、発行される mod_plsql リクエストのみに基づいて詳細にチューニングできま
す。
4-14 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
mod_plsql のパフォーマンス・チューニング領域
オーバーヘッドの問題
mod_plsql では、一部のストアド・プロシージャの実行中に Describe オーバーヘッドが発
生することがあります。この場合、プロシージャを正常に実行するためにデータベースへの
ラウンドトリップが 2 回余分に発生します。この動作は暗黙的なパフォーマンス低下を伴い
ます。
Describe オーバーヘッド
ストアド・プロシージャを実行するために、mod_plsql は渡されるパラメータのデータ型を
認識する必要があります。この情報に基づいて、mod_plsql は各パラメータを配列またはス
カラーとしてバインドします。プロシージャのシグネチャを認識する方法の 1 つは、実行前
にプロシージャを記述することです。ただし、このアプローチは、各プロシージャを実行す
る前に記述する必要があるため効率的ではありません。Describe オーバーヘッドを回避する
ために、mod_plsql はパラメータ名ごとに渡されるパラメータの数を調べます。この情報を
使用して、各変数のデータ型が想定されます。この論理は単純で、1 つの値が渡される場合
のパラメータはスカラーで、それ以外の場合は配列であるとみなされます。この論理はほと
んどの場合に有効ですが、配列パラメータで 1 つの値を渡そうとしたり、スカラーについて
複数の値を渡そうとすると失敗します。このような場合、PL/SQL プロシージャの最初の試
行は失敗します。mod_plsql は Describe コールを発行して PL/SQL プロシージャのシグ
ネチャを取得し、Describe 操作から取得した情報に基づいて各パラメータをバインドしま
す。プロシージャが再実行されて結果が戻されます。
この Describe コールはプロシージャに対して透過的に発生しますが、mod_plsql では内部
的に 2 回(一方は失敗した実行コール、他方は Describe コール)の余分なラウンドトリップ
が発生しています。
Describe オーバーヘッドの回避
パフォーマンス上の問題は次の方法で回避できます。
■
■
■
柔軟なパラメータの受渡しを使用します。
配列については常に複数の値を渡すことを確認します。値が 1 つの場合は、プロシー
ジャで無視されるダミーの値を渡すことができます。
次の回避策を使用します。この回避策では、使用されない変数をデフォルト設定する 2
パラメータ・スタイルのプロシージャを定義します。
1.
プロシージャに相当するスカラーを定義し、このスカラーで元のプロシージャを内
部的にコールします。たとえば、元のパッケージが次の例のように定義されている
とします。
CREATE OR REPLACE PACKAGE testpkg AS
TYPE myArrayType is TABLE of VARCHAR2(32767) INDEX BY binary_ integer;
PROCEDURE arrayproc (arr myArrayType);
END testpkg;
/
PL/SQL パフォーマンスの最適化
4-15
mod_plsql のパフォーマンス・チューニング領域
2.
/pls/.../testpkg.arrayproc? arr= 1 のように URL をコールする場合は、
指定を次のように変更します。
CREATE OR REPLACE PACKAGE testpkg AS
TYPE myArrayType is TABLE of VARCHAR2( 32767) INDEX BY binary_integer;
PROCEDURE arrayproc (arr varchar2);
PROCEDURE arrayproc (arr myArrayType);
END testpkg;
/
3.
arrayproc プロシージャは次のようになります。
CREATE OR REPLACE PACKAGE BODY testpkg AS
PROCEDURE arrayproc (arr varchar2) IS
localArr myArrayType;
BEGIN
localArr( 1) := arr;
arrayproc (localArr);
END arrayproc;
柔軟なパラメータの受渡し(4
柔軟なパラメータの受渡し( パラメータ)のオーバーヘッド
PL/SQL プロシージャで古いスタイルの 4 パラメータ・インタフェースを使用している場合
は、ラウンドトリップのオーバーヘッドが存在します。PL/SQL Gateway は、最初に 2 パラ
メータ・インタフェースを使用してプロシージャを実行しようとします。実行に失敗すると、
4 パラメータ・インタフェースを試行します。これは、4 パラメータ・インタフェースのプロ
シージャの場合はすべて、実行のために 1 回余分なラウンドトリップが発生することを意味
します。
■
柔軟なパラメータの受渡しのオーバーヘッドの回避
このオーバーヘッドを回避するために、2 パラメータ・インタフェースを使用する対応
ラッパーを記述し、内部的に 4 パラメータ・インタフェースのプロシージャをコールす
ることをお薦めします。もう 1 つのオプションは、元のプロシージャの指定を変更し、2
パラメータ・インタフェースでは渡されないパラメータにデフォルト設定することで
す。4 パラメータ・インタフェースは下位互換性を保つためにのみ提供されており、将
来は使用されなくなります。
■
柔軟なパラメータと感嘆符の使用
Oracle HTTP Server における柔軟なパラメータの受渡しモードでは、PL/SQL プロシー
ジャの名前は感嘆符で始まるものと予期されます。Oracle HTTP Server で使用される自
動検出メソッドはパフォーマンスに影響するため、Oracle HTTP Server における柔軟な
パラメータの受渡しに感嘆符が必要となります。Oracle HTTP Server では、各プロシー
ジャが実行前に完全に記述されます。Describe プロシージャのコールでプロシージャ
のシグネチャが判別され、データベースへのラウンドトリップが必要です。Oracle
4-16 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
PL/SQL ベースの Web アプリケーションでのキャッシュの使用
HTTP Server の PL/SQL Gateway は、このラウンドトリップを回避するために、エン
ドユーザーに対してプロシージャ名の前に感嘆符を追加することで柔軟なパラメータの
受渡し規則を明示的に指定させます。
PL/SQL ベースの Web アプリケーションでのキャッシュの使用
キャッシュにより、PL/SQL ベースの Web アプリケーションのパフォーマンスを改善でき
ます。そのために、中間層で PL/SQL プロシージャにより生成された Web コンテンツを
キャッシュし、データベースのワークロードを低減できます。
この項では、キャッシュに使用される次のようなテクニックについて説明します。
■
■
■
検証テクニックの使用 : アプリケーションがサーバーに対して、ページが最後に表示さ
れた後で変更されたかどうかを確認します。
Expires テクニックの使用 : 特定の期間に基づいて、PL/SQL ベースの Web アプリケー
ションがページをキャッシュするか再生成が必要かを判断します。
PL/SQL ベースの Web アプリケーションでのシステムレベルおよびユーザーレベル・
キャッシュ : このテクニックは、検証テクニックまたは Expires テクニックを使用する
場合に有効です。キャッシュ・レベルは、ページが特定のユーザーについてキャッシュ
されるか、またはシステム内の全ユーザーについてキャッシュされるかにより決定され
ます。
これらのテクニックとレベルは、PL/SQL Web Toolkit に含まれる owa_cache パッケージ
を使用して実装されます。
関連項目 : 『Oracle Database アプリケーション開発者ガイド - 基礎編』
検証テクニックの使用
通常、検証テクニックでは、ページが最後に表示された後に変更されたかどうかをサーバー
に問い合わせます。変更がなければ、キャッシュ内のページがユーザーに表示されます。
ページに変更があった場合は、新規コピーが取得され、ユーザーに表示されてからキャッ
シュされます。
検証テクニックは、Last-Modified メソッドおよび Entity Tag メソッドという 2 つの方法で
使用されます。次の 2 つの項では、これらのテクニックを HTTP プロトコルで使用する方法
について説明します。PL/SQL Gateway では HTTP プロトコルは使用されませんが、同じ原
則が多数使用されます。
PL/SQL パフォーマンスの最適化
4-17
PL/SQL ベースの Web アプリケーションでのキャッシュの使用
Last-Modified メソッド
HTTP プロトコルを使用して生成された Web ページには、Last-Modified レスポンス・ヘッ
ダーが含まれています。このヘッダーは、リクエストされたコンテンツのサーバー相対日付
を示します。ブラウザでは、この日付情報がコンテンツとともに保存されます。Web ページ
の URL が以降にリクエストされると、ブラウザは次のように動作します。
1.
キャッシュされたバージョンがあるかどうかが判別されます。
2.
日付情報が抽出されます。
3.
If-Modified-Since リクエスト・ヘッダーが生成されます。
4.
リクエストがサーバーに送信されます。
キャッシュ対応サーバーは、If-Modified-Since ヘッダーを調べてコンテンツの日付と比較
します。この 2 つが一致すると、「HTTP/1.1 304 Not Modified」など、HTTP レスポンスの
ステータス・ヘッダーが生成され、コンテンツは返信されません。このステータス・コード
を受け取ると、ブラウザではその検証済のキャッシュ・エントリが再利用できるようになり
ます。
この 2 つが一致しない場合は、
「HTTP/1.1 200 OK」などの HTTP レスポンス・ヘッダーが
生成され、新規コンテンツが新規 Last-Modified レスポンス・ヘッダーとともに返信されま
す。このステータス・コードを受け取った場合、ブラウザはキャッシュ・エントリを新規コ
ンテンツおよび新規日付情報に置き換える必要があります。
Entity Tag メソッド
HTTP プロトコルに用意されているもう 1 つの検証メソッドは、ETag(エンティティ・タ
グ)レスポンスおよびリクエスト・ヘッダーです。このヘッダーの値は、ブラウザに対して
不透明な文字列です。サーバーは、この文字列をアプリケーションのタイプに基づいて生成
します。これは、日付値しか使用できない If-Modified-Since ヘッダーよりも汎用的な検証
メソッドです。
ETag メソッドの動作は Last Modified メソッドとよく似ています。サーバーは、レスポン
ス・ヘッダーの一部として ETag を生成します。ブラウザでは、この不透明なヘッダー値が
返信されたコンテンツとともに格納されます。このコンテンツに対する次のリクエストを受
け取ると、ブラウザは格納されている不透明な値とともに If-Match ヘッダーをサーバーに
渡します。この不透明な値はサーバーで生成されたため、ブラウザに送り返す内容を判断で
きます。残りの部分は、前述した Last-Modified 検証メソッドと同じです。
4-18 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
PL/SQL ベースの Web アプリケーションでのキャッシュの使用
mod_plsql への検証テクニックの使用
HTTP 検証キャッシュをフレームワークとして使用する場合の、mod_plsql の検証モデルは
次のとおりです。
処理するコンテンツを制御する必要のある PL/SQL ベースの Web アプリケーションでは、
このタイプのキャッシュを使用する必要があります。このテクニックでは、パフォーマンス
がゆるやかに改善されます。その一例は、いずれかの時点で変化する可能性のある動的コン
テンツを処理する Web アプリケーションです。この場合、Web アプリケーションでは処理
対象を完全に制御する必要があります。検証キャッシュでは、キャッシュ内のコンテンツを
ブラウザに戻す前に、それが陳腐化していないかどうかを常に Web アプリケーションで確
認しています。
図 4-1 に、mod_plsql に対する検証テクニックの使用を示します。
1.
Oracle HTTP Server がクライアント・サーバーから PL/SQL プロシージャ・リクエスト
を受信します。Oracle HTTP Server は、そのリクエストを mod_plsql にルーティングし
ます。
2.
mod_plsql がリクエストを準備します。
3.
mod_plsql が Web アプリケーション内で PL/SQL プロシージャを起動し、通常の
Common Gateway Interface(CGI)環境変数を Web アプリケーションに渡します。
4.
PL/SQL プロシージャが戻すコンテンツを生成します。PL/SQL プロシージャは、生成
したコンテンツがキャッシュ可能であると判断すると、PL/SQL Web Toolkit からの
owa_cache プロシージャをコールし、タグとキャッシュ・レベルを設定します。
owa_cache.set_cache(p_etag, p_level);
表 4-3 検証モデル・パラメータ
パラメータ
説明
set_cache
プロシージャ
返信されるコンテンツがキャッシュ可能であることを mod_plsql に通知
するヘッダーを設定します。これにより、コンテンツがブラウザに返信さ
れると、mod_plsql はそれをタグおよびキャッシュ・レベル情報ととも
にローカル・ファイル・システム上でキャッシュします。
p_etag
プロシージャによりコンテンツをタグ付けするために生成される文字列。
p_level
キャッシュ・レベル : システム・レベルは SYSTEM、ユーザー・レベルは
USER。
5.
HTML が mod_plsql に戻されます。
6.
mod_plsql では、キャッシュ可能なコンテンツがファイル・システムに格納され、次回
のリクエストに備えます。
7.
Oracle HTTP Server は、そのレスポンスをクライアント・ブラウザに送信します。
PL/SQL パフォーマンスの最適化
4-19
PL/SQL ベースの Web アプリケーションでのキャッシュの使用
図 4-1 検証テクニック
検証テクニックを使用した第 2 リクエスト
mod_plsql に検証テクニックを使用し、同じ PL/SQL プロシージャに対してクライアント・
ブラウザから第 2 リクエストが発行されます。
図 4-2 に、検証テクニックを使用した第 2 リクエストを示します。
1.
mod_plsql が、リクエストに関するキャッシュ済のコンテンツがあることを検出しま
す。
2.
mod_plsql は、(第 1 リクエストと)同じタグおよびキャッシュ・レベル情報を、CGI
環境変数の一部として PL/SQL プロシージャに転送します。
3.
PL/SQL プロシージャは、これらのキャッシュ CGI 環境変数を使用して、コンテンツに
変更があったかどうかを調べます。そのため、PL/SQL Web Toolkit から次の
owa_cache ファンクションがコールされます。
owa_cache.get_etag;
owa_cache.get_level;
これらの owa ファンクションはタグおよびキャッシュ・レベルを取得します。
4.
Web アプリケーションが mod_plsql にキャッシュ情報を送信します。
5.
その情報に基づいて、コンテンツの再生成が必要か、またコンテンツがキャッシュから
処理できるかが判別されます。
a.
コンテンツに変更がなければ、プロシージャは owa_cache.set_not_modified
プロシージャをコールし、コンテンツは生成されません。このため、mod_plsql で
はキャッシュ内のコンテンツが使用されます。キャッシュ内のコンテンツは、ブラ
ウザに直接返信されます。
4-20 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
PL/SQL ベースの Web アプリケーションでのキャッシュの使用
b.
コンテンツに変更があった場合は、新規のタグおよびキャッシュ・レベルとともに
新規コンテンツが生成されます。mod_plsql では、キャッシュ内の古いコピーが新
規コピーで置換され、タグおよびキャッシュ・レベル情報が更新されます。新規に
生成されたコンテンツがブラウザに返信されます。
図 4-2 検証テクニック : 第 2 リクエスト
Expires テクニックの使用
検証モデルでは、mod_plsql はキャッシュからのコンテンツを処理できるかどうかを常に
PL/SQL プロシージャに確認します。Expires モデルでは、プロシージャはコンテンツの妥当
性期間を事前に確立します。そのため、mod_plsql はプロシージャに確認せずにキャッシュ
からのコンテンツを処理できます。これにより、データベースとの対話を必要としないため
パフォーマンスがさらに改善されます。
このキャッシュ・テクニックでは、最大パフォーマンスが得られます。このテクニックを使
用するのは、PL/SQL ベースの Web アプリケーションが陳腐化したコンテンツの処理に依
存しない場合です。その一例が、ニュースを毎日生成するアプリケーションです。ニュース
は、24 時間だけ有効であるように設定できます。キャッシュ内のコンテンツは、アプリケー
ションへの接続なしに 24 時間以内に戻されます。これは、実際にはファイルの処理と同じで
す。24 時間後に、mod_plsql はアプリケーションから新規のコンテンツを再びフェッチしま
す。
ここでは検証モデルについて説明したのと同じ使用例を使用しますが、プロシージャでは
キャッシュに Expires モデルを使用するものとします。
図 4-3 に、mod_plsql に対する Expires テクニックの使用を示します。
PL/SQL パフォーマンスの最適化
4-21
PL/SQL ベースの Web アプリケーションでのキャッシュの使用
1.
Oracle HTTP Server がクライアント・サーバーから PL/SQL Server Page リクエストを
受信します。Oracle HTTP Server は、そのリクエストを mod_plsql にルーティングしま
す。
2.
mod_plsql は、リクエストを Oracle データベースに転送します。
3.
mod_plsql がアプリケーション内で PL/SQL プロシージャを起動し、通常の Common
Gateway Interface(CGI)環境変数をアプリケーションに渡します。
4.
PL/SQL プロシージャがコンテンツを生成し、戻します。PL/SQL プロシージャは、生
成したコンテンツがキャッシュ可能であると判断すると、PL/SQL Web Toolkit からの
owa_cache プロシージャをコールし、妥当性期間とキャッシュ・レベルを設定します。
owa_cache.set_expires(p_expires, p_level);
表 4-4 Expires モデルのパラメータ
パラメータ
説明
set_expires
プロシージャ
Expires キャッシュが使用されていることを mod_plsql に通知す
るように、ヘッダーを設定します。mod_plsql は、妥当性期間お
よびキャッシュ・レベル情報とともにコンテンツをファイル・シ
ステムにキャッシュします。
p_expires
コンテンツの有効期間(分)
。
p_level
キャッシュ・レベル。
5.
HTML が mod_plsql に戻されます。
6.
mod_plsql が、キャッシュ可能なコンテンツを次回のリクエストに備えてファイル・シ
ステムに格納します。
7.
Oracle HTTP Server は、そのレスポンスをクライアント・ブラウザに送信します。
4-22 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
PL/SQL ベースの Web アプリケーションでのキャッシュの使用
図 4-3 Expires テクニック
Expires テクニックを使用した第 2 リクエスト
前述の Expires モデルを使用し、同じ PL/SQL プロシージャに対してクライアント・ブラウ
ザが第 2 リクエストを発行します。
図 4-4 に、Expires テクニックを使用した第 2 リクエストを示します。
1.
mod_plsql が、Expires ベースのコンテンツのコピーがキャッシュ内にあることを検出
します。
2.
mod_plsql が、現在の時刻とこのキャッシュ・ファイルの作成時刻の差を使用してコン
テンツの妥当性をチェックします。
a.
この差が妥当性期間内であれば、キャッシュ内のコピーはまだ新しく、データベー
スとの相互作用なしで使用されます。キャッシュ内のコンテンツは、ブラウザに直
接返信されます。
b.
差が妥当性期間を超えている場合、キャッシュ内のコピーは陳腐化しています。
mod_plsql は PL/SQL プロシージャを起動して新規コンテンツを生成します。次
に、Expires ベースのキャッシュを再び使用するかどうかを決定します。再び使用す
る場合は、この新規コンテンツの妥当性期間も決定します。新規に生成されたコン
テンツがブラウザに返信されます。
PL/SQL パフォーマンスの最適化
4-23
PL/SQL ベースの Web アプリケーションでのキャッシュの使用
図 4-4 Expires テクニック : 第 2 リクエスト
PL/SQL ベースの Web アプリケーションでのシステムレベルおよび
ユーザーレベル・キャッシュ
PL/SQL プロシージャにより、生成されたコンテンツがシステムレベルであるかユーザーレ
ベルであるかが判別されます。これにより、複数のユーザーが同じコンテンツを参照してい
る場合に、PL/SQL Gateway のキャッシュに格納される冗長ファイル数が減少します。コン
テンツのレベルは次のようにして判別されます。
■
システムレベルのコンテンツの場合、プロシージャはキャッシュ・レベル・パラメータ
システムレベル
として文字列 SYSTEM を owa_cache ファンクション(検証モデルの場合は set_
cache、Expires モデルの場合は set_expires)に渡します。これは、キャッシュを共
有するユーザーごとに実行されます。
システムレベルのキャッシュを使用すると、システム内の全ユーザーのファイル・シス
テムの領域と時間を節約できます。その一例は、Web アプリケーションを使用する全員
を対象としたコンテンツを生成する Web アプリケーションです。システムレベル設定を
使用してコンテンツをキャッシュすると、そのコンテンツのコピーが 1 つのみファイ
ル・システムにキャッシュされます。さらに、コンテンツはキャッシュから直接提供さ
れるため、そのシステム上のユーザー全員がメリットを得ることができます。
■
ユーザーレベルのコンテンツの場合は、キャッシュ・レベルのパラメータとして文字列
ユーザーレベル
USER が渡されます。これは、ログインしている特定のユーザーについてのみ実行され
ます。格納されているキャッシュは、そのユーザーに対して一意です。そのユーザーの
みがキャッシュを使用できます。ユーザーのタイプは認証モードにより決定されます。
次の表に各ユーザー・タイプを示します。
4-24 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
PL/SQL ベースの Web アプリケーションでのキャッシュの使用
表 4-5 認証モードにより決定されるユーザーのタイプ
認証モード
シングル・サインオン
(SSO)
ユーザーのタイプ
軽量ユーザー
Basic
データベース・ユーザー
カスタム
リモート・ユーザー
たとえば、PL/SQL ベースの Web アプリケーションをカスタマイズしているユーザーがい
ない場合は、出力をシステムレベルのキャッシュに格納できます。キャッシュのコピーは、
システム上の全ユーザーに 1 つのみとなります。キャッシュは複数のユーザーが使用できる
ため、ユーザー情報は使用されません。
ただし、ユーザーがアプリケーションをカスタマイズしている場合、ユーザーレベルの
キャッシュはそのユーザー専用に格納されます。他のユーザーは引き続きシステムレベルの
キャッシュを使用します。ユーザーレベルのキャッシュ・ヒットの場合は、ユーザー情報が
基準となります。ユーザーレベルのキャッシュにより、常にシステムレベルのキャッシュが
オーバーライドされます。
関連項目 : 認証モードの詳細は、3-2 ページの「mod_plsql を使用した
ユーザー認証」を参照してください。
PL/SQL Web Toolkit のファンクション(owa_cache
パッケージ)
のファンクション(
検証テクニックと Expires テクニックのどちらを使用するかによって、どの owa_cache
ファンクションをコールするかが決まります。
owa_cache パッケージには、特殊なキャッシュ・ヘッダーおよび環境変数を設定および取
得するためのプロシージャが含まれています。これらのプロシージャにより、開発者は
PL/SQL Gateway キャッシュを簡単に使用できます。このパッケージは、データベースにす
でにインストールされています。
PL/SQL パフォーマンスの最適化
4-25
PL/SQL ベースの Web アプリケーションでのキャッシュの使用
表 4-6 に、コールする主ファンクションを示します。
表 4-6 主 owa_cache ファンクション
owa ファンクション
目的
owa_cache.set_cache (p_etag IN
varchar2, p_level IN varchar2)
検証モデル : ヘッダーを設定します。
■
■
p_etag パラメータでは生成されるコンテンツに
タグ付けします。
p_level パラメータは使用するキャッシュ・レベ
ルです。
owa_cache.set_not_modified
検証モデル : キャッシュ内のコンテンツを使用するよ
うに mod_plsql に通知するヘッダーを設定します。検
証ベースのキャッシュ・ヒットが発生する場合にのみ
使用します。
owa_cache.get_level
検証モデル : キャッシュ・レベル USER または SYSTEM
を取得します。キャッシュがヒットしない場合は
NULL を戻します。
owa_cache.get_etag
検証モデル : キャッシュ内のコンテンツに関連付けら
れているタグを取得します。キャッシュがヒットしな
い場合は NULL を戻します。
owa_cache.set_expires( p_
expires IN number, p_level IN
varchar2)
Expires モデル : ヘッダーを設定します。
■
■
4-26 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
p_expires パラメータは、コンテンツの有効期間
(分)です。
p_level パラメータは使用するキャッシュ・レベ
ルです。
ファイル・システム・キャッシュのチューニングによるキャッシュ・パフォーマンスの改善
ファイル・システム・キャッシュのチューニングによる
キャッシュ・パフォーマンスの改善
PL/SQL ベースの Web アプリケーションのパフォーマンスを改善するようにファイル・シ
ステム・キャッシュを構成して使用できます。
この項の内容は、次のとおりです。
■
ファイル・システム・キャッシュのチューニングの概要
■
ファイル・システム・キャッシュの有効化
■
より高速のファイル・システムに常駐するファイル・システム・キャッシュの構成
■
ファイル・システム・キャッシュのサイズ変更
■
キャッシュのクリーン・アップの構成
ファイル・システム・キャッシュのチューニングの概要
この項では、mod_plsql 関連のファイル・システム・キャッシュのチューニング・オプショ
ンについて説明します。キャッシュのコンテンツは、オペレーティング・システム提供の
ファイル・システム・コールを使用してキャッシュされます。キャッシュ内のコンテンツが
mod_plsql のメモリー領域に格納されることはありません。オペレーティング・システムで
サポートされており、システムはメモリー・ディスクなどの機能を使用するように構成され
ている場合は、mod_plsql のファイル・システム・キャッシュを使用するとキャッシュのコ
ンテンツをメモリーに格納できます(一部の UNIX プラットフォームでは、メモリー・ディ
スク・ベースの高速格納がサポートされます)
。
mod_plsql がファイル・システム・キャッシュを使用するように構成されている場合は、こ
の項の情報に従って PL/SQL ベースの Web アプリケーションのパフォーマンスを改善でき
ます。
表 4-7 に、mod_plsql に対して設定できるキャッシュ関連パラメータを示します。各パラ
メータは、cache.conf ファイル内で設定します。このファイルは、UNIX の場合は
ORACLE_HOME/Apache/modplsql/conf ディレクトリ、Windows の場合は
ORACLE_HOME¥Apache¥modplsql¥conf ディレクトリにあります。
注意 : 各パラメータの詳細とパラメータ値の設定例については、conf
ディレクトリにある cache.README ファイルを参照してください。
PL/SQL パフォーマンスの最適化
4-27
ファイル・システム・キャッシュのチューニングによるキャッシュ・パフォーマンスの改善
表 4-7 mod_plsql の cache.conf 構成パラメータのサマリー
パラメータ
説明
PlsqlCacheCleanupTime
キャッシュ・クリーン・アップ・ルーチンの実行間隔を設定します。
デフォルト : Everyday 23:00(クリーン・アップ・ルーチンをローカル時間の午
後 11 時に毎日実行)
関連項目 : 4-32 ページ「キャッシュのクリーン・アップの構成」
PlsqlCacheDirectory
mod_plsql キャッシュを保持するディレクトリを定義します。
デフォルト
UNIX システム上でのエラー・ログのデフォルト・ディレクトリ :
ORACLE_HOME/Apache/modplsql/cache
Windows システム上でのデフォルト・ディレクトリ :
ORACLE_HOME¥Apache¥modplsql¥cache
関連項目 : 4-29 ページ「より高速のファイル・システムに常駐するファイル・シス
テム・キャッシュの構成」
PlsqlCacheEnable
ファイル・システム・キャッシュを有効化します。
デフォルト : On
関連項目 : 4-29 ページ「ファイル・システム・キャッシュの有効化」
PlsqlCacheMaxAge
キャッシュのコンテンツのエージング日数を制御します。
デフォルト : 30(日)
関連項目 : 4-31 ページ「PlsqlCacheMaxAge を使用したキャッシュのエージング日
数の設定」
PlsqlCacheMaxSize
キャッシュに格納される個々のファイルの最大サイズ(バイト数)を設定します。
デフォルト : 1048576(1 MB)
関連項目 : 4-32 ページ「PlsqlCacheMaxSize を使用したキャッシュ・ファイルの最
大ファイル・サイズの設定」
PlsqlCacheTotalSize
キャッシュの合計サイズを制限します。値はバイト単位で指定します。
デフォルト : 20971520(20 MB)
関連項目 : 4-30 ページ「ファイル・システム・キャッシュのサイズ変更」
4-28 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
ファイル・システム・キャッシュのチューニングによるキャッシュ・パフォーマンスの改善
ファイル・システム・キャッシュの有効化
cache.conf の PlsqlCacheEnable パラメータを使用して、mod_plsql のキャッシュを有
効化します。最大パフォーマンスを得るには、PlsqlCacheEnable パラメータの値を On に
設定して、このパラメータを有効化します。
より高速のファイル・システムに常駐するファイル・システム・
キャッシュの構成
この項では、別のディスクに常駐するファイル・システム・キャッシュの構成方法について
説明します。ファイル・システム・キャッシュを使用し、より高速の別ディスクにキャッ
シュを格納すると、OracleAS Portal および汎用の PL/SQL ベース Web アプリケーションな
ど、ファイル・システム・キャッシュを使用する全タイプの Web アプリケーションのパ
フォーマンスが改善されます。
ファイル・システム・キャッシュの構成時には、キャッシュを別の物理ディスクまたはメモ
リー・ディスクに常駐させることができます。
別のディスク上でファイル・システム・キャッシュを設定する手順は、次のとおりです。
1.
キャッシュ用のファイル・システムが次の位置にあるとします。
UNIX の場合 : /u01/cache
Windows の場合 : E:¥cache
2.
次のファイルを更新します。
UNIX の場合 : ORACLE_HOME/Apache/modplsql/conf/cache.conf
Windows の場合 : ORACLE_HOME¥Apache¥modplsql¥conf¥cache.conf
3.
キャッシュ・パラメータ PlsqlCacheDirectory を変更します。
UNIX の場合 : PlsqlCacheDirectory /u01/cache
Windows の場合 : PlsqlCacheDirectory
E:¥cache
PL/SQL パフォーマンスの最適化
4-29
ファイル・システム・キャッシュのチューニングによるキャッシュ・パフォーマンスの改善
ファイル・システム・キャッシュのサイズ変更
この項の内容は、次のとおりです。
■
PlsqlCacheTotalSize を使用したキャッシュ・サイズ合計の設定
■
PlsqlCacheMaxAge を使用したキャッシュのエージング日数の設定
■
PlsqlCacheMaxSize を使用したキャッシュ・ファイルの最大ファイル・サイズの設定
PlsqlCacheTotalSize を使用したキャッシュ・サイズ合計の設定
デフォルトのインストールでは、mod_plsql のファイル・システム・キャッシュ・サイズが
2097152 バイト(20 MB)に設定されます。PL/SQL アプリケーションで OWA_CACHE
パッケージを使用しない場合、または少量のコンテンツをキャッシュするために使用する場
合は、デフォルト設定で十分です。PL/SQL アプリケーションで大量のコンテンツを
mod_plsql のファイル・システム・キャッシュに格納する場合は、より大きい値の指定を考
慮する必要があります。
キャッシュ・サイズを制御するには、cache.conf ファイルの PlsqlCacheTotalSize パ
ラメータを設定します。UNIX システムでは、このファイルは
ORACLE_HOME/Apache/modplsql/conf ディレクトリにあります。Windows システムで
は、このファイルは ORACLE_HOME¥Apache¥modplsql¥conf ディレクトリにあります。
キャッシュ・サイズは、高いキャッシュ・ヒット率を十分に達成できる値に設定する必要が
あります。アクセス頻度の高いコンテンツを常にキャッシュしておくことのできる十分なサ
イズに、キャッシュ・サイズを設定してください。また、キャッシュ・サイズが大きくなり
すぎないように、ディスク領域を制限することも重要です。キャッシュ・サイズを適切に
チューニングすると、アクセス頻度の高いコンテンツすべてを十分にキャッシュできるよう
になります。また極端に大きなキャッシュでは検索の効率が落ちるため、キャッシュ・サイ
ズが大きくなりすぎるのを回できます。
PlsqlCacheTotalSize の値はバイト数として指定します。1 MB は 1048576 バイトに相当
します。この設定は、キャッシュの割当て量に対するゆるい制限です。ケースによっては、
次回のクリーン・アップ操作までにキャッシュ・サイズがこの制限を超えて大きくなること
があります。そのため、キャッシュ・サイズに対する強い制限として、基礎となる物理ハー
ド・ディスクのサイズが適用されます。この制限に達すると、領域が使用可能になるまで
キャッシュのコンテンツはディスクに書き出せなくなります。
妥当なキャッシュ・サイズを決定する手順は、次のとおりです。
1.
httpd.conf の LogLevel を info レベルに設定して、mod_plsql のパフォーマンス・
ロギングを有効化します。
2.
error_log を毎日監視します。UNIX システムでは、エラー・ログのデフォルト・ディ
レクトリは ORACLE_HOME/Apache/Apache/log です。Windows システムでは、デ
フォルト・ディレクトリは ORACLE_HOME¥Apache¥Apache¥log です。
4-30 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
ファイル・システム・キャッシュのチューニングによるキャッシュ・パフォーマンスの改善
mod_plsql の error_log エントリの書式は次のとおりです。
[info] mod_plsql: cachecleanup deleted=2571 max_age=96,2178852b
time=128s limit=25600000b
kept=1042,25585368b
各項目の意味は次のとおりです。
deleted は、クリーン・アップ処理中に削除されたキャッシュ・ファイルの数です。
max_age は、一定期間使用されなかったために削除されたキャッシュ・ファイルの数と合
計サイズです。
kept は、クリーン・アップ処理後に残ったキャッシュ・ファイルの数と合計サイズです。
time は、クリーン・アップ実行の所要時間です。
limit はキャッシュ・サイズ合計です。これは PlsqlCacheTotalSize 設定の値です。
エラー・ログに含まれるエントリの意味は、次のとおりです。
■
■
削除されるファイル数が残ったファイル数に比べて多い場合は、キャッシュ・サイズが
明らかに小さすぎることを示しています。キャッシュ・サイズを大きくする必要があり
ます。
削除されるファイル数が残ったファイル数に比べて少ない場合は、キャッシュ・サイズ
が大きすぎる可能性があることを示しています。十分なディスク領域がある場合は、そ
れをそのまま使用するように選択できます。また、キャッシュ・サイズを小さくして一
部のディスク領域を解放できます。
PlsqlCacheMaxAge を使用したキャッシュのエージング日数の設定
PlsqlCacheMaxAge パラメータを使用すると、キャッシュのコンテンツの陳腐化を制御で
きます。パラメータ値は日数単位で指定します。このパラメータのデフォルト値は 30(日)
です。これは、キャッシュのコンテンツが 30 日を経過するまではキャッシュに保存されるこ
とを意味します。30 日を経過すると、コンテンツはクリーン・アップ処理中に削除対象とみ
なされます。
mod_plsql の error_log 内の max_age 情報は、キャッシュ・ファイルのエージング情報
を示します。サイトが高度に動的な場合は、この設定を小さな値に構成すると有効です。こ
れは、キャッシュ内の古いコンテンツは通常、再利用されないため、値を小さくしても
キャッシュ・ヒット率に影響しないためです。サイトに多数の静的ページが含まれている場
合は、クリーン・アップ処理によるキャッシュ・コンテンツの削除時期が遅くなりすぎない
ように、PlsqlCacheMaxAge の値を大きくすると有効です。
PL/SQL パフォーマンスの最適化
4-31
ファイル・システム・キャッシュのチューニングによるキャッシュ・パフォーマンスの改善
PlsqlCacheMaxSize を使用したキャッシュ・ファイルの最大ファイル・
サイズの設定
PlsqlCacheMaxSize パラメータを使用すると、キャッシュ内の各ファイルの最大サイズ
を個別に指定できます。このパラメータを使用すると、1 つのキャッシュ・ファイルで
キャッシュ全体がいっぱいになる状況が回避されます。
このパラメータのデフォルト値は 1048576(バイト)です。通常、このパラメータはキャッ
シュ・サイズ合計の約 1 ~ 3% を表す値に設定します。
キャッシュのクリーン・アップの構成
キャッシュ・クリーン・アップ・パラメータにより、ファイル・システム・キャッシュの検
査と、必要な場合のクリーン・アップの頻度が決定されます。キャッシュ・クリーン・アッ
プ・パラメータ PlsqlCacheCleanupTime は、cache.conf ファイル内で指定します。頻
度は、日次、週次または月次に設定できます。週次クリーン・アップを指定した場合は、曜
日と時刻を指定できます。
PlsqlCacheCleanupTime のデフォルトの mod_plsql 設定は日次(ローカル時間で午後 11
時)です。そのため、デフォルトでは毎晩午後 11 時にクリーン・アップ・ルーチンが実行さ
れます。月次の頻度を選択すると、クリーン・アップは各月の第 1 土曜日に実行されます。
クリーン・アップ頻度が高すぎるとキャッシュ・ヒット率が低下し、頻度が低すぎると
キャッシュのディスク使用率が過剰に高くなる可能性があるため、このパラメータを正しく
設定することが重要です。
mod_plsql の error_log のエントリを使用してクリーン・アップ・アクティビティを監視
し、各エントリを分析してクリーン・アップ・パラメータ PlsqlCacheCleanupTime を
チューニングします。
[info] mod_plsql: cachecleanup deleted=2571 max_age=96,2178852b
time=128s limit=25600000b
kept=1042,25585368b
次の事項に注意してください。
■
■
クリーン・アップ所要時間が長すぎる場合は、クリーン・アップ頻度の設定値が小さす
ぎることを示している可能性があります。クリーン・アップ操作が多数のキャッシュ・
ファイルの検査や削除でビジー状態になっていることをログが示している場合、クリー
ン・アップ頻度を高くすると、クリーン・アップ操作の所要時間が短縮されます。
陳腐化が原因でクリーン・アップ操作中に多数のファイルが削除される場合は、クリー
ン・アップ頻度が低すぎることを示しています。この場合は、陳腐化したキャッシュ・
コンテンツをクリーン・アップによりアクティブかつ頻繁に削除できるように、頻度を
高くしてください。
4-32 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
Oracle HTTP Server のディレクティブ
Oracle HTTP Server のディレクティブ
Oracle HTTP Server での PL/SQL パフォーマンスを改善するには、Oracle HTTP Server
ディレクティブを構成にあわせて適切にチューニングする必要があります。
関連項目 : 『Oracle HTTP Server 管理者ガイド』
PL/SQL パフォーマンスの最適化
4-33
Oracle HTTP Server のディレクティブ
4-34 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
A
よくある質問
■
mod_plsql とはなんですか ?
■
PL/SQL Web Toolkit とはなんですか ?
■
mod_plsql のリリースを確認するにはどうすればよいですか ?
■
OWA パッケージのリリースを確認するにはどうすればよいですか ?
■
OWA パッケージをインストールするにはどうすればよいですか ?
■
OWA パッケージをアンインストールするにはどうすればよいですか ?
■
■
■
■
データベースに重複してインストールされている OWA パッケージを検出してクリー
ン・アップするには、どうすればよいですか ?
mod_plsql を介して PL/SQL プロシージャにアクセス中に HTTP エラー・コードが戻さ
れます。
すべての独自 PL/SQL プロシージャで、Netscape では「ドキュメントにデータが含まれ
ていません」というエラー、Internet Explorer では空白ページが戻されます。
PL/SQL プロシージャのパフォーマンスは高いのですが、mod_plsql を介した一部の
HTTP リクエストに 15 秒以上かかることがあります。
■
mod_plsql を使用して独自データベース上でアプリケーションを実行できますか ?
■
mod_plsql 用の DAD を作成するにはどうすればよいですか ?
■
mod_plsql ではどのような認証モードを使用できますか ?
■
mod_plsql クリーン・アップ・スレッドとはなんですか ?
■
mod_plsql には、どのような種類のデータベース接続プーリング機能がありますか ?
■
■
mod_plsql ではどのようにしてデータベース・セッションがクリーン・アップされます
か?
プールされたデータベース接続が mod_plsql に存在するときに、データベースを再起動
するとどうなりますか ?
よくある質問
A-1
■
mod_plsql ではファイル・システム内でキャッシュされたコンテンツがどのようにク
リーン・アップされますか ?
■
URL に接頭辞 /pls を付けずに mod_plsql を起動できますか ?
■
PL/SQL と mod_plsql のパフォーマンスを改善するにはどうすればよいですか ?
■
mod_plsql ではどのような種類のロギング機能を使用できますか ?
■
mod_plsql には高可用性についてどのような考慮事項がありますか ?
■
■
■
■
データベースがファイアウォールで分離されている場合、mod_plsql ではどのような考
慮事項がありますか ?
PL/SQL アプリケーションに対して異なるホスト名、ポートまたは request_protocol を
アサートするには、どうすればよいですか ?
特定のパターンを持つプロシージャ名へのアクセスを無効化するにはどうすればよいで
すか ?
ファイル ORACLE_HOME/Apache/Apache/conf/error_log にエラー HTTP-503
ORA-12154 があります。これは何を意味しますか ?
A-2 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
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/Apache/Apache/bin/oversioncheck ORACLE_HOME/Apache/modplsql/bin/modplsql.so
Windows プラットフォームでは、次のコマンドを発行します。
ORACLE_HOME¥Apache¥Apache¥bin¥oversioncheck ORACLE_HOME¥bin¥modplsql.dll
OWA パッケージのリリースを確認するにはどうすればよいですか ?
1.
SQL*Plus を使用し、任意のユーザーとしてデータベースに接続します。
2.
次のコマンドを実行します。
select owa_util.get_version from dual;
OWA パッケージのリリースが表示されます。たとえば、9.0.4.0.1 などです。
この問合せに失敗した場合は、OWA パッケージのリリースが古すぎるためにバージョニン
グ機能がありません。新しいリリースにアップグレードすることをお薦めします。
OWA パッケージをインストールするにはどうすればよいですか ?
詳細は、2-2 ページの「必須パッケージのインストール」を参照してください。
よくある質問
A-3
OWA パッケージをアンインストールするにはどうすればよいですか ?
次のタスクを実行すると、OWA パッケージをアンインストールできます。
1.
OWA パッケージのインストール元ディレクトリにナビゲートします。たとえば、次の
ようになります。
cd ORACLE_HOME/Apache/modplsql
2.
SQL*Plus を使用し、OWA パッケージに所有者として接続します。OWA パッケージの
旧バージョンがある場合を除き、ここでは SYS ユーザーを使用する必要があります。
3.
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
----SYS
SYS
PUBLIC
OBJECT_TYPE
----------PACKAGE
PACKAGE BODY
SYNONYM
この SQL 問合せよりも多数の行が表示される場合は、他のスキーマに古い OWA パッケー
ジが存在し、それが mod_plsql ユーザーにとって問題になっている可能性があることを意味
します。この場合は、すべてのバージョンの OWA パッケージをデータベースからアンイン
ストールし、この製品とともに出荷される OWA パッケージを再インストールします。
mod_plsql を介して PL/SQL プロシージャにアクセス中に HTTP エラー・
コードが戻されます。
mod_plsql では、OHS ファイルの ORACLE_HOME/Apache/Apache/logs/error_log に
詳細なエラー・メッセージが記録されます。このファイルをスキャンして問題を把握してく
ださい。mod_plsql のロギングの詳細は、「mod_plsql ではどのような種類のロギング機能
を使用できますか ?」を参照してください。
A-4 Oracle HTTP Server 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 パラメータが一致することを確認します。
mod_plsql を使用して独自データベース上でアプリケーションを実行でき
ますか ?
はい。ただし、アプリケーションを実行する前に、データベースに OWA パッケージをイン
ストールする必要があります。2-2 ページの「必須パッケージのインストール」を参照してく
ださい。
mod_plsql 用の DAD を作成するにはどうすればよいですか ?
『Oracle HTTP Server 管理者ガイド』の mod_plsql の項を参照してください。
mod_plsql ではどのような認証モードを使用できますか ?
第 3 章「mod_plsql を使用したアプリケーション・データベース・アクセスの保護」を参照
してください。
mod_plsql クリーン・アップ・スレッドとはなんですか ?
mod_plsql は、各 httpd プロセスでスレッドを起動します。このスレッドのジョブは、アイ
ドル状態のデータベース・セッションとファイル・システムのキャッシュをクリーン・アッ
プすることです。このスレッドをクリーン・アップ・スレッド
クリーン・アップ・スレッドと呼びます。
クリーン・アップ・スレッド
mod_plsql には、どのような種類のデータベース接続プーリング機能が
ありますか ?
第 4 章「PL/SQL パフォーマンスの最適化」を参照してください。
よくある質問
A-5
mod_plsql ではどのようにしてデータベース・セッションがクリーン・
アップされますか ?
mod_plsql では、PlsqlIdleSessionCleanupInterval の構成設定に基づいて、使用されていない
データベース・セッションがクリーン・アップされます。また、プールされたデータベー
ス・セッションから提供されるリクエストの数は、設定ディレクティブ
PlsqlMaxRequestsPerSession により制御されます。httpd プロセスがシャットダウンされると、
データベース・セッションがクローズされます。
プールされたデータベース接続が mod_plsql に存在するときに、データ
ベースを再起動するとどうなりますか ?
データベース接続が中断されると、中断された接続を使用して PL/SQL プロシージャの実行
を試行する最初のリクエストは失敗します。以降のリクエストでは、データベース・セッ
ションが再確立され、通常どおりに機能が起動されます。失敗回数は、プールされたデータ
ベース・セッションの数に正比例します。mod_plsql の将来のバージョンでは、停止中の接
続が自動的に検出されます。
注意 : PlsqlIdleSessionCleanupInterval の時間隔内にデータベースが再起動
されないと、クリーン・アップ・スレッドは中断されたセッションをク
リーン・アップします。エンド・ユーザーにエラーは表示されません。
mod_plsql ではファイル・システム内でキャッシュされたコンテンツが
どのようにクリーン・アップされますか ?
クリーン・アップ・スレッドは、PlsqlCacheCleanupTime の設定に基づいてファイル・システ
ム・キャッシュをスキャンします。デフォルトのクリーン・アップ時刻は、現地時間で毎日
午後 11 時です。
URL に接頭辞 /pls を付けずに mod_plsql を起動できますか ?
はい。mod_plsql は OHS の Location ディレクティブを使用するため、mod_plsql で処理さ
れるように任意の仮想パスを設定できます。
PL/SQL と mod_plsql のパフォーマンスを改善するにはどうすればよいで
すか ?
第 4 章「PL/SQL パフォーマンスの最適化」を参照してください。
A-6 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
mod_plsql ではどのような種類のロギング機能を使用できますか ?
■
■
mod_plsql では、デフォルトで OHS error_log ファイルの
ORACLE_HOME/Apache/Apache/logs/error_log にアラート、警告またはエラーが
記録されます。mod_plsql で記録される情報の量は、OHS の httpd.conf の LogLevel
パラメータ設定で制御されます。デフォルトでは、このパラメータは warn に設定され
ます。
また、次の手順に従って、mod_plsql のパフォーマンス・ロギングをリクエストごとに
有効化することもできます。
1.
2.
ORACLE_HOME/Apache/Apache/conf/httpd.conf を編集し、LogLevel を info
(デフォルトは warn)に設定します。
次のコマンドを使用して OHS を再起動します。
ORACLE_HOME/opmn/bin/opmnctl restartproc type=ohs
3.
mod_plsql に対してなんらかの URL を発行し、
ファイル ORACLE_HOME/Apache/Apache/logs/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 HTTP Server の error_log ファイル
に記録され、さらに mod_plsql 固有のログが
ORACLE_HOME/Apache/modplsql/logs に作成されます。ログの位置は、
ORACLE_HOME/Apache/modplsql/conf/plsql.conf 内で PlsqlLogDirectory ディレ
クティブを使用して設定可能です。デバッグ・レベルのロギングを有効化する手順は、
次のとおりです。
よくある質問
A-7
1.
ORACLE_HOME/Apache/modplsql/conf/plsql.conf を編集し、PlsqlLogEnable
を On(デフォルトは Off)に設定します。
2.
次のコマンドを使用して OHS を再起動します。
ORACLE_HOME/opmn/bin/opmnctl restartproc type=ohs
mod_plsql には高可用性についてどのような考慮事項がありますか ?
高可用性のために、mod_plsql ベースのアプリケーションでは次のことを認識する必要があ
ります。
■
■
mod_plsql 設定パラメータ PlsqlDatabaseConnectString には、Oracle Internet Directory の
LDAP 検索を介して名前解決が発生するように、接続文字列形式の
NetServiceNameFormat を使用する必要があります。これにより、データベースの
host:port:service_name 情報を中央のリポジトリで設定でき、必要に応じた RAC ノードの
追加または削除が容易になります。
mod_plsql では、停止中のデータベース接続は自動的に検出されません。バックエン
ド・データベースが停止すると、最初の少数のリクエストは失敗します。詳細は、
「プールされたデータベース接続が mod_plsql に存在するときに、データベースを再起
動するとどうなりますか ?」を参照してください。
データベースがファイアウォールで分離されている場合、mod_plsql
では
データベースがファイアウォールで分離されている場合、
どのような考慮事項がありますか ?
mod_plsql を実行する中間層とバックエンド・データベースの間にファイアウォールが存在
する場合は、mod_plsql でアイドル・セッションのクリーン・アップ間隔を、ファイア
ウォールでの間隔よりも短く設定する必要があります。これにより、mod_plsql が確立した
接続をファイアウォールがクローズすることはなくなります。
注意 : mod_plsql のアイドル・セッション・クリーン・アップ間隔は、
ORACLE_HOME/Apache/modplsql/conf/plsql.conf 内のパラメータ
PlsqlIdleSessionCleanupInterval を使用して設定できます。デフォルト値は
15 分です。
A-8 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
PL/SQL アプリケーションに対して異なるホスト名、ポートまたは
request_protocol をアサートするには、どうすればよいですか ?
■
OHS インスタンスの手前に Web Cache またはロード・バランシング・ルーターが存在
する場合は、サイトのホスト名とポートを Web Cache または LBR のホスト名および
ポートとしてアサートする必要があります。このような場合は、OHS 設定ディレク
ティブ ServerName および Port を使用してアサートすることをお薦めします。なんらか
の理由でホスト名とポートを OHS レベルでアサートしない場合は、mod_plsql 設定
ディレクティブ PlsqlCGIEnvironmentList を使用して、mod_plsql で実行中の PL/SQL
アプリケーションに対してのみ異なるホスト名とポートをアサートできます。たとえ
ば、次のようになります。
■
PlsqlCGIEnvironmentList SERVER_NAME=lbr.us.oracle.com
かわりに OHS の httpd.conf 内の ServerName ディレクティブを使用することを
考慮してください。
■
PlsqlCGIEnvironmentList
SERVER_PORT=9999
かわりに OHS の 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
特定のパターンを持つプロシージャ名へのアクセスを無効化するにはどうす
ればよいですか ?
3-5 ページの「mod_plsql での PlsqlExclusionList ディレクティブの使用」の
PlsqlExclusionList の説明を参照してください。
ファイル ORACLE_HOME/Apache/Apache/conf/error_log にエラー
HTTP-503 ORA-12154 があります。これは何を意味しますか ?
このエラーは、mod_plsql からデータベースに接続できないことを意味します。
次のことを確認してください。
1.
データベースが稼働中であること。
2.
DAD に指定されているユーザー名およびパスワード情報が正しいこと。
よくある質問
A-9
3.
中間層が、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 のマニュアル
を参照してください。
A-10 Oracle HTTP Server mod_plsql ユーザーズ・ガイド
索引
記号
E
! 記号
柔軟なパラメータの受渡し,1-10
定義,1-4
Expires キャッシュ・テクニック,4-21
数字
GET メソッド,1-6
2 パラメータ
柔軟なパラメータの受渡し,1-10
4 パラメータ
柔軟なパラメータの受渡し,1-11
B
BLOB
ダイレクト・ダウンロード,1-22
ドキュメント表の定義,1-13
C
CGI
環境変数,1-25
CONTENT_TYPE 列,1-14
CONTENT 列,1-14
Cookie の制限,1-27
D
DAD
作成,2-5
定義,1-3
DAD_CHARSET 列,1-14
DTD,1-13
以前のスタイル,1-15
G
H
HEAD メソッド,1-6
HTTP HEAD リクエスト,1-6
httpd
HTTP サーバー・プロセス,4-5
httpd.conf
ディレクティブ
MaxSpareServers,4-13
MinSpareServers,4-13
StartServers,4-13
HTTP サーバー
httpd プロセス,4-5
K
KeepAlive httpd.conf ディレクティブ,4-33
L
LAST_UPDATED 列,1-14
LONG RAW
ドキュメント表の定義,1-13
索引 -1
M
か
MIME タイプ,1-20
mod_expires,4-33
mod_plsql
実行,1-4
環境変数
CGI,1-24
N
nls_lang
定義,1-26
O
き
キャッシュ
Expires テクニック,4-21
owa_cache パッケージ,4-25
検証テクニック,4-17
システムレベル,4-24
ユーザーレベル,4-24
owa_cache パッケージ,4-25
owa_util PL/SQL Web Toolkit パッケージ,1-24
owaload.sql,2-2
く
P
け
PL/SQL Web Toolkit のファンクション,4-25
PL/SQL アプリケーション
DAD の作成,2-5
POST メソッド,1-6
言語パラメータ(nls_lang),1-26
検証キャッシュ
mod_plsql,4-19
テクニック,4-17
R
さ
REQUEST_CHARSET,1-26
REQUEST_IANA_CHARSET,1-26
作成
DAD,2-5
W
し
Web Toolkit,4-25
システムレベル・キャッシュ,4-24
あ
せ
アップロード,1-12
制限,1-27
え
た
エンティティ・タグ・キャッシュ・メソッド,4-18
ダイレクト・アクセス URL,1-23
ダウンロード,1-12
お
オーバーロード,1-8,1-9
索引 -2
クライアント・リクエスト,1-2
ち
チューニング
Expires キャッシュ・テクニック,4-21
検証キャッシュ,4-19
システムレベル・キャッシュ,4-24
と
ドキュメント・アクセス・パス,1-16
ドキュメント表の定義,1-13
以前のスタイル,1-15
トランザクション・モデル,1-7
は
配列,1-9
パフォーマンス
チューニング
Expires キャッシュ,4-21
mod_expires,4-33
検証キャッシュ,4-19
システムレベル・キャッシュ,4-24
パラメータ
MaxClients,4-7
MaxRequestsPerChild,4-7
MaxSpareServers,4-7
MinSpareServers,4-7
PlsqlIdleSessionCleanupInterval,4-7
PlsqlMaxRequestsPerSession,4-7
受渡し,1-7,1-10
大きな,1-12
オーバーロード,1-8
柔軟な,1-10
ふ
ファイルのアップロード,1-12,1-18
属性,1-20
複数のファイル,1-20
ファイルのダウンロード,1-21
ゆ
ユーザーレベル・キャッシュ,4-24
索引 -3
索引 -4
Fly UP