2 окт. 2012 г.

Oracle DB новой версии: Application Continuity, Global Data Services and Flex-ASM

После посещения семинаров на Oracle OpenWorld и общения с коллегами из Development Team удалось разобраться с двумя очень мощными технологиями которые будут реализованы в новой версии СУБД: Application Continuity и Global Data Service.

Application Continuity - это возможность автоматического повтора транзакции в случае сбоя соединения к RAC. Как вы помните Transparent Application Failover не защищает от потери транзакции: в случае сбоя в момент выполнения транзакции приложение получает исключение ORA-25402 transaction must rollback.

Фактически, с точки зрения разработчика, Application Continuity выглядит как TAF с типом восстановления "транзакция" (transactional), но реализован не только на стороне клиента, поскольку задействует новую возможность СУБД - Transaction Guard. Transaction Guard - это технология для определения факта фиксации транзакции (или НЕфиксации) после сбоя.

Application Continuity реализована посредством специального драйвера повтора (Replay Driver) на стороне клиента. После сбоя, с помощью Transaction Guard, этот драйвер проверяет факт фиксации транзакции (успел ли пройти commit ?), в случае если транзакция не была зафиксирована, производится ее повтор. Если транзакция успела зафиксироваться, то приложение продолжает работу.

В случае, если повтор транзакции требует восстановления контекста сессии (напрмер: в транзакции есть вызовы PL/SQL которые используют глобальные переменные пакета), разработчик может определить свою функцию обратного вызова (callback), которая будет вызвана перед повтором транзакции. В случае невозможности повтора транзакции (например: между DML-операторами происходила запись в файл с помощью вызова пакета UTL_FILE), разработчик может явно запретить повтор такой транзакции в коде приложения.

Для поддержки сохранения значений последовательностей (если перед сбоем был вызов nextval, повтор транзакции снова "накрутит" последовательность !), введена возможность сохранения их значений для повтора. Аналогичная возможность есть для функций SYSGUID и SYSDATE.

В настоящий момент Replay Driver есть только для JDBC: в дальнейшем обещают и для OCI и ODP.Net.

Другая интересная технология которая появилась в новой версии - это глобальные сервисы (Global Data Services).
Это новый вид сервисов, которые обслуживаются несколькими БД, и данные в этих БД синхронизированы (Например: с помощью Active DataGuard или Golden Gate).
Ключевые особенности глобальных сервисов: - могут быть read-only или read-write;
- соединение с GDS осуществляют специализированные листенеры (GDS-листенер);
- на каждый регион (площадку) имеется свой GDS-листенер;
- формат дескриптора TNS расширен для указания региона к которому относится клиент;
- GDS-листенеры осуществляют балансировку нагрузки между БД;
- в процессе балансировки GDS-листенер учитывает не только степень загрузки БД, но и сетевую задержку до БД и время отставания (все эти параметры задаются в виде атрибутов gds-сервиса);
- информация о gds-сервисах хранится в специальном каталоге который реплицируется между регионами;
- для клиента использование gds-сервиса прозразно, в частности, точно также отрабатывает TAF при потере текущей БД или узла (если это кластерная БД).

Много нового появилось в ASM.
Самое главное новшество - Flex ASM. Идея Flex ASM заключается в том, что теперь экземпляры БД не зависят от одного ASM-экземпляра на текущем узле, а могут задействовать ASM-экземпляры на других узлах. В общем случае на узле может работать только ASM-экземпляр, и может не быть экземпляра БД.
Для поддержки коммуникации с ASM-экземплярами и балансировки нагрузки между ними, вводится новая подсеть - ASM Network (помимо public и interconnect сетей).

На фото: выступдение Andrew Mendelsohn, Senior Vice President Oracle Database Server Technologies, где он рассказывает о другой интересной фиче новой версии - Data Redaction.

Знаю, знаю - у вас возникло много вопросов. :-) Это пока краткий обзор новых технологий Oracle Database новой версии.
Позже будет полная исчерпывающая информация!

5 комментариев:

  1. Ух, с каждой версией база все сложнее и сложнее :)

    Гена

    ОтветитьУдалить
  2. Это нормально, потому-что она с каждой версией решает все более сложные проблемы.
    Простых решений сложных проблем не бывает...

    ОтветитьУдалить
  3. Игорь, добрый день.
    Скажите пожалуйста, как работает атрибут KEEP в SEQUENCE в случае Application Cont. ?
    Также хотелось бы увидеть пример с KEEP DATE TIME и grant KEEP SYSGUID.

    Если хотите, можно устроить обсуждение примера.
    Заранее спасибо.

    ОтветитьУдалить
  4. Игорь, добрый день.
    Я спрашивал про пример с ((ReplayableConnection) connWork).beginRequest(); / ((ReplayableConnection) connWork).endRequest();

    пример имеется, если что - могу выслать.

    ОтветитьУдалить
  5. Вышлите мне, пожалуйста, тесткейс - исходник вашего примера.

    ОтветитьУдалить