## Настройка во время выполнения

Поведение функций зависит от установок в файле 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` | Объявлена устаревшей, начиная с PHP 8.1.0.
oci8.old_oci_close_semantics | Off | `INI_SYSTEM` |
oci8.persistent_timeout | "-1" | `INI_SYSTEM` |
oci8.ping_interval | "60" | `INI_SYSTEM` |
oci8.prefetch_lob_size | "0" | `INI_SYSTEM` | Доступна начиная с версии PECL OCI8 3.2.
oci8.privileged_connect | Off | `INI_SYSTEM` |
oci8.statement_cache_size | "20" | `INI_SYSTEM` |

Краткое разъяснение конфигурационных директив.

`oci8.connection_class` string

  Этот определяемый пользователем текст обязательно должен быть задан при использовании резидентного пула соединений базы данных Oracle (Database Resident Connection Pooling (DRCP)). Это позволяет суб-партиционирование пула соединений DRCP, что позволяет постоянным соединениям OCI8 из приложения заново использовать сессии базы данных от предыдущего PHP-скрипта, улучшая масштабируемость. Если приложение использует процесс из пула базы данных, ранее используемый с другим классом соединений, настройки сессии, такие как формат даты Oracle, будут сброшены. Это предотвращает случайный обмен информацией между различными приложениями.

  Значение может быть установлено во время выполнения скрипта с помощью ini_set() до установки соединения.

  Для использования DRCP, OCI8 должна быть собрана с библиотеками Oracle 11g или новее и база данных должна быть Oracle 11g или новее. Пул соединений DRCP в базе данных должен быть включён, `oci8.connection_class` должно быть установлено в одно и то же строковое значение для всех веб-серверов, выполняющих одно и то же приложение, а строка соединения OCI8 должна указывать на сервер из пула. Приложение должно использовать постоянные соединения.

`oci8.default_prefetch` int

  Эта опция устанавливает значение по умолчанию для количества экстра рядов, которые будут возвращены и автоматически закешированы при низкоуровневом запросе данных из базы данных. Установка значения в `0` выключает предварительную выборку (prefetching).

  Значение предварительной выборки не меняет количество возвращаемых пользователю рядов такими функциями как oci_fetch_array(); OCI8 внутренне обрабатывает предварительную выборку и кеширование рядов.

  Значение может быть установлено отдельно для каждого выражения (per-statement) с помощью 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 Database 10gR2 (или более поздней версии).

`oci8.max_persistent` int

  Максимальное количество постоянных соединений OCI8 на один PHP процесс. Установка этой опции в -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-процесса, то каждый из них в отдельности должен быть приведён в действие для того, чтобы инициировать истечение срока действия простаивающих ресурсов. Введение резидентного пула соединений базы данных (DRCP) в Oracle 11g разрешает проблемы с памятью и ресурсами, которые ранее пытались решить `oci8.max_persistent` и `oci8.persistent_timeout`.

`oci8.ping_interval` int

  Количество секунд, которое должно пройти до совершения пинга в течение выполнения oci_pconnect(). Пинг обеспечивает корректность соединения базы данных. Если установлена в 0, постоянные соединения будут пинговаться при каждом вызове oci_pconnect(). Для полного отключения пингов установите эту опцию в -1.

  > Замечание: Отключение пингов позволяет oci_pconnect() действовать с максимальной эффективностью, но PHP может быть неспособен определить непригодные соединения, например, при обрыве сети или при отключении базы данных Oracle после того, как PHP установил соединение, пока соединение вновь не будет использовано в скрипте. Проконсультируйтесь с документацией функции oci_pconnect() для более подробной информации.

`oci8.prefetch_lob_size` int

  Параметр настройки, влияющий на внутреннюю буферизацию данных LOB. Увеличение этого значения может улучшить производительность выборки меньших LOB за счёт сокращения круговых обходов между PHP и базой данных. Использование памяти изменится.

  Значение влияет на LOB, возвращаемые как экземпляры OCILob, а также на те, которые возвращаются с использованием `OCI_RETURN_LOBS`.

  Значение может быть установлено для каждого оператора с помощью функции oci_set_prefetch_lob() до выполнения оператора.

  > Замечание: Используйте с Oracle Database 12.2 или новее.

`oci8.privileged_connect` bool

  Эта опция позволяет соединениям использовать привилегированные внешние учётные записи `OCI_SYSOPER` или `OCI_SYSDBA`.

  > Замечание: Установка этой директивы в `On` позволит скриптам, запущенных с соответствующими пользовательскими привилегиями операционной системы, соединяться с базой данных в качестве привилегированных пользователей базы данных без требования пароля. Это может быть брешью системы безопасности.

`oci8.statement_cache_size` int

  Эта опция включает кеширование выражений, а также указывает сколько выражений необходимо кешировать. Для отключения кеширования выражений просто установите значение этой опции в 0.

  Кеширование выражений убирает необходимость передавать текст выражения к базе данных, а также обратную передачу различных метаданных об этом выражении обратно к PHP. Это может значительно улучшить общую производительность системы в приложениях, повторно использующих выражения в течение жизни одного соединения. Некоторые дополнительные "курсоры" баз данных могут остаться открытыми, подразумевая, что данные выражения будут использованы повторно.

  Установите это значение размером рабочего набора выражений, используемых вашим приложением. Установка слишком малого значения может повлечь выброс выражений из кеша до их повторного использования.

  Эта опция чаще всего используется с постоянными соединениями.

  При использовании Oracle Database 12c или выше, предварительное значение, заданное PHP, можно переопределить клиентским конфигурационным файлом Oracle `oraaccess.xml`. Обратитесь к документации Oracle.

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