## 実行時設定

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

OCI8 設定オプション
名前 | デフォルト | 変更可能 | 変更履歴
--- | --- | --- | ---
oci8.connection_class | "" | `INI_ALL` |
oci8.default_prefetch | "100" | `INI_SYSTEM` |
oci8.events | Off | `INI_SYSTEM` |
oci8.max_persistent | "-1" | `INI_SYSTEM` |
oci8.old_oci_close_semantics | Off | `INI_SYSTEM` | PHP 8.1.0 以降は非推奨。
oci8.persistent_timeout | "-1" | `INI_SYSTEM` |
oci8.ping_interval | "60" | `INI_SYSTEM` |
oci8.prefetch_lob_size | "0" | `INI_ALL` | PECL OCI8 3.2 以降で利用可能
oci8.privileged_connect | Off | `INI_SYSTEM` |
oci8.statement_cache_size | "20" | `INI_SYSTEM` |

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

`oci8.connection_class` string

  このユーザー定義テキストは、接続プールの下位区画への Oracle データベース常駐接続プーリング (DRCP) 接続によって使用されます。 これにより、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() でステートメントごとに設定できます。

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

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

`oci8.events` bool

  `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` bool

  このオプションは 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` が以前に克服しようとしたメモリ及びリソースの問題が解決されます。

`oci8.ping_interval` int

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

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

`oci8.prefetch_lob_size` int

  これは、LOB データの内部バッファに影響するチューニングパラメータです。 この値を増やすと、PHP とデータベース間の小さな LOB データの読み書きに掛かる時間が減り、パフォーマンスが向上します。 メモリ使用量も変化します。

  この値は、OCILob のインスタンスが返す LOB や、 `OCI_RETURN_LOBS` を使って返される LOB に影響します。

  この値は、ステートメントを実行する前に、 oci_set_prefetch_lob() を使ってステートメント単位で設定できます。

  > 注意: Oracle Database 12.2 以降で利用可能です。

`oci8.privileged_connect` bool

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

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

`oci8.statement_cache_size` int

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

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

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

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

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

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open