30 окт. 2012 г.

Top 12 features in next generation Oracle Database from Tom Kyte

Несомненно, самой главной новостью прошедшего Oracle OpenWorld 2012 был анонс новой версии базы данных Oracle Database. Количество и качество новых возможностей просто поражает, некоторые из них носят глобальный характер (напр: Pluggable Database).
На моей памяти, ни в одной версии СУБД Oracle не было анонсировано столько новых возможностей. Так что нас ждет интересное время!

Мне впервые удалось попасть на Oracle OpenWorld, и только здесь осознаешь огромные масштабы компании: 50 тысяч человек - участников конференции, приехавшие сюда с всего мира, перекрытый центр Сан-Франциско, огромное количество сессий и очень много информации. Я выбирал только сессии посвященные новым возможностям СУБД, но мой день был занят с утра до вечера! К сожалению, не удалось попасть на сессии посвященные другим интересным темам.
Не буду скрывать: чувствуешь некоторую гордость, связанную с причастностью к всему этому.

После прилета (перелет из Москвы в Сан-Франциско занял 16 часов!), самое трудное - это адаптироваться к 11-ти часовой разнице в времени с Москвой. Удалось побывать в центральном офисе Oracle в Redwood city, съездить на мост GoldenGate, а также... прогуляться по кампусу Google. Офис Google произвел впечатление своей оригинальностью и подходом к организации работы сотрудников.
Спасибо за экскурсию сотруднику Oracle Development Team Впадимиру Бегуну !

В последний день Oracle OpenWorld 2012 выступил Том Кайт с рассказом о самых лучших 12-ти новых возможностей следующей версии СУБД Oracle Database. Вот этот список с небольшими моими комментариями.

1. Even better PL/SQL from SQL
Непосредственно в тексте SQL-запроса можно указывать текст PL/SQL-функции, которая вызывается внутри запроса. Цель этого нововведения: уменьшить время переключения между SQL-движком и виртуальной машиной PL/SQL в процессе выполнения запроса. Также появилась новая прагма компилятора PL/SQL, которая позволяет пометить функции вызываемые внутри SQL-запросов. Для таких функций PL/SQL-компилятор генерирует дополнительную информацию для уменьшения затрат на переключение контекста SQL<->PL/SQL. В результате: значительно повысилась скорость выполнения запросов внутри которых вызывается PL/SQL-функции!

2. Improved defaults
Расширение возможностей установки значений по умолчанию для колонок таблиц. Включает в себя две новые возможности:
- автоинкрементные поля (значение которых вставляются автоматически из последовательности);
- установка значения по умолчанию при вставке NULL в поле, при этом в строке таблицы фактически НЕ происходит замена NULL на значение по умолчанию, а устанавливается ссылка на словарь (dictionary based default for NULL).

3. Bigger varchar2, nvarchar2, raw -up to 32K
Поля типа varchar2, nvarchar2, raw теперь могут иметь размер до 32K. Добавлен новый параметр Max_SQL_String_Size в init.ora для включения этой возможности.

4. Top-N and pagination queries
В SQL-запросах теперь поддерживается фраза TOP, FETCH NEXT и OFFSET для получения необходимого количества строк в произвольном окне курсора. Очень полезная возможность при формировании результата запроса, который должны отображаться в многостраничном виде (pagination) !

5. Row pattern matching
С помощью фразы MATCH_RECOGNIZE в SQL-запросе теперь можно получить набор строк которые удовлетворяют определенному условию по времени (time series use case explained). Например: строки в которых объем продаж возрастал, а затем пошел на понижение.

6. Adaptive Execution plans
Динамическое изменение отдельных шагов плана (например замена Nested Loops на Hash Join), если после первого выполнения оптимизатор понял, что ошибся.

7. Partitioning Improvements
Асинхронная перестройка глобальных индексов после операций TRUNСATE или DROP секции. Теперь, после удаления или очистки партиции, глобальные индексы на таблице не переводятся в недействительное состояние, а производится их перестройка в фоновом режиме.

В DDL-операций над секциями теперь можно указывать несколько секций.

Поддержка смешанного секционирования Interval+Reference.
Перемещение секций (ALTER TABLE .. MOVE PARTITION) в online, без остановки. DML-операции при этом не блокируются и продолжают свою работу.

8. Enhanced Statistics
Расчет статистики для временных таблиц на уровне сессии.
Поддержка гибридных гистограмм.
Операции CTAS и INSERT … SELECT автоматически рассчитывают статистику в ходе своего выполнения.

9. Temporary Undo
Теперь undo-сегменты для временных таблиц сохраняются в TEMP-табличном пространстве, а не в UNDO, как это было в прошлых версиях. Раньше, при изменении временных таблиц все равно генерировалось REDO-информация, поскольку производилась запись в UNDO (redo генеривароал undo !). Благодаря этому стала возможна поддержка DML-операций над временной таблицей на StandBy-сервере.

10. Data Optimization
Встроенный Information Lifecycle Management [ILM]
СУБД автоматически сопровождает температурную карту (heat map) данных.
"Холодные" данные автоматически сжимаются и перемещаются на лругие уровние хранения. Политики ILM объявляются декларативно на уровне DDL-операций над таблицами.

11. Transaction Guard
Встроенная инфраструктура для определения факта фиксации транзакции после сбоя. Transaction Guard использует другая мощная технология - Application Continuity. Разработчикм могут использовать Transaction Guard в своих приложениях самостоятельно (независимо от Application Continuity).

12. Pluggable database
Теперь несколько баз данных могут работать в рамках одного набора фоновых процессов и SGA. Применяется для конлидации нескольких БД в едином экземпляре (контейнере). Эта новая возможность потребовала изменения всей архитектуры СУБД Oracle.

Чуть позже после релиза новой версии СУБД будет подробная информация об этой и других новых технологиях,

4 окт. 2012 г.

Flex Cluster and In-memory database

3 октября этот, не побоюсь этого слова, непрерывный "угар" связанных с потоком новых технологий Oracle Database новой версии, продолжился! :-)

Итак, объвлен новый тип кластера - Flex Cluster.

Flex-кластер состоит из узлов имеющих прямой доступ к системе хранения (Hub node) и из узлов которые прямого доступа к storage неимеют (Leaf node). Hub-узлы это хорошо знакомые нам узлы которые работают под управлением Grid Infrastructure. Leaf-узлы подключаются к hub-узлам и как уже было отмечено, общаются с разделяемым диском через hub-узлы (это не мешает им иметь свой локальный storage). На leaf-узлах запускаются экземпляры БД (используется Flex ASM) и приложения.

Поддерживается установка в обычном режиме Oracle Clusterware (как в предыдущих версиях) - без Flex-кластера. Также есть процедура миграции с обычного кластера в режим Flex-Cluster.

Также в новой версии СУБД, в технологию RAC были добавлено много других новых возможностей, вот список того что мне удалось запомнить:
- Shared Grid Name Service - GNS который обеспечивает разыменование для неcкольских кластеров (раньше GNS работал только в пределах одного кластера);

- поддержка нескольких public-сетей и, соответственно одновременная их поддержка в скан-листенерах (раньше public-сеть была только одна);

- установка в листенерах ограничений за регистрацию экземпляров (раньше такого запрета не было, что позволяло злоумышленнику зарегистрировать свой fake-экземпляр и перехватить соединения реальных пользователей, применялся Workaround - использование шифрования соединений по SSL с помощью ASO);

- добавлена возможность выполнения изменения состояния ресурсов в режиме What-If (что-если), то есть моделирование команды без ее фактического выполнения.

Также прошла большая сессия посвященная новым технологиям по работе с памятью. В настоящий момент это действительно проблема: сейчас серверы имеют большой объем оперативной памяти и флеш-памяти, и эффективно его задействовать это не тривильная задача.
В новой версии появилось ряд новых технологий для ее использования.

P.S.

На фотографии слайд с выступдения Andrew Mendelsohn, Senior Vice President Oracle Database Server Technologies посвященной Pluggable Database. Позже на технической сессии, архитектор этой технологии объяснял, что происходит когда БД вставляется в контейнер:
- в случае, если вставляемая БД имеет более старую версию, чем контейнер, то происходит обновление словаря (неявный upgrade!);
- для М-кода (кода виртуальной машины PL/SQL) системных пакетов, которые имеют прямую линковку с бинарниками СУБД (например пакеты dbms_sql, dbms_output и т.д.) происходит неявная рекомпиляция тела пакетов с бинарными файлами контейнера в который БД вставляется .
Я, как и все сидевшие в аудитории, был в шоке ... :-)

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 новой версии.
Позже будет полная исчерпывающая информация!

Oracle Database новой версии - new features (short list)

Посетив пять (!) докладов посвященных новым возможностям очередной версии СУБД спешу сообщить вам их список. Пока коротко, что удалось запомнить, безусловно потом будет глубокое и подробное описание в постах и в презентациях.

Oracle Database core:
1) В таблицах поля типа varchar2, nvarchar2 и raw могут иметь размер до 32K
2) Data Redaction - маскирование данных прямо на лету, в процессе выборки в приложение
3) Упоминавшаяся ранее Pluggable Database. Для ее поддержки были доработы многие механизмы СУБД, например Resource Manager, чтобы распределять аппаратные ресурсы между базами в контейнере, также были расширены возможности RMAN
4) Встроенный автоматический ILM. Очень мощная технология. Был отдельный семинар посвященный только ей.
5) Невидимые колонки (invisible columns)
6) Переименование файлов данных в online
7) Поддержка автоинкрементных полей (identity column) в таблицах
8) Автоматический сбор локальной статистики (в пределах сессии) для временных таблиц
9) Динамическое изменение отдельных шагов плана (например замена Nested Loops на Hash Join), если после выполнения оптимизатор понял что ошибся.
10) Поддержка фразы "Top N" в запросах.
11) Локальные последовательности, с которыми можно работать на standby-БД
12) Сжатие трафика SQL*Net
13) Возможность записи в временные таблицы на standby-БД

Oracle PL/SQL в новой версии СУБД:
1) Переменные привязки передаваемые в динамический блок могут иметь неSQL-типы (boolean, record и PL/SQL-массивы)
2) Права и роли теперь могут выдаваться непосредственно PL/SQL-объекту (функции, процедуре, типу и пакету). Помимо всего прочего появляется дополнительная защита от SQL-инъекции.
3) Декларативное ограничение видимости вызова PL/SQL-объектов. Теперь не нужно применять описанный мною workaround ! (http://www.igormelnikov.com/2012/07/protect-plsql-api-by-data-vault.html)
4) Декларация UDF-функции прямо в теле запроса (в фразе with) для устранения переключения контекста между SQL и PL/SQL движками. Добавлена специальная прагма компилятора pragma udf для уже существующих функций. Отдельно было сказано, что SQL-движок не содержит в себе свою PL/SQL VM, а просто компилятор генерирует дополнительную информацию для упреждающего формирование контекста вызова PL/SQL-функции в SQL-машине!
5) В Edition base redefinition версионируемость может включается на уровне объекта. В пределах одной схемы теперь потенциально версионируемыми может быть только часть объектов !
6) Функции теперь могут возвращать неявный курсор (например как в MS SQL Server) Пакет dbms_sql расширен для возврата и чтения таких курсоров на уровне PL/SQL. Расширены клиентские библиотеки OCI, ODP.Net и JDBC для работы с такими курсорами на стороне клиента.
7) Внешние библиотеки доступны только через объект Directory, а не через явное указание пути к файлу как это было ранее.
8) Наследование привилегий (INHERIT PRIVILEGES) создателя для IR-функций. Применяется когда вызывающий имеет более высокие права чем создатель и нужно ограничить в правах такую функцию.

Также много нового ждет нас в технологии RAC. Завтра рассказ про Application Continuity и Global Data Services, а также про новые фичи в ASM !

1 окт. 2012 г.

Oracle Database новой версии объявлена !

Свершилось эпохальное событие: объявлена Oracle Database следующей версии !
Среди новых возможностей была анонсирована технология Pluggable Database:
  • несколько баз данных могут работать в рамках одного набора фоновых процессов и SGA (да-да: имеем несколько табличных пространств system и словарей в рамках одного instance !);
  • применяется данная технология для консолидации нескольких БД на одной машине.
Также была анонсирована Exadata X3. Среди новых возможностей:
  • переход на 8-ми ядерные процессоры Intel E2690 в узлах БД;
  • увеличение объема памяти в узлах БД до 128Гб (с возможностью апгрейда до 256Гб);
  • увеличение объема памяти в ячейках хранения до 64 Гб;
  • увеличение объема флеш-памяти в ячейках хранения в 4 раза (до 1600Гб);
  • увеличение быстродействия флеш-памяти на 40% за счет перехода на новые карты памяти.
Попутно была объявлена новая возможность в Storage Software - write-back cache:
  • отложенная запись на жесткие диски с помощью флеш-памяти;
  • работает начиная с версии Storage Software 11.2.3.2.0 (Exadata X3 работает только с этой версией и выше);
  • владельцы прежних версий Exadata могут воспользоваться этой технологией просто обновив софт в ячейках);
  • на узлы БД требуется установка Exadata Bundle Patch 9 (или выше).
Завтра - более подробно о новых технологиях в новой версии СУБД !