Підтримка прозорого для програм відновлення після відмови (Transparent Application Failover або TAF) для OCI8

TAF – це механізм бази даних Oracle, що забезпечує високу доступність. Він дозволяє програмам PHP, що використовують OCI8, автоматично перепідключатися до резервної бази даних у разі збою на основний або при мережевих проблемах.

У конфігурованій системі бази даних Oracle, TAF відбувається коли програма PHP визначає, що екземпляр бази даних недоступний. У цьому випадку відбувається з'єднання з іншим вузлом Oracle » RAC. Це може бути гарячий резерв або той самий екземпляр бази даних. Докладніше про OCI TAF читайте у » Oracle Call Interface Programmer's Guide

Функцію зворотного дзвінка для програми можна зареєструвати за допомогою oci_register_taf_callback(). У процесі відновлення після відмови виконання програми буде призупинено та буде викликана зареєстрована функція зворотного дзвінка. Ця функція сповіщатиме про програму відновлення. Якщо відновлення завершилося успішно, керування буде повернено програмі. Якщо відновлення завершилося невдало, всі наступні звернення до базі даних будуть завершуватися з помилкою, оскільки відсутня підключення.

Коли з'єднання переходить до іншої бази даних, зворотний виклик може скинути будь-який необхідний стан з'єднання, наприклад, перевиконати будь-яку необхідну команду ALTER SESSION якщо для сервісу бази даних не включено -failover_restore.

Реєстрацію функції зворотного дзвінка можна видалити за допомогою oci_unregister_taf_callback()

налаштування TAF

TAF можна настроїти на стороні PHP OCI8 або конфігурації бази даних. Якщо налаштовано там і там, то перевага віддається налаштувань за бази даних.

Налаштувати TAF в PHP OCI8 (на стороні клієнта) можна, додавши параметр FAILOVER_MODE у частині CONNECT_DATA дескриптора з'єднання. Докладніше про налаштування TAF на стороні клієнта читайте у »  Oracle Database Net Services Administrator's Guide

Приклад налаштування TAF в tnsnames.ora для перепідключення до тієї ж БД:

ORCL =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
        (CONNECT_DATA =
          (SERVICE_NAME = orclpdb1)
          (FAILOVER_MODE =
            (TYPE = SELECT)
            (METHOD = BASIC)
            (RETRIES = 20)
            (DELAY = 15))))

Також можна налаштувати TAF на стороні бази даних шляхом модифікації сервісу за допомогою » srvctl (для RAC) або за допомогою пакетної процедури »  DBMS_SERVICE.MODIFY_SERVICE (Для одиночних екземплярів баз даних).

Використання функцій зворотного дзвінка TAF у OCI8

Функція зворотного виклику TAF є функцією, зареєстрованою з програми для запуску в процесі відновлення після збою. При відновленні з'єднання вона викликається кілька разів.

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

Інтерфейс функції зворотного виклику TAF:

userCallbackFn(resource $connection, int $event, int $type): int

connection

Ідентифікатор з'єднання Oracle, для якого ця функція була зареєстрована за допомогою oci_register_taf_callback()Соединение недоступно во время аварийного восстановления.

event

Подія відновлення означає поточний статус відновлення.

  • **OCI_FO_BEGIN**означає, що відбулася втрата з'єднання та процес відновлення розпочато.

  • **OCI_FO_END**означає вдале відновлення з'єднання.

  • **OCI_FO_ABORT**означає, що відновлення завершилося невдало і спроб відновлення більше не буде.

  • **OCI_FO_ERROR**також означає, що відновлення завершилося з помилкою, але програма дає можливість обробити помилку і повернути OCI_FO_RETRY ще для однієї спроби відновлення.

  • **OCI_FO_REAUTH**означає, що користувач Oracle був повторно автентифікований.

type

Тип відновлення після відмови. Це дозволяє функціям зрозуміти, який тип відновлення запрошений програмою. Допустимі такі значення:

  • **OCI_FO_SESSION**означає, що користувач запросив лише відновлення сесії. Наприклад, якщо з'єднання зникло, буде створена нова сесія на резервному сервері. Цей тип відновлення не намагатиметься відновити запити типу SELECT.

  • **OCI_FO_SELECT**означає, що запит запитів SELECT запитано. Це дозволить використовувати відкритий курсор для отримання значень після відновлення.

return value

  • означає, що кроки відновлення після відмови мають тривати нормально.

  • **OCI_FO_RETRY**означає, що потрібно спробувати знову відновитися. У разі виникнення помилки під час переходу на нове з'єднання TAF може повторити перехід на інший ресурс. Зазвичай перед поверненням коду OCI_FO_RETRY рекомендується деякий час зачекати.

Приклад реєстрації функції зворотного дзвінка TAF

Loading...

Дивіться також