## Configuración en tiempo de ejecución

El comportamiento de estas funciones se ve afectado por la configuración de php.ini.

Opciones de configuración de OCI8
Nombre | Por defecto | Cambiable | Historial de cambios
--- | --- | --- | ---
oci8.connection_class | "" | `INI_ALL` | Disponible desde PECL OCI8 1.3.
oci8.default_prefetch | "100" | `INI_SYSTEM` | Disponible desde PECL OCI8 1.1.
oci8.events | Off | `INI_SYSTEM` | Disponible desde PECL OCI8 1.3.
oci8.max_persistent | "-1" | `INI_SYSTEM` | Disponible desde PECL OCI8 1.1.
oci8.old_oci_close_semantics | Off | `INI_SYSTEM` | Disponible desde PECL OCI8 1.1.
oci8.persistent_timeout | "-1" | `INI_SYSTEM` | Disponible desde PECL OCI8 1.1.
oci8.ping_interval | "60" | `INI_SYSTEM` | Disponible desde PECL OCI8 1.1.
oci8.prefetch_lob_size | "0" | `INI_SYSTEM` | Disponible desde PECL OCI8 3.2.
oci8.privileged_connect | Off | `INI_SYSTEM` | Disponible desde PECL OCI8 1.1.
oci8.statement_cache_size | "20" | `INI_SYSTEM` | Disponible desde PECL OCI8 1.1.

He aquí una breve explicación de las directivas de configuración.

`oci8.connection_class` string

  Este texto definido por el usuario es utilizado por las conexiones de Oracle 11g Database Resident Connection Pooling (DRCP) para subparticionar la agrupación de conexiones. Permite conexiones persistentes de OCI8 desde una aplicación para reutilizar las sesiones de la base de datos de un script anterior de PHP, proporcionando una mejor escalabilidad. Cuando una aplicación usa un proceso de una agrupación de una base de datos anteriormente usado con una clase de conexión diferente, las configuraciones de sesión, tales como el formato de fecha predeterminado de Oracle, son reiniciadas. Esto previene de la compartición accidental de información entre diferentes aplicaciones.

  El valor puede establecerse en tiempo de ejecución con ini_set() entes de la conexión.

  Para usar DRCP, OCI8 debe vincularse con las bibliotecas de Oracle 11g, y la base de datos debe ser Oracle 11g. La agrupación de conexiones debe habilitarse en la base de datos, `oci8.connection_class` debería establecerse a la misma cadena para todos los servidores web que ejecuten la misma aplicación, y la cadena de conexión de OCI8 debe especificar el suo de un servidor de la agrupación.

`oci8.default_prefetch` int

  Esta opción establece el número predeterminado de filas extra que se obtendrán y almacenarán en caché automáticamente siempre que se haga una petición de bajo nivel para datos de la base de datos. Establecer un valor de `0` desactiva la precarga.

  El valor de la precarga no altera el número de filas que son devueltas al usuario por funciones como oci_fetch_array(); la precarga y el almacenamiento en caché de filas son manejados internamente por OCI8.

  El valor puede ser establecido para cada sentencia con oci_set_prefetch() antes de la ejecución de dicha sentencia.

  En PHP 5.3 (PECL OCI8 1.3.4), el valor predeterminado estaba aumentado desde `10` hasta `100`.

  En PHP 5.3.2 (PECL OCI8 1.4), el valor mínimo establecible estaba reducido desde `1` hasta `0`, permitiendo la que precarga se desactivara.

  Al usar Oracle Database 12c, el valor de precarga establecido por PHP puede ser sobrescrito por el fichero de configuración del cliente `oraaccess.xml` de Oracle. Consulte la documentación de Oracle para más detalles.

  > Nota: Un valor de precarga más alto puede mejorar el rendimiento, con el coste del aumento del uso de memoria. Para consultas que devuelven gran cantidad de datos, el beneficio del rendimiento puede ser significativo.

`oci8.events` boolean

  Usar `On` permite que PHP sea informado de los eventos Fast Application Notification (FAN) de la base de datos.

  Sin FAN, cuando una instancia de una base de datos o un nodo de una máquina fallan de forma impredecible, las aplicaciones de PHP podrían bloquearse esperando una respuesta de la base de datos hasta que el tiempo de espera de TCP expire. Con los eventos FAN, las aplicaciones de PHP son informadas rápidamente de fallos que afectan a sus conexiones de bases de datos establecidas. La extensión OCI8 limpiará las conexiones inservibles de la caché de conexiones persistentes.

  Cuando se usa `On`, la base de datos debe también estar configurada para enviar eventos FAN.

  El soporte para FAN está disponible cuando OCI8 está vinculada con la biblioteca de Oracle 10gR2 (o posterior) y conectada con Oracle Database 10gR2 (o posterior).

