О продукте
O2PG Migrator — компонент семейства O2PG, отвечающий за перенос структур базы и данных из Oracle в PostgreSQL. Предназначен для сценариев, где требуется аккуратная конвертация объектов, сохранение бизнес-логики и минимизация простоя.
Возможности
- автоматическая и полуавтоматическая конвертация схем;
- перенос больших объёмов данных пакетами и потоком;
- проверка целостности и отчётность о расхождениях;
- интеграция с O2PG Proxy, чтобы приложения работали во время миграции.
Быстрый старт
Мигратор запускается отдельным контейнером или шагом CI/CD-пайплайна.
Рабочий поток
- scan — аудит схем и данных: объёмы, типы, зависимости.
- generate — генерация DDL и маппинг типов для целевой базы.
- pilot — перенос справочников и небольших таблиц.
- bulk — перенос основного объёма данных пакетами с проверками.
- delta & cut-over — синхронизация дельт и переключение.
Порядок важен: каждый шаг опирается на результат предыдущего, а scan определяет, какие таблицы попадут в пилот, а какие поедут пакетами.
Запуск
docker run --rm \
-v /path/to/config:/app/config \
cr.yandex/o2pg/migrator:latest \
--config /app/config/migrator.yaml
Конфигурация
docker-compose.yml
services:
migrator:
image: cr.yandex/crpgr3sfcpa3lqqkvupn/o2pg-migrator:latest
volumes:
- ./migrator-config:/app/config
environment:
- MIGRATOR_CONFIG=/app/config/migrator.yaml
restart: on-failure
migrator.yaml
source:
type: oracle
dsn: "oracle://user:pass@oracle-host:1521/ORCL"
target:
type: postgres
dsn: "postgresql://user:pass@pg-host:5432/postgres"
mapping:
default_varchar_size: 4000
clob_to_text: true
batch:
size: 10000
parallel_workers: 4
validation:
enabled: true
checksum: md5
Разделы конфигурации
| Раздел | Ключ | Назначение |
|---|---|---|
source |
dsn |
строка подключения к исходной базе Oracle |
target |
dsn |
строка подключения к целевой базе PostgreSQL |
mapping |
default_varchar_size |
длина VARCHAR по умолчанию при конвертации |
mapping |
clob_to_text |
переносить CLOB в text |
batch |
size |
число строк в одном пакете переноса |
batch |
parallel_workers |
сколько таблиц переносится одновременно |
validation |
enabled |
сверять источник и приёмник после переноса |
validation |
checksum |
алгоритм контрольной суммы для сверки |
Вопросы и ответы
Можно ли выполнить миграцию без простоя?
Полностью избежать простоя удаётся не всегда. Стандартный подход — минимизировать окно cut-over: перенести историю и основной объём данных заранее, затем синхронизировать дельты и переключиться. На практике окно измеряется часами, а не выходными.
Поддерживаются ли materialized views и сложные триггеры?
Материализованные представления и триггеры обрабатываются индивидуально: мигратор генерирует DDL и предлагает стратегию переноса, но сложные триггеры могут потребовать ручной доработки.
Как проверяется, что данные перенесены верно?
При validation.enabled: true мигратор считает контрольные суммы на источнике и приёмнике и сверяет их построчно по пакетам. Расхождения попадают в отчёт с указанием таблицы и диапазона строк.
Как получить лицензию?
Свяжитесь с нами — после проверки мы выдадим ключ для файла config.env, который используется контейнером.