|
Персональные инструменты |
|||
|
|
Миграция данных из Oracle в PostgreSQLМатериал из CustisWikiМаксим Трегубов, наш ведущий системный инженер, поделился техническими подробностями миграции данных из СУБД Oracle в Postgres в блоге компании на «Хабрахабре». Какой инструмент для миграции использовался нашими специалистами? Каким образом установить и настроить окружение для перевода? И какие трудности могут возникнуть в процессе миграции? Ответы на эти и другие вопросы — в материале «Миграция данных из Oracle в PostgreSQL» на сайте. «Ландшафт» СУБД в проектах нашей компании до недавнего времени выглядел так: большую часть составляла Oracle, существенно меньшие — MS SQL и MySQL. Но, как известно, нет ничего вечного, и недавно к нам поступил запрос о применимости Postgres в одном из наших проектов. К этой СУБД мы присматривались в последние пару лет очень пристально — посещали конференции, meetup’ы, но вот попробовать ее в «боевых» условиях до недавнего времени не доводилось. Содержание[убрать]Итак, задачаДано: сервер Oracle (single instance) 11.2.0.3 и набор не связанных друг с другом схем общим объемом ~ 50GB. Необходимо: перенести данные, индексы, первичные и ссылочные ключи из Oracle в Postgres. Выбор инструмента миграцииОбзор инструментария для миграции показал наличие как коммерческих инструментов, таких как Enterprise DB Migration Toolkit и Oracle Golden Gate, так и свободного ПО. Перевод был запланирован однократный, поэтому требовалось зрелое средство, вместе с тем понятное и простое. Кроме того, конечно, учитывался и вопрос стоимости. Из свободного ПО наиболее зрелым на сегодняшний день является проект Ora2Pg Жиля Дарольда (Darold Gill), он же во многом превзошел по функционалу и коммерческие варианты. Преимущества, склонившие чашу весов в его сторону:
Принцип работы утилиты командной строки Ora2Pg довольно прост: она соединяется с БД Oracle, сканирует указанную в файле конфигурации схему и выгружает объекты схемы в виде DDL-инструкций в sql-файлы. Сами данные можно как выгрузить в виде INSERT’ов в sql-файл, так и вставить напрямую в созданные таблицы СУБД Postgres. Установка и настройка окруженияВ компании мы используем подход DevOps для создания виртуальных машин, установки необходимого софта, конфигурирования и развертывания ПО. Наш рабочий инструмент — Ansible. Но для того, чтобы облегчить восприятие и не вводить в статью новые сущности, к делу не относящиеся, далее мы будем показывать ручные действия из командной строки. Для тех, кому интересно, мы выкладываем Ansible playbook для всех шагов здесь. Итак, на виртуальной машине с OS Centos 6.6 выполним следующие шаги.
Все дальнейшие действия будут производится из-под учетной записи
Установим Postgres 9.4:
Создадим кластер Postgres:
Настройка доступа сводится к тому, что мы специально понижаем безопасность соединения Postgres для удобства тестирования. Конечно, в продакшн-среде мы не рекомендуем так делать. В файле
Зарегистрируем Postgres как сервис и запустим его:
Для установки Oracle instant client необходимо загрузить с OTN следующие пакеты:
Установим их:
Создадим папку для
Установим следующие переменные окружения (в
И проверим работоспособность.
Если все ок — то получим примерно такой вывод:
Остался последний шаг настройки — установка Оra2pg. Скачиваем с сайта последнюю версию Ora2Pg (на момент написания статьи была версия 15.2). Установим необходимые пакеты:
Установим модуль CPan:
Установим дополнительные модули для Perl:
Распакуем Ora2pg в, скажем,
Соберем Ora2pg:
МиграцияСУБД Postgres по «духу» наиболее близка к Oracle. В обеих хорошо соотносятся типы данных, и там, и там есть такое понятие, как схема. Воспользуемся этим и будем переносить данные «посхемно». Процесс миграции будет состоять из следующих шагов:
Все последующие действия будем выполнять от пользователя
Создадим проект миграции. Проект состоит из набора папок
КонфигурированиеФайл конфигурации Ora2pg довольно объемен, и я остановлюсь только на тех параметрах, которые являются корневыми или потребовались во время миграции наших данных. Про остальные я рекомендую узнать из этой статьи. Секция, описывающая параметры соединения c БД Oracle:
Секция, описывающая, какую схему выгружаем:
И указание, в какую схему загружаем:
Указываем тип экспорта. Параметр
Секция, описывающая параметры соединения c БД Postgres:
Секция конвертации типов данных. Для того, чтобы тип
На этом конфигурационные шаги закончены, и мы готовы приступить к переносу. Выгрузим описания схемы в виде набора sql-файлов c DDL объектов:
Создадим базу данных
Выполним импорт sql-файла c DDL таблиц:
Теперь все готово к копированию данных. Запускаем:
Несмотря на тот факт, что в командной строке мы указываем параметр Остался последний шаг — создать индексы и constraints.
Если в процессе выполнения предыдущих команд вы не получили ошибок — поздравляю, миграция прошла успешно! Но, как известно из закона Мёрфи: "Anything that can go wrong will go wrong". Наши подводные камниПервый подводный камень уже был упомянут выше: тип Следующей сложностью оказалось то, что в Postgres нет типа, аналогичного Подведем итогиУтилита Ora2Pg, несмотря на сложность настройки, проста и надежна в использовании. Ее смело можно рекомендовать для миграции небольших и средних БД. Кстати, ее автор на PGConf Russia объявил о том, что начинает проект MS2Pg. Звучит многообещающе. Удачных миграций! |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||