`oci8.max_persistent` int

  El número máximo de conexiones persistentes de OCI8 por proceso de PHP. Establecer esta opción a -1 significa que no existe límite.

`oci8.old_oci_close_semantics` boolean

  Esta opción controla el comportamiento de oci_close(). Habilitarla significa que oci_close() no hará nada; la conexión no será cerrada hasta que finalice el script. Esto es debido únicamente por razones de retrocompatibilidad. Si fuera necesario habilitar esta opción, se recomienda encarecidamente ajustar las llamadas de oci_close() en la aplicación en lugar de habilitar esta opción.

`oci8.persistent_timeout` int

  El número máximo de segundos que a un proceso de PHP se le permite mantener una conexión persistente inactiva abierta. Establecer esta opción a -1 significa que las conexiones persistentes inactivas serán retenidas hasta que el proceso de PHP finalice o la conexión sea explícitamente cerrada con oci_close().

  > Nota: En PHP, la caducidad de los recursos inactivos no está basada en alarmas. Esto ocurre cuando PHP termina de procesar un script y de comprobar la marca de tiempo del último recurso utilizado. Por lo tanto, existe una paradoja donde las conexiones inactivas solamente son cerradas cuando hay alguna actividad (aunque no necesariamente relacionada con OCI8) en el proceso de PHP. Si hay más de un proceso de PHP, cada uno debe ser activado individualmente para desencadenar la caducidad de sus recursos inactivos. La introducción de Database Resident Connection Pooling (DRCP) en Oracle 11g resuleve los problmas de memoria y de recursos que `oci8.max_persistent` y `oci8.persistent_timeout` intentaron superar anteriormente.

  > Nota: En PHP 5.3 (PECL OCI8 1.3), las conexiones persistentes pueden ser cerradas con oci_close().

`oci8.ping_interval` int

  El número de segundos que deben transcurrir antes de emitir un ping durante la ejecución de oci_pconnect(). Un ping se asegura de que la conexión de la base de datos es válida. Cuando se establece a 0, las conexiones persistentes serán comprobadas cada vez que se llame a oci_pconnect(). Para deshabilitar estas comprobaciones completamente, se ha de establecer esta opción a -1.

  > Nota: La deshabilitación de las comprobaciones permite a oci_pconnect() operar con la mayor eficiencia, aunque PHP podría no ser capaz de detectar conexiones inutilizables, como las causadas por la caída de la red, o si la base de datos de Oracle se ha venido abajo mientras PHP sigue conectado, hasta que la conexión se use después en el script. Consulte la documentación de oci_pconnect() para más información.

`oci8.prefetch_lob_size` int

  Este es un parámetro de ajuste que afecta al almacenamiento interno de los datos LOB. Incrementar este valor puede mejorar el rendimiento en la obtención de LOBs más pequeños al reducir los viajes de ida y vuelta entre PHP y la base de datos. El uso de la memoria cambiará.

  El valor afecta a los LOB devueltos como instancias OCI-Lob y también a los devueltos mediante `OCI_RETURN_LOBS`.

  El valor se puede establecer por instrucción con oci_set_prefetch_lob() antes de la ejecución de la sentencia.

  > Nota: Utilizarlo con Oracle Database 12.2 o posterior.

`oci8.privileged_connect` boolean

  Esta opción permite que las conexiones usen las credenciales privilegiadas externas `OCI_SYSOPER` u `OCI_SYSDBA`.

  > Nota: El establecerla a `On` puede permitir a los scripts de servidores web, ejecutados con los privilegios apropiados del SO, conectarse como usuarios privilegiados de la base de datos sin requerir una contraseña de la misma. Esto puede ser un riesgo para la seguridad.

`oci8.statement_cache_size` int

  Esta opción habilita el almacenamiento en caché de sentencias, y especifica cuántas almacenar. Para deshabilitar dicho almacenamiento se ha de establecer esta opción a 0.

  El almacenamiento en caché de sentencias elimina la necesidad de transmitir el texto de las mismas a la base de datos y la necesidad de volver a transmitir cualquier metadato sobre dichas sententencias a PHP. Esto puede mejorar significativamente el rendimiento global del sistema en aplicaciones que reutilicen sentencias durante el tiempo de vida de una conexión. Algunos "cursores" extra de la base de datos podrían manetenerse abiertos bajo el supuesto de que las sentencias serán reutilizadas.

  Establezca este valor al tamaño del conjunto de trabajo de sentencias usadas por la aplicación. Establcer un valor demasiado pequeño puede causar que se vacíen de la caché dichas sentencias antes de que sean reutilizadas.

  Esta opción se usa mayormente con conexiones persistentes.

  Al usar Oracle Database 12c, este valor puede ser sobrescrito y ajustado automáticamente por el fichero de del cliente `oraaccess.xml` de Oracle. Consulte la documentación de Oracle para más detalles.