Поддержка OCI8 Fast Application Notification (FAN)

Поддержка FAN обеспечивает быстрое переподключение в случае сбоев, что обеспечивает высокую доступность базы данных Oracle. Эта функциональность позволяет PHP OCI8 скрипту получать оповещения в случае если база данных или сервер, на котором она запущена, становятся недлоступны. Без FAN, OCI8 может подвиснуть, пока не будет исчерпан таймаут подключения и возвращена ошибка, что может занять несколько минут. Разрешение FAN в OCI8 позволяет приложениям определять такие ошибки и переподключаться к доступному экземпляру базы данных без ожидания ответа от недоступной базы.

Поддержка FAN доступна если клиентские библиотеки Oracle, с которыми собран PHP, и база данных Oracle имеют версию 10gR2 или более позднюю.

FAN дает приимущества пользователям кластерной технологии Oracle (RAC), так как подключение к доступной базе данных может быть произведено мнгновенно. Пользователи Oracle Data Guard с брокером могут наблюдать события FAN создаваемые при переходе резервной базы в режим основной. Отдельныо установленные экземпляры базы данных будут посылать события FAN при своем перезапуске.

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

Если oci8.events установлено как On, то предполагается, что oci8.ping_interval установлено в значение -1, так как включение событий FAN предоставляет проактивное управление ожидающими соединениями.

Для включения поддержки FAN в PHP OCI8, соберите PHP OCI8 с библиотеками Oracle 10gR2 или более поздними и выполните следующие шаги:

  • Под аккаунтом привилегированного администратора баз данных, с помощью программ типа SQL*Plus разрешите сервису базы отправлять оповещения FAN, к примеру:

        SQL> execute dbms_service.modify_service(
                       SERVICE_NAME        => 'sales',
                       AQ_HA_NOTIFICATIONS => TRUE);
    

  • Добавьте в php.ini

        oci8.events = On
    

  • Если приложение не обрабатывает ошибки соединения OCI8, модифицируйте его таким образом, чтобы обрабатывало и производило, например, переподключение и перезапуск запросов.
  • Запустите приложение соединяясь с базой данных Oracle версии 10gR2 или выше.