## 実行時設定

php.ini の設定により動作が変化します。

OCI8 設定オプション
名前 | デフォルト | 変更可能 | 変更履歴
--- | --- | --- | ---
oci8.connection_class | "" | PHP_INI_ALL | PHP 5.3 以降で使用可能 (PECL OCI8 1.3)
oci8.default_prefetch | "100" | PHP_INI_SYSTEM | PHP 5.1.2 以降で使用可能 (PECL OCI8 1.1)
oci8.events | Off | PHP_INI_SYSTEM | PHP 5.3 以降で使用可能 (PECL OCI8 1.3)
oci8.max_persistent | "-1" | PHP_INI_SYSTEM | PHP 5.1.2 以降で使用可能 (PECL OCI8 1.1)
oci8.old_oci_close_semantics | Off | PHP_INI_SYSTEM | PHP 5.1.2 以降で使用可能 (PECL OCI8 1.1)
oci8.persistent_timeout | "-1" | PHP_INI_SYSTEM | PHP 5.1.2 以降で使用可能 (PECL OCI8 1.1)
oci8.ping_interval | "60" | PHP_INI_SYSTEM | PHP 5.1.2 以降で使用可能 (PECL OCI8 1.1)
oci8.privileged_connect | Off | PHP_INI_SYSTEM | PHP 5.1.2 以降で使用可能 (PECL OCI8 1.1)
oci8.statement_cache_size | "20" | PHP_INI_SYSTEM | PHP 5.1.2 以降で使用可能 (PECL OCI8 1.1)

以下に設定ディレクティブに関する 簡単な説明を示します。

`oci8.connection_class` string

  このユーザー定義テキストは、接続プールの下位区画への Oracle 11g データベース常駐接続プーリング (DRCP) 接続によって使用されます。 これにより、アプリケーションによる OCI8 持続的接続で、 前の PHP スクリプト由来のデータベース・セッションを再利用できます。 その結果、より良い拡張性が得られます。 異なる接続クラスで以前に使用された処理をプールしたデータベースをアプリケーションで使用する際に、 既定の Oracle 日付フォーマットのようなセッション設定はリセットされます。 これにより、異なるアプリケーションの間で情報を思いがけずに共有することを防ぎます。

  接続する前に、 ini_set() で実行時に 値を設定できます。

  DRCP を使用するには、 OCI8 は Oracle 11g ライブラリとリンクされ、 データベースは Oracle 11g でなければいけません。 接続プールはデータベース内で有効にしなければいけません。 oci8.connection_class は、 同一のアプリケーションを稼動する web サーバーの全てで同じ文字列を設定しなければいけません。 そして、 OCI8 接続文字列 はプールされたサーバーを使用することを指定しなければいけません。

`oci8.default_prefetch` int

  このオプションは、データベースからのデータに対する低レベルの 要求が作成されたときにいつでも自動的にフェッチされ、キャッシュ されるデフォルトの追加行数を設定します。 プリフェッチを無効にするには、値を 0 に 設定します。

  プリフェッチ値は、 oci_fetch_array() のような関数がユーザーに返す行数を変えません。 行のプリフェッチ及びキャッシングは OCI8 の内部で取り扱われます。

  その値は、ステートメント実行の前に oci_set_prefetch() でステートメントごとに設定できます。

  PHP 5.3 (PECL OCI8 1.3.4) で既定値が 10 から 100 に増やされました。

  PHP 5.3.2 (PECL OCI8 1.4) では、設定可能な最小値が 1 から 0 に減らされました。 これにより、プリフェッチをオフにできます。

  Oracle Database 12c では、PHP で設定したプリフェッチの値を Oracle のクライアント設定ファイル oraaccess.xml で上書きできます。 詳細は、Oracle のドキュメントを参照ください。

  > 注意: プリフェッチをより大きくすると、メモリ使用量の増加と引き替えに パフォーマンスの改善につながります。 大量のデータを返す照会に対しては、パフォーマンスの利点は重要な意義を持てます。

`oci8.events` boolean

  On を使うと、 PHP でデータベースの Fast Application Notification (FAN) イベントが通知されます。

  FAN 無しでは、データベース・インスタンスやマシン・ノードが予期せず故障した際、 PHP アプリケーションは、 TCP タイムアウトの満期になるまでデータペースのレスポンスを待って ブロックされてしまうかもしれません。 FAN イベントにより、確立したデータベース接続に影響する故障が PHP アプリケーションに素早く通知されます。 OCI8 エクステンションでは、 持続的接続キャッシュ内の利用されていない接続をクリーンアップします。

  On を使う際は、 FAN イベントをポストするように データベースも構成しなければいけません。

  FAN サポートは、 OCI8 が Oracle 10gR2 以降のライブラリとリンクされ、 Oracle データベース 10gR2 以降に接続する場合に利用できます。

`oci8.max_persistent` int

  PHP プロセスあたりの持続的な OCI8 接続の最大値を指定します。 このオプションを -1 に設定することは、制限なしを意味します。

`oci8.old_oci_close_semantics` boolean

  このオプションは oci_close() の動作を制御します。有効にすると、oci_close() は何も行いません。接続はスクリプトの終了まで閉じられません。 これは後方互換性のためのみに存在しています。 この設定を有効にする必要があると判明した場合、 このオプションを有効にする代わりに、 アプリケーションで oci_close() を調整することが 強く推奨されます。

`oci8.persistent_timeout` int

  アイドル状態の持続的接続を PHP プロセスが開いたままにする最大秒数 を指定します。 このオプションを -1 に設定すると、 PHP 処理が終了するか、または 接続が oci_close() で明示的に終了されるまで、 アイドル状態の持続的接続が保持されます。

  > 注意: PHP では、アイドル状態のリソースの消滅は、警報ベースではありません。 PHP がスクリプト処理を終了して、リソースの最終使用タイムスタンプをチェックする際に発生します。 そのため、 (OCI8 関係に限らず) PHP 処理内で何らかの活動がある場合にのみ、 アイドル状態の接続が閉じられるというパラドックスがあります。 PHP のプロセスが複数ある場合は、 それぞれを個別にアクティブにしないと アイドル状態のリソースを消すことができません。 Oracle 11g でデータベース常駐接続プーリング (DRCP) が導入されたことにより、 oci8.max_persistent や oci8.persistent_timeout が以前に克服しようとしたメモリ及びリソースの問題が解決されます。

  > 注意: PHP 5.3 (PECL OCI8 1.3) では、持続的接続は oci_close() で閉じることができます。

`oci8.ping_interval` int

  oci_pconnect() の間、ping を発行するまでに経過させる秒数を指定します。 ping はデータベース接続が有効か確認します。 0 に設定した場合、持続的接続は oci_pconnect() が 呼び出される度に ping を発行します。 ping を完全に無効にするためには、このオプションを -1 に設定します。

  > 注意: ping を無効にすることにより oci_pconnect() は最高の効率で処理できますが、ネットワークの脱落や PHP が接続した後に Oracle データベースがダウンした場合、 その後のスクリプトで接続が使われるまで 利用できない接続を PHP は検出できないでしょう。 詳細な情報は oci_pconnect() を参照ください。

`oci8.privileged_connect` boolean

  このオプションにより特権のある外部の信用 (`OCI_SYSOPER`, `OCI_SYSDBA`) を利用して接続できます。

  > 注意: これを On に設定することにより、 適切な OS ユーザー権限で稼動している Web サーバー上のスクリプトで データベースのパスワードを必要とせずに、 特権を持つデータベース・ユーザーとして接続できます。 これはセキュリティーのリスクになりえます。

`oci8.statement_cache_size` int

  このオプションはステートメントキャッシュを有効にします。 また、キャッシュするステートメントの数を指定します。 ステートメントキャッシュを無効にする場合、このオプションを 0 に設定してください。

  ステートメントキャッシングにより、 ステートメント・テキストをデータベースに渡したり、 ステートメントに関するあらゆるメタデータを PHP に戻したりする必要性がなくなります。 これにより、接続の有効期間中、ステートメントを再利用するアプリケーションで、 全体的なシステム・パフォーマンスを大幅に向上させられます。 一部の特別なデータベース "カーソル" では、 ステートメントが再利用されるであろうという仮定の下に、 開いたまま保たれるかもしれません。

  アプリケーションで使用されるステートメントのワーキングセットのサイズに この値を設定します。小さすぎる値を設定すると、 それらが再利用される前にキャッシュからステートメントがフラッシュされる結果になります。

  このオプションは、持続的接続の利用の多くの場合に役立ちます。

  Oracle Database 12c では、 この値はOracle クライアントの oraaccess.xml で自動的に設定されます。 詳細は、Oracle のドキュメントを参照ください。