Почему пора?


Время летит быстро, и для пользователей Oracle Database 11.2, не говоря уже о более ранних версиях, настало время обновления. 31 января 2015 года закончился период Premier Support базы Oracle Database 11.2. Это значит, что если вы, например, запланируете обновление аппаратного сервера, то на нем придется установить новую версию операционной системы, т.к. драйверы для прежней версии уже недоступны, а новая операционная система уже не сертифицирована под версию 11.2.



Детальную информацию о поддержке различных версий Oracle Database вы найдете в официальном документе Oracle Lifetime Support Policy. Только что, например, завершилась расширенная поддержка версии 11.1 (рис. 1). Что касается самой популярной на сегодня версии 11.2 — для нее сейчас заканчивается первый год расширенной поддержки, и с января будущего года начнется постепенное увеличение стоимости технической поддержки, сначала на 10%, в последующие годы — на 20%, и это еще один экономический стимул для предприятий подумать об обновлении до версии до 12с.

Готовясь к переходу на новую версию базы данных, важно понимать разницу между терминами «обновление» и «миграция».

Обновление (upgrade) базы данных — это переход на новую версию в рамках прежнего операционного окружения — платформа и операционная система не меняются, данные не «переезжают» с одного сервера на другой, меняется только версия базы данных. Собственно обновление заключается в процедуре обновления словаря и метаданных Oracle, сами данные не изменяются и не перемещаются. В этом случае размер базы данных не имеет значения и не влияет на скорость обновления, имеет значение только количество объектов в базе данных. То есть, с обновлением все понятно, меняется только версия базы данных, в данном случае, мы делаем апгрейд до 12 версии базы данных, но платформа и операционная система не меняются.

Важно, с какой именно версии Oracle Database осуществляется обновление на версию 12c. Начиная с версии 10 доступна технология Data Pump. Для обновления со старых версий предусмотрен процесс, состоящий из экспорта и последующего импорта данных, который требует дополнительного дискового пространства. Этот способ часто используют для небольших баз данных. Oracle рекомендует использовать специальный инструмент обновления, который называется Oracle Database Upgrade Assistant и бесплатно поставляется в составе дистрибутива Oracle Database, его применимость к различным версиям баз данных отражена на диаграмме на рис. 2. Начиная с 12 версии доступен также вариант ручного обновления, который обеспечивается виде специальным скриптом на языке Perl.

Можно максимально сократить время простоя при обновлении, если использовать дополнительную возможность, которая появилась в утилите Recovery Manager — сделать перенос файлов в базу данных с помощью транспортируемых табличных пространств, а затем применить инкрементальные копии Recovery Manager. Эта технология называется RMAN incremental backup recovery. Если простой недопустим, нужно использовать специальный инструмент, который обеспечивает обновление «на лету» и называется Golden Gate — но это самый дорогой способ с точки зрения лицензирования ПО, подготовки и адаптации механизмов репликации.

Миграция (migration) — это переход на новое операционное окружение — на новый сервер, на новую операционную систему. И в этом случае, конечно, имеет первостепенное значение физический размер базы данных. Часто задачи обновления и миграция выполняют совместно, т.е., например, одновременно переходят на новую версию Oracle Database и при этом меняют оборудование.

Самый надежный вариант переноса базы данных прим миграции — старый, добрый экспорт-импорт. Поскольку файл экспорта не зависит от платформы, можно сделать выгрузку из базы данных старой версии на одной программно-аппаратной платформе, а импорт в базу данных новой версии — на другой программно-аппаратной платформе. Начиная с версии 10.2 доступна технология транспортирования табличных пространств. Технология RMAN incremental backup recovery применима, к сожалению, не для всех программно-аппаратных платформ. Если необходим нулевой простой, можно использовать технологию Golden Gate.

Более подробно о способах обновления и миграции вы сможете узнать из документов, перечисленных в конце статьи.

Патчи и сертификация


Если в процессе перехода на новую версию базы данных вы меняете оборудование и операционную систему, нужно разобраться, сертифицирована ли данная программно-аппаратная платформа под версию Oracle Database 12с. Пожалуйста, ознакомьтесь с информацией о сертификации программно-аппаратных платформ, приведенной на сайте технической поддержки support.oracle.com (закладка «Certification»). На том, где искать дистрибутивы, мы останавливаться здесь не будем — важно не забыть получить все актуальные пакеты обновления. Oracle ежеквартально выпускает большие кумулятивные пакеты обновления, которые устраняют серьезные ошибки. Рекомендуемые патчи для версии 12.1.0.2 в настоящий момент — это PSU Update 4 и OJVM PSU Update 4 (обновление Oracle Java Virtual Machine, встроенной машины Java).

Если сейчас вы используете версию 11.2.0.3 или 11.2.0.4, и уже установили определенные патчи для устранения определенных ошибок, стоит убедиться, что эти ошибки исправлены в версии 12. Скорее всего, это так, но, тем не менее, рекомендуется по номеру патча к версии 11 проверить, устранена ли специфическая ошибка в кумулятивном обновлении версии 12, и если нет, то получить соответствующую «заплатку» для устранения данной ошибки. Если же такой патч еще не выпущен, необходимо сделать соответствующий запрос в службу технической поддержки для вашей программно-аппаратной платформы.

Начиная с версии 12.1.0.2 Oracle выпускает специальный патч, который называется Oracle Database In-Memory patch of Exadata Engineering System. Он включает обновление технологии Oracle Database In-Memory и, несмотря на свое название, подходит не только к Exadata, но и к обычным дистрибутивам, и который рекомендуется устанавливать, если вы используете технологию Oracle Database In-Memory.

Важное обновление касается особенностей измерения времени в России — это связано с тем, что у нас, как вы помните, был дважды с интервалом в несколько лет изменен принцип исчисления времени в часовых поясах. Поэтому очень важно установить специальные Time Zone-обновления, которые учитывают эту ситуацию для российских часовых поясов. Если вы активно используете хранимые процедуры на Java и переменные Java типа Date и Time с часовыми поясами, вам пригодится специальный патч для коррекции времени в часовых поясах для виртуальной машины Java.

Не забудьте обновить утилиту OPatch для того, чтобы установить новое обновление. В Oracle Database 12 версии появился новый пакет DMBS_QOPatch.

Подготовка исходной базы данных


Прежде чем начать обновление, нужно подготовить исходную базу данных. «Чеклист» такой подготовки приведен на рис. 3.

Очистка мусорной корзины перед обновлением. Начиная с Oracle 12с она выполняется с помощью скрипта preupgrade_fixups.sql. Очищать мусорную корзину рекомендуется, по меньшей мере, раз в неделю с помощью автоматического задания в период минимальной нагрузки на базу данных.

Проверка на ошибочные объекты. Не должно быть ошибочных объектов в схемах SYS и SYSTEM. Чтобы произвести такую проверку, нужно попытаться скомпилировать объекты, находящиеся в состоянии «Invalid», до обновления или миграции с помощью скрипта utlrp.sql. Если это не помогает, приступать к обновлению ни в коем случае нельзя. Стоит проверить, нет ли в схемах SYS и SYSTEM объектов с одинаковыми именами, это можно сделать при помощи следующего запроса:

select OBJECT_NAME, OBJECT_TYPE
    from DBA_OBJECTS
where (OBJECT_NAME,OBJECT_TYPE) in
    select OBJECT_NAME, OBJECT_TYPE
    from DBA_OBJECTS where OWNER=SYS')
and OWNER=’SYSTEM’
and OBJECT_NAME not in
(’AQ$_SCHEDULES_PRIMARY’,
’AQ$_SCHEDULES',’DBMS_REPCAT_AUTH’);

Также удалите все устаревшие и недокументированные параметры, включая events. Если вы работаете с большими, сложными приложениями, такими как ERP SAP или Oracle EBS, обязательно ознакомьтесь с приложенной к ним документацией об обновлении базы данных для таких приложений. Есть пример обновления базы данных самой компании Oracle — когда удалили все недокументированные параметры, скорость обновления увеличилось в семь раз.

Существует прекрасная утилита Health Check — это скрипт, который позволяет проверить целостность словаря. Этот скрипт проверяет известные проблемы в Oracle8i, Oracle9i, Oracle 10g и Oracle 11g. Для более высокой производительности его может запустить в несколько параллельных каналов или только для отдельных файлов данных или табличных пространств. Health Check выполняется на базе данных и выводит в консоль SQL+ информацию по всем компонентам. Если будет обнаружена несогласованность словаря, скрипт выведет эту информацию, а вам придется решить эту проблему перед обновлением, потому что словарь должен быть в согласованном состоянии. Скачать утилиту можно с сайта службы технической поддержки.

Также в версии 12 появился новый специальный Pre-Upgrade-скрипт preupgrd.sql. Он выполняет проверки перед обновлением, запускается в базе данных старой версии и выполняет проверки окружения старой базы данных на соответствие перехода на версию 12. Если обнаруживаются какие-то несоответствия, то формируются два специальных скрипта: preupgrade_fixups.sql и postupgrade_fixups.sql.

Для увеличения скорости обновления рекомендуется иметь актуальную статистику — прежде всего, статистику по метаданным СУБД Oracle. Сбор статистики по словарю осуществляется с помощью вызова пакета DBMS_STATS, GATHER_DICTIONARY_STATS. Актуальной может считаться статистика, собранная не более чем за сутки до обновления.

Обновление базы данных


Теперь мы можем приступить к самой процедуре обновления. Продолжительность обновления до Oracle Database 12с в основном зависит от количества компонентов, опций и объектов в базе данных — поскольку в версии 12 появилось много новых таблиц и была реорганизована структура базовых таблиц. В меньшей степени продолжительность обновления зависит от производительности системы, т.е. частоты и количества центральных процессоров и скорости подсистем ввода-вывода. В версии 12 обновление словаря происходит в параллельном режиме — по умолчанию в четыре потока. К сожалению, максимальная степень параллелизма ограничена значением 8 — т.е. можно создать максимум восемь потоков, поскольку словарь имеет максимум восемь независимых компонентов, которые можно обновлять параллельно. Возможно, в будущих версиях степень параллелизма будет повышена. Впрочем, уже теперь документация обещает 40%-ное повышение скорости обновления словаря, а опыт заказчиков показывает, что возможна и более высокая скорость.

Упрощает обновление до Oracle Database 12c инструмент администрирования Database Upgrade Assistant, который входит в дистрибутив СУБД Oracle и не требует дополнительного лицензирования. Можно вызвать его через общую консоль Enterprise Manager Cloud Control, это удобно, если необходимо провести массовое обновление баз данных однотипной конфигурации. Если нужно обновить кластерную базу данных, можно использовать консоль Enterprise Manager Cloud Control.

Завершение обновления


Чтобы выполнить набор шагов для завершения обновления, следует воспользоваться специальным скриптом, который называется utlu121s.sql, или утилитой Database Upgrade Assistant. Скрипт выводит перечень компонентов базы данных — статус каждого компонента статус должен быть VALID, в противном случае обновление прошло неудачно. Отдельно следует проверить результат установки специальных обновлений Time Zone — бинарных патчи определения часовых поясов и специальный скрипт, который производит изменение словаря.

На рис. 4 приведен проверочный список для проверки производительности обновленной базы данных. Можно использовать технологию Real Application Testing, которая позволяет записать нагрузку на базе данных старой версии, проиграть ее на базе данных новой версии и сравнить производительность.

Если вы используете автоматическую степень параллелизма, то обязательный шаг — калибровка ввода-вывода, т.е. скорости и пропускной способности. Для Exadata калибровка и сбор системной статистики выполняются специальным вызовом DBMS_STATS.GATHER_SYSTEM_STATS, поскольку там специфическая система ввода-вывода.

Что бы почитать?


Прежде чем начать процесс обновления, необходимо, как минимум, ознакомиться с документацией, которая доступна с сайта службы технической поддержки support.oracle.com. Главный документ, который вам нужен, называется Upgrade Companion 12c — это дополнение к документации по обновлению версий Oracle Database, которую можно получить с сайта docs.oracle.com. Если вы еще не зарегистрировались на портале Oracle Technology Network по адресу otn.oracle.com, сделайте это — вы найдете много полезного на странице otn.oracle.com/upgrade.

Отдельно рекомендуем страницу blogs.oracle.com/UPGRADE — это блог Майка Дитриха, ведущего специалиста компании Oracle по обновлению баз данных. На странице есть ссылка на презентацию Майкла, посвященную обновлению баз данных — это всеобъемлющий документ, содержащий на данный момент уже более 600 слайдов.

Комментарии (9)


  1. Rupper
    02.10.2015 11:07
    +1

    К сожалению, много в 12с поломали. Причем в неожиданных местах.
    Баги висят в металинке пока тишина по ним.


    1. warlog
      13.10.2015 18:39

      Rupper В любом программном продукте, особенно в таком огромное и сложном как СУБД Oracle Database, есть ошибки.
      Ежеквартально корпорация Oracle выпускает пакеты исправлений для СУБД которые устраняют обнаруженные критичные ошибки:
      Oracle Database Critical Patch Update
      Oracle Database Patch for In-Memory
      Oracle Database Critical Patch Update for JavaVM (OJVM PSU)

      Вы установили все вышеперечисленные последние патчи?
      О каких конкретно багах идет речь?
      Приведите, пожалуйста, их номера.


      1. Rupper
        14.10.2015 09:51

        12.1.0.2 linux x64
        Извините, но искать номера довольно муторно и главное, вы вряд ли их можете как-то пропихнуть к исправлению, а мы уже нашли workaround. Так что сорри, но мне лень искать, реквесты создали до нас.
        Должен извинится — одна исправилась 5-го октября вышел новый релиз ODAC с ODP.NET где исправлена ошибка с загрузкой CLOB в x86 конфигурации.
        Остальные — остались. В нашем случае это 3 запроса, валяшихся с ORA-600. Их уже переформулировали и смогли обойти. На 11g они работают.
        Когда мы переходили на 11g проблем было меньше.


  1. Terranz
    02.10.2015 12:47

    у меня на заводе до сих пор с начала 2000х стоит седьмой, на третьем пеньке
    а всё потому, что некому и не на что переписывать заводской софт, который и так прекрасно работает


    1. warlog
      13.10.2015 18:40

      Terranz тогда Вам, действительно, не нужна Oracle 12c :)


  1. Cobolorum
    02.10.2015 19:05

    Стоит софт под oracle 7. Он решает свои задачи, окупился уже раз 5 зачем что то менять?


    1. warlog
      13.10.2015 18:41

      Cobolorum точно так же Вы можете использовать старые процессоры 10-летней давности, сотовые телефоны, телевизоры и любую технику выпускавшуюся в то время :)


  1. toxicdream
    04.10.2015 19:16

    Особенности лицензирования и стандартной технической поддержки Oracle
    http://habrahabr.ru/post/127063/

    12c => c = cloud, это те самые белогривые, которые несутся без оглядки.

    В общем, спасибо, не надо.


    1. warlog
      13.10.2015 18:42

      toxicdream ответ аналогичен предыдущему ответу на вопрос. Вы обвиняете компанию Oracle в том, что она просит деньги за свой продукт, и за свой вложенный труд?
      Ведь Вы же навряд ли отдаете свой продукт бесплатно…