Налаштування під час виконання

Поведінка цих функцій залежить від установок у php.ini.

Параметри конфігурації OCI8

ИмяПо умолчаниюМесто измененияСписок изменений
oci8.connection_class""INI_ALL
oci8.default_prefetch"100"INI_SYSTEM
oci8.eventsOffINI_SYSTEM
oci8.max_persistent"-1"INI_SYSTEMОголошена застарілою починаючи з PHP 8.1.0.
oci8.old_oci_close_semanticsOffINI_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_connectOffINI_SYSTEM
oci8.statement_cache_size"20"INI_SYSTEM

Коротке пояснення конфігураційних директив.

oci8.connection_classstring

Цей текст, що визначається користувачем, обов'язково повинен бути заданий при використанні резидентного пулу з'єднань бази даних 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_prefetchint

Ця опція встановлює значення за замовчуванням для кількості екстра рядів, які будуть повернуті та автоматично закешовані за низькорівневого запиту даних з бази даних. Встановлення значення в вимикає попередню вибірку (prefetching).

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

Значення може бути встановлене окремо для кожного виразу (per-statement) за допомогою oci_set_prefetch() до виконання самого виразу.

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

Зауваження: Велика попередня вибірка може покращити продуктивність за рахунок деякого збільшеного використання пам'яті. Для запитів, що повертають великі масиви даних, вигода у продуктивності буде значною.

oci8.eventsbool

Включення (On) дозволяє повідомити PHP про події Швидкого Повідомлення Додатків бази даних (FAN).

Без FAN, якщо екземпляр бази даних або вузол машини несподівано дасть збій, PHP програми можуть бути заблоковані, очікуючи на відповідь від бази даних до перевищення часу очікування TCP. За допомогою подій FAN PHP програми швидко будуть повідомлені про збої, які впливають на встановлені ними з'єднання до бази даних. Модуль OCI8 підчистить з'єднання, що не використовуються, в кеші постійних з'єднань.

При використанні директиви (On), база даних також має бути налаштована на відправку FAN подій.

Підтримка FAN доступна, якщо OCI8 була злінкована з бібліотеками Oracle 10gR2 (або пізнішими) та з'єднання було здійснено до Oracle Database 10gR2 (або пізнішої версії).

oci8.max_persistentint

Максимальна кількість постійних з'єднань OCI8 на один процес PHP. Встановлення цієї опції -1 означає відсутність ліміту.

oci8.old_oci_close_semanticsbool

Ця опція контролює поведінку функції oci_close(). Її включення означає, що oci_close() не робить нічого; з'єднання не буде закрито, доки не закінчиться виконання скрипту. Це зроблено лише з метою зворотної сумісності. Якщо ви відчуваєте потребу в цьому налаштуванні, суворо рекомендується налаштувати виклики oci_close() у ваших скриптах замість увімкнення цієї опції.

oci8.persistent_timeoutint

Максимальна кількість секунд, що дозволяється PHP-процесу тримати постійне з'єднання, що не використовується, відкритим. Встановлення цієї опції в -1 означає, що з'єднання, що не використовуються, будуть утримані, поки PHP-процес не завершить своє виконання або з'єднання не буде примусово закрито за допомогою функції oci_close()

Зауваження: У PHP закінчення терміну дії ресурсів, що не використовуються, не засноване на повідомленнях. Воно відбувається коли PHP завершує обробку скрипта і перевіряє позначку часу останніх використаних ресурсів. Звідси виникає наступний парадокс: з'єднання, що не використовуються, можуть бути закриті тільки коли є деяка активність (хоча і не обов'язково пов'язана з OCI8) в PHP-процесі. Якщо є більше одного PHP-процесу, то кожен з них окремо повинен бути приведений в дію для того, щоб ініціювати закінчення терміну дії ресурсів, що простоюють. Введення резидентного пулу з'єднань бази даних (DRCP) у Oracle 11g вирішує проблеми з пам'яттю та ресурсами, які раніше намагалися вирішити oci8.max_persistentиoci8.persistent_timeout

oci8.ping_intervalint

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

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

oci8.prefetch_lob_sizeint

Параметр налаштування, що впливає на внутрішню буферизацію даних LOB. Збільшення цього значення може покращити продуктивність вибірки менших LOB за рахунок скорочення кругових обходів між PHP та базою даних. Використання пам'яті зміниться.

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

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

Зауваження: Використовуйте з Oracle Database 12.2 або новіше.

oci8.privileged_connectbool

Ця опція дозволяє з'єднанням використовувати привілейовані зовнішні облікові записи OCI_SYSOPER або OCI_SYSDBA

Зауваження: Встановлення цієї директиви в On дозволить скриптам, запущеним з відповідними користувальницькими привілеями операційної системи, з'єднуватися з базою даних як привілейовані користувачі бази даних без вимог пароля. Це може бути брехнею системи безпеки.

oci8.statement_cache_sizeint

Ця опція включає кешування виразів, а також вказує, скільки виразів необхідно кешувати. Для відключення кешування виразів просто встановіть значення цієї опції 0.

Кешування виразів прибирає необхідність передавати текст виразу до бази даних, а також зворотну передачу різних метаданих про це вираз назад до PHP. Це може значно покращити загальну продуктивність системи у додатках, які повторно використовують вирази протягом життя однієї сполуки. Деякі додаткові "курсори" баз даних можуть залишитися відкритими, маючи на увазі, що дані вирази будуть використані повторно.

Встановіть це значення розміром робочого набору виразів, що використовуються вашою програмою. Встановлення занадто малого значення може спричинити викид виразів з кешу до їх повторного використання.

Ця опція найчастіше використовується із постійними з'єднаннями.

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