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 новой версии.Позже будет полная исчерпывающая информация!
Ух, с каждой версией база все сложнее и сложнее :)
ОтветитьУдалитьГена
Это нормально, потому-что она с каждой версией решает все более сложные проблемы.
ОтветитьУдалитьПростых решений сложных проблем не бывает...
Игорь, добрый день.
ОтветитьУдалитьСкажите пожалуйста, как работает атрибут KEEP в SEQUENCE в случае Application Cont. ?
Также хотелось бы увидеть пример с KEEP DATE TIME и grant KEEP SYSGUID.
Если хотите, можно устроить обсуждение примера.
Заранее спасибо.
Игорь, добрый день.
ОтветитьУдалитьЯ спрашивал про пример с ((ReplayableConnection) connWork).beginRequest(); / ((ReplayableConnection) connWork).endRequest();
пример имеется, если что - могу выслать.
Вышлите мне, пожалуйста, тесткейс - исходник вашего примера.
ОтветитьУдалить