Максим Трегубов, CUSTIS. Миграция данных из Oracle в Postgres. Доклад о том, как мы для одного из заказчиков тестировали переход с СУБД Oracle на Postgres. Расскажем о выборе инструмента миграции данных, настройке тестовой среды и о полученных результатах. Также немного затронем модную тему DevOps и покажем роль Ansible в миграции данных.
4. Почему Postgres?
Три коммитера ядра в России
Сертификация ФСТЭК
Лицензия BSD
Существует компания Postgres Professional:
http://postgrespro.ru
4/24
8. Требования к инструменту миграции
Возможность воссоздания структуры
данных (таблиц, индексов, constraints…)
Быстрота миграции данных (около 50 Гб)
Простота в освоении и надежность
…
Бесплатность
8/24
9. Наш выбор – Ora2Pg
Богатый функционал
Активное развитие проекта на протяжении 15 лет
Open Source, лицензия GPLv3
9/24
10. Подготовка тестового стенда
Создание или обновление стендов
для разработки и тестирования
Oracle, WebLogic, WebSphere, Hadoop, Postgres
Более 100 серверов
10/24
21. SQL
Переписали часть SQL-движка, избавившись
от Oracle-специфичных выражений
Connect by prior
Decode
(+)
…
21/24
22. Итоги
Подтвердили возможность перехода
Не поменяли ни строчки кода в Java
Трудозатраты составили ~ 100 часов
Приложение без PL/SQL
Объем БД – 50 Гб
10 отчетов
35 таблиц
22/24
Участвую в различных активностях на площадках клиентов: встраивание наших продуктов в инфраструктуру клиентов, troubleshooting, нагрузочные тестирования.
Мы создаем приложение для клиента вот с таким стеком технологий. Буквально накануне сдачи клиент обратился к нам с вопросом, можно ли вместо Oracle использовать какую-либо другую СУБД. Просьба клиента была связана с минимизацией рисков санкций и общим трендом импортозамещения.
Проработали MySQL, FireBird (RedDatabase), TiberoDB (аналог Oracle от корейцев), MariaDB.
Критерии сравнения:
стоимость и вид лицензирования;
сертификация, интенсивность развития;
компетенции на рынке, наличие поддержки.
При смене СУБД возникают 2 вопроса.
Возможность портировать данные из Oracle в Postgres «один в один», чтобы совпали типы, точность. Желательно, что бы constraints и indexes также остались.
Трудозатраты по изменению движка отчетов.
За Hibernate мы не волновались, тут все должно было быть хорошо.
Теперь перейдем к шагу по выбору инструмента миграции.
Рассмотрели коммерческие дистрибутивы, такие как Enterprise DB, Oracle Golden Gate (хорош, но денег не сложишь).
И тут – бинго, я вспомнил, что, будучи на PGConf в феврале этого года, посетил доклад Жиля Дарольда об утилите Ora2Pg.
Присмотрелись к продукту поближе и поняли, что это то, что нужно
Он прост, понятен, бесплатен и надежен.
Принцип работы утилиты командной строки Ora2Pg довольно прост: она соединяется с БД Oracle, сканирует указанную в файле конфигурации схему и выгружает объекты схемы в виде DDL-инструкций в sql-файлы. Сами данные можно как выгрузить в виде INSERT’ов в sql-файл, так и вставить напрямую в созданные таблицы СУБД Postgres.
Прежде чем перейти описанию тестового стенда, я бы хотел немного отойти от темы и рассказать, как мы разворачиваем стенды для разработки и тестирования у себя в компании.
Мы разрабатываем ПО для госсектора, финансовых организаций и ритейла. Проектов, идущих параллельно, много, каждый проект – это 2-3 набора серверов, зачастую с разным набором ПО, патчей.
Управлять всем этим хозяйством вручную – очень дорого и долго.
На помощь пришла методология DevOps , в частности – инструмент Ansible.
Мы храним описание инфраструктуры в системе контроля ревизий рядом с кодом, который на ней выполняется, и в любой момент можем эту инфраструктуру воссоздать.
Мы очень активно используем эту утилиту из арсенала DevOps.
Интегрировали ее с VSphere.
Установка и настройка Linux под Oracle, установка ПО Oracle нужной версии, накат нужных патчей – ранее все это занимало в среднем 4 часа.
Потратив на создание Playbook’a для Oracle около 20 часов, мы запускаем его и через 18 минут (можно успеть попить кофе) все готово.
В корне будет лежать файл export_schema.sh.
Файл конфигурации Ora2Pg довольно объемен, и я остановлюсь только на тех параметрах, которые являются корневыми или потребовались во время миграции наших данных.
Указываем тип экспорта. Параметр COPY говорит о том, что мы будем копировать данные напрямую из Oracle в Postgres, минуя текстовый файл.
Для того, чтобы тип number() без указания точности не конвертировался в bigint.
Приложение на данный момент тестируется у заказчика.
По результатам этой работы – статья на «Хабре», митап и, если получится, – участие в конференции.