Большие важные приложения часто бывают недоступны в течение десятков часов из-за установки новых версий этих приложений. Oracle 11g вводит новое революционное решение, позволяющее выполнять смену версии приложения не останавливая работу этого приложения. Старая и новая версии приложения могут работать одновременно. На рисунке 3 приведен пример двух версий приложения. В старой версии было всего 2 колонки: имя и телефон. В новой версии имя, фамилия, код города и телефон хранятся и отображаются в отдельных колонках. Это потребовало как изменения структуры таблицы, так и изменения процедур, формирующих графический интерфейс. Оба приложения позволяют просматривать и модифицировать данные и могут какое-то время работать одновременно (пока старая версия не будет закрыта).
Рис 3.Пример двух версий приложения
Для реализации возможности одновременной работы старого и нового приложения в Oracle 11g были введены 3 новых понятия: редакция (Edition), Editioning View (редактируемое представление) и CrossEdition Trigger (межредакционный триггер).
Понятие редакции (Edition) обеспечивает существование в БД нескольких версий программных объектов, таких как PL/SQL функции и процедуры, триггеры, views, синонимы и т д. Скрипты патчей и апгрейдов могут вносить изменения в новую редакцию (группу объектов новой редакции), в то время как старая редакция не меняется. При этом изменения не видны пользователям старой редакции. После того, как все изменения завершены и новый код протестирован, можно активизировать новую редакцию. Т е новая версия всех объектов станет актуальной.
Понятие редакции не применимо к таблицам. Чтобы могли сосуществовать 2 версии одной таблицы используются Editioning Views. Т е мы создаем новую, измененную версию таблицы и “вешаем” над ней Editioning View, который прячет все изменения в структуре таблицы и представляет новую таблицу, как старую Editioning View создается в старой редакции и там не видны изменения структуры, которые видны в процедурам новой редакции. Т е старая редакция работает не с таблицей, а с Editioning View.
Для того, чтобы версии приложения могли сосуществовать и в них одновременно можно было изменять данные и видеть измененные данные, используются Editioning Triggers (межредакционные триггеры). При изменении данных в старом приложении они преобразуют изменения в новый формат и пишут их в новую таблицу и наоборот.
Кстати в Oracle 11g зависимые объекты не приобретают статус INVALID и не перекомпилируются при добавлении новых процедур и функций в пакет.