ヘッダーをスキップ
Oracle® Database Express Edition 2日でPHP開発者ガイド
11g リリース 2 (11.2)
B66464-01
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

13 アプリケーションのデータベース使用状況の監視

この章のトピックは、次のとおりです。

メタデータの概要

AnyCoアプリケーションの実装では、Oracleのエンドツーエンドのアプリケーション追跡機能のため、メタデータ値を使用してきました。設定された値は次のとおりです。

クライアント識別子には、各エンド・ユーザーに一意に関連付けられる値が格納されています。他の3つの値は実質的に、アプリケーションのタスクに関する降順のデータ階層です。

メタデータ値は半任意のテキスト文字列です。Oracleはメタデータ値を記録しておき、現在オープン中の接続のリスト内など、特定のデータベース機能でそれらを使用できるようにしています。これらの機能をデータベース管理者がどのように使用するのか、および、アプリケーションがどのように設計されているかによって、アプリケーションに設定する値は変わってきます。

AnyCoアプリケーションでは、どのWebユーザーがアプリケーションにログインしたかによって、クライアント識別子をsimonまたはadminに設定しています。クライアント情報は常に'AnyCo Corp.'に設定されます。ac_db.inc.phpCLIENT_INFOを参照してください。モジュールは各ページでDbクラスのインスタンスが作成されるたびに設定されます。選択によっては、モジュール名Equipmentが常に使用されます。これは、このファイル・セットが従業員の備品の操作に関連することを示しています。アクションは実行されたSQL文によって異なります。

メタデータの表示

メタデータ値が使用される箇所を確認するため、AnyCoアプリケーションにログインし、いくつかのページ間をナビゲートします。

Windowsの場合、「スタート」メニューから「プログラム」(または「すべてのプログラム」)、「Oracle Database 11g Express Edition」」、データベース管理ページに移動の順に選択します。

Linuxの場合は、「Application」メニュー(Gnomeの場合)または「K」メニュー(KDEの場合)をクリックし、「Oracle Database 11g Express Edition」データベース管理ページに移動の順にポイントします。セッションページにナビゲートし、SYSTEMユーザーとしてログインします。次が表示されます。

メタデータの表示

複数のエントリが含まれています。Apacheによって多数のプロセスが作成され、どのプロセスも何らかのHTTPリクエストを処理している可能性があります。アプリケーション・ページをナビゲートすると、そのページ・リクエストが別のApacheプロセスによって処理されます。

いずれかのAnyCoセッションのSID番号をクリックしてドリルダウンします。

SID番号に対するデータ

このページではクライアントとアプリケーションの情報も確認できます。

Oracle Database XE管理ツールでは、SQL文とその実行についての統計を確認できます。調整が不十分な文や、頻繁に使用されている文が見つかった場合は、エンドツーエンドの追跡メタデータでソースのPHPファイルを特定できるので、確認と再設計を簡単に行うことができます。文の場合は、各文の最初の実行時の有効なメタデータが、記録されるデータです。

メタデータの正確性は、データベースに接続するアプリケーション内での使用の一貫性に依存します。

クライアント識別子の使用の詳細は、次の技術ドキュメントを参照してください。

http://www.oracle.com/technetwork/articles/dsl/php-web-auditing-171451.html

メタデータのその他の使用

Oracle Database Express Editionの管理ペインは、接続と文の実行に関してOracleデータベースが記録したすべての情報の簡易ビューです。V$SESSIONV$SQLAREAなど、様々な標準データベース管理ビューにも、これらの追跡メタデータが含まれています。問合せを作成したりその他のツールを使用して、この情報を提供できます。

クライアント識別子メタデータはデータ・アクセスを制限するときに使用できます。Oracle Database XEでは、各SQL文を手動で強化して、クライアント識別子をチェックする方法でアクセスを制限できます。

select * from equipment
where sys_context('userenv', 'client_identifier') = 'admin';

別のクライアント識別子のWebユーザーがログインした場合、WHERE条件がfalseに評価され、行は返されません。Administratorのみがデータを表示できます。

OracleデータベースのEnterprise Editionでは、データ・アクセスを自動的に制限するポリシー・ルールの作成が仮想プライベート・データベース機能でサポートされています。そのため、個々のSQL文を変更する必要はありません。監査を有効にした場合は、クライアント識別子は監査ログにも記録されます。

クライアント識別子を使用してセキュリティを施す場合は、アプリケーション・コードの整合性を保つことが重要です。クライアント識別子の欠落や偽装を回避することが不可欠です。

メタデータと永続接続

AnyCoアプリケーションでは、PHPプロセスがスクリプトを処理していなくてもオープン状態を保つPHP OCI8永続接続を使用します。メタデータ値がユーザー・スクリプトの最後でリセットされないため、PHPプロセスとそのデータベース接続がアイドルのときでも、セッションスクリーンでメタデータを確認できます。また、そのPHPプロセスで処理される後続のoci_pconnect()で明示的に再設定されないかぎり、現在の値が有効な値として維持されます。

非永続の接続を使用してoci_connect()またはoci_new_connect()をコールした場合、PHPスクリプトが完了するたびに接続がクローズされてしまうため、このような動作にはなりません。

アイドル時間がほとんどないビジー・システムで、永続接続のメタデータが残ることは通常問題ではありません。データベース管理者にとっての問題領域は、アイドルではないビジーの接続です。メタデータの設定解除を行わないことは、PHPとデータベース間のラウンドトリップを回避できるため、パフォーマンスを最大限に高めることができます。これはシステム全体の速度を下げるため、お薦めしません。しかし、Dbデストラクタに次を追加して、メタデータを強制的にクリアできます。

        $this->stid = oci_parse($this->conn,
                      "begin
                           dbms_session.clear_identifier;
                           dbms_application_info.set_client_info('');
                           dbms_application_info.set_module('', '');
                       end;");
        oci_execute($this->stid);

これを実行する場合は、最初にWebサーバーを再起動して、既存のPHP永続データベース接続をすべてクローズします。

完璧な解決策というものは存在しません。PHPプロセスがクラッシュした場合、値をクリアしたり、データベースに非永続接続をクローズするよう通知したりできません。