Конвертум Стрим: архитектура и принципы работы
Инструмент Конвертум Стрим — специализированный инструмент для эффективной миграции данных из Oracle в PostgreSQL.
Архитектура и принцип работы
Настройка исходной базы данных (Oracle)
Настройка целевой базы данных (PostgreSQL)
Основные процессы и управление проектом миграции
Режимы консистентности
Расширенная настройка: параметры миграции
Системные требования и ограничения
Архитектура и принцип работы
Решение обеспечивает высокую скорость передачи данных и минимальное время простоя за счет итеративного управления миграцией.
Такой подход обеспечивает согласованность данных между исходной и целевой системами даже в случае постоянных изменений на стороне источника во время основной загрузки данных.
Решение полностью работает в PostgreSQL с использованием Foreign Data Wrappers (оберток сторонних данных), не требует установки дополнительного ПО на сервер Oracle и взаимодействует с источником в режиме «только чтение». Оно поддерживает параллельную обработку и обеспечивает пропускную способность 250+ ГБ/час на один поток (в зависимости от оборудования, сети и типов данных).
Управление всем процессом (создание проектов, выбор таблиц, запуск/пауза/остановка, мониторинг прогресса и задержки) осуществляется через удобный графический интерфейс Конвертум Стрим GUI.
Схематично принцип работы выглядит следующим образом:

Графический интерфейс позволяет управлять проектами, настраивать подключения, выбирать таблицы, отслеживать прогресс и контролировать процесс миграции без необходимости глубокого знания SQL.
Список поддерживаемых баз данных, которые могут выступать как источником, так и целью для вашей миграции данных, представлен в таблице ниже.
| Исходные базы данных | Целевые базы данных |
|---|---|
| Oracle RDBMS (версия 11 и выше) | PostgreSQL RDBMS (версия 14 и выше) Включает все совместимые форки (Tantor, Postgres Pro и другие) и управляемые облачные сервисы, где возможно установить все необходимые расширения для работы Конвертум Стрим |
Настройка исходной базы данных (Oracle)
Исходная база данных — это Oracle версии 10 и выше. Для миграции требуется только выделенный пользователь с правами только на чтение и набором конкретных привилегий. База данных должна быть доступна по сети с сервера PostgreSQL (необходима корректная настройка межсетевых экранов, TNS-листенера и разрешения имени сервиса).
На стороне Oracle не устанавливается никакого дополнительного ПО, не создаются триггеры, дополнительные объекты, столбцы и не вносятся изменения в схемы.
Выполните следующий скрипт от имени администратора Oracle (роль SYS или любой пользователь с правами DBA), чтобы назначить необходимые привилегии (пример имени: ORACLE_USER):
GRANT CREATE SESSION, CONNECT TO ORACLE_USER;
GRANT SELECT, FLASHBACK ON <schema>.<table> TO ORACLE_USER;
GRANT SELECT, FLASHBACK ON ALL_TAB_COLUMNS, all_objects, dba_tables,
dba_extents, dba_segments, dba_indexes, dba_lobs,
V_$DATABASE TO ORACLE_USER;
Для оптимизации (быстрый пропуск неизмененных таблиц) также можно предоставить следующие права (не является обязательным):
GRANT SELECT, FLASHBACK ON ALL_TAB_MODIFICATIONS, ALL_TAB_STATISTICS,
V_$LOCKED_OBJECT, V_$TRANSACTION TO ORACLE_USER;
GRANT ANALYZE ANY TO ORACLE_USER;
Настройка целевой базы данных (PostgreSQL)
Целевая база данных — это PostgreSQL версии 14 и выше (включая все форки, такие как Postgres Pro, Tantor и т.д.). В этой базе размещается весь миграционный механизм Конвертум Стрим: управляющая схема, функции, метатаблицы и фоновые задачи.
Все перечисленные ниже расширения должны быть установлены до создания первого проекта миграции. Установка выполняется один раз суперпользователем (обычно postgres) в той базе данных, где будет размещаться управляющая схема миграции.
| Расширение | Назначение |
|---|---|
| postgres_fdw | Loopback-соединения внутри PostgreSQL |
| dblink | Удаленные запросы и управление соединениями |
| oracle_fdw | Прямой read-only доступ к таблицам Oracle |
| pg_cron | Фоновое планирование итераций миграции |
| plv8 | Исполнение WebAssembly/JavaScript для внутренних операций |
Примечание: Если хотя бы одно из расширений отсутствует или установлено некорректно — инициализация проекта завершится ошибкой. Рекомендуется выполнить проверку расширений до начала реальной миграции.
Основные процессы и управление проектом миграции
Рабочий процесс миграции в Конвертум Стрим строго последовательный и состоит из нескольких ключевых этапов.
-
Инициализация — создание управляющей (контрольной) схемы миграции.
-
Создание/валидация таблиц— перенос структуры (или привязка уже созданных целевых таблиц) с возможностью кастомного маппинга названия схем, таблиц и колонок.
-
Миграция — запуск фонового итеративного процесса (pg_cron). Таблицы в целевой схеме должны быть пустыми.
-
Мониторинг — отслеживание итераций, задержки, батчей и ошибок.
Для управления процессом реализованы следующие команды, которые доступны в проекте:
- Пауза — временно приостанавливает обработку выбранных таблиц. Все уже завершённые батчи текущей итерации сохраняются. После паузы миграцию можно возобновить с того же места без потери прогресса. Таблицы на паузе блокируют переход всего проекта на следующую итерацию (в режиме полной консистентности).
- Остановка — немедленно прерывает текущую итерацию. Все незавершённые батчи отбрасываются. После остановки таблицы переходят в неактивное состояние, но метаданные сохраняются — миграцию можно запустить заново.
- Плавная остановка — самый «мягкий» и рекомендуемый способ завершения. Текущая итерация доводится до конца, после чего новые итерации запрещаются. Все активные таблицы переходят в режим завершения. Используется, когда источник стабилен и нужно получить максимально свежий согласованный срез данных перед переключением на целевую базу.
-
Финализация — после остановки миграции автоматическое удаление управляющей схемы и метаданных.
После финализации проект считается завершенным. Целевая схема становится «чистой» — в ней остаются только перенесенные данные и структура без какого-либо мусора от миграционного механизма. Возобновить миграцию в этой же управляющей схеме уже невозможно.
Примечание: Миграция выполняется в фоновом режиме (через pg_cron) повторяющимися итерациями до тех пор, пока не будет остановлена вручную. Закрытие графического интерфейса или браузера не останавливает миграцию.
Режимы консистентности
Доступны три режима (выбираются глобально или по каждой таблице отдельно):
- Полная — Данные считываются по фиксированному SCN. Все изменения становятся видимыми в целевой базе атомарно и одновременно после завершения итерации. Гарантируется отсутствие “грязного чтения”. Рекомендуется для финальной синхронизации перед переключением на целевую базу.
- Частичная — Изменения применяются асинхронно по мере поступления. Более быстрый режим, подходит для начальной миграции больших объёмов данных. Согласованность обеспечивается на уровне отдельной таблицы.
- Гибридная — сбалансированный режим. Данные считываются по фиксированному SCN, но становятся видимыми в PostgreSQL сразу после обработки. Оптимальный компромисс между скоростью и согласованностью.
Примечание: В режиме «Полная» все таблицы ждут друг друга перед переходом на следующую итерацию.
Ослабление режима консистентности во время миграции
Если текущий режим консистентности слишком строгий (особенно это касается режима «Полная»), его теперь можно ослабить режим для конкретной таблицы во время активной миграции, без потери уже перенесенных данных в текущей итерации.
Расширенная настройка: параметры миграции
Параметры миграции — настраиваемый список параметров системного уровня, которые управляют поведением процесса миграции, такими как параллелизм, размер пакетов, обработка ошибок и оптимизация производительности. Настраиваются на уровне проекта и позволяют тонко управлять производительностью и нагрузкой.
| Параметр миграции | Значение по умолчанию | Назначение |
|---|---|---|
| MIGRATION_THREADS_POOL_SIZE | 1 | Максимальное количество рабочих потоков |
| WAIT_SECONDS_AFTER_ITERATION | 3 | Задержка между итерациями |
| USE_MODIFICATION_STATISTICS_MODE | ON | Оптимизация пропуска неизменённых таблиц |
| VACUUM_TABLE_SIZE_GROWTH_FACTOR | ≈2.2 | Порог для автоматического VACUUM FULL |
| MAX_CYCLES_IN_ONE_TASK_WORKER_PROCESS | 15 | Максимум пакетов на один воркер |
| MAX_ROWS_COUNT_IN_ONE_TASK_WORKER_PROCESS | 1 000 000 | Максимум строк на воркер |
| MAX_ROWS_BYTES_IN_ONE_TASK_WORKER_PROCESS | 1 ГБ | Максимальный объём данных на воркер (критично для CLOB/BLOB) |
| MAX_SECONDS_IN_ONE_TASK_WORKER_PROCESS | 900 (15 мин) | Максимальное время работы воркера |
| INTERNAL_RETRYABLE_ERROR_ATTEMPTS_COUNT | 10 | Количество внутренних повторов при временных ошибках |
Опции Таблицы — это параметры, настраиваемые отдельно для каждой таблицы. Данные параметры задаются через специальные функции настройки и позволяют добиться оптимального баланса ресурсов при одновременной миграции таблиц разного размера и характера изменений. Доступны только когда таблица полностью остановлена.
| Параметр | Значение по умолчанию | Назначение |
|---|---|---|
| ROWS_QUANTITY_COST_IN_BATCHES | 0.0000001 | Стоимость одной строки в единицах батчей Конвертум Стрим. Используется для балансировки нагрузки между одновременно мигрируемыми таблицами (чем больше строк — тем выше «вес» таблицы) |
| ROWS_SIZE_COST_IN_BATCHES | 0.0000001 | Стоимость одного байта в единицах батчей IDM. Используется для балансировки по объёму данных (важно для таблиц с большими BLOB/CLOB) |
| BLOCKS_COUNT_PER_TASK | 1024 | Количество блоков Oracle, на которое разбивается батч для создания задач. Меньшие значения дают большую гранулярность, но увеличивают накладные расходы |
| TABLE_OUT_PLACE_ROWS_SIZE_TRESHOLD | 0.1 × начальный_размер_таблицы | Порог изменения размера таблицы (в байтах) за итерацию, при превышении которого включается режим дефрагментации (debloat) — автоматический VACUUM FULL |
| SOURCE_ROWS_VERSIONS_PREFETCH_COUNT | 1000 | Количество строк, извлекаемых за один fetch из Oracle при сравнении версий строк (для определения, какие строки изменились) |
| SOURCE_ROWS_VERSIONS_WAIT_AFTER_PREFETCH_SECONDS | NULL (без задержки) | Искусственная задержка в секундах после каждого fetch при сравнении версий строк (для снижения нагрузки на источник) |
| SOURCE_ROWS_CONTENT_PREFETCH_COUNT | 1000 | Количество строк, извлекаемых за один fetch при получении актуального содержимого измененных строк (upsert) |
| SOURCE_ROWS_CONTENT_WAIT_AFTER_PREFETCH_SECONDS | NULL (без задержки) | Искусственная задержка в секундах после каждого fetch при получении содержимого измененных строк (для снижения нагрузки на источник) |
Системные требования и ограничения
Требования:
- Oracle RDBMS 10+.
- PostgreSQL 14+.
- Прямое сетевое соединение от PostgreSQL к Oracle (TNS).
- Лицензия (онлайн-проверка через Licensing Server или оффлайн-режим).
Ограничения:
- Не поддерживаются системные объекты Oracle, сложный динамический SQL, VARRAY/UDT без кастомных формул.
- При DDL или TRUNCATE на Oracle текущая итерация автоматически перезапускается.
- Целевые таблицы должны быть пустыми до старта миграции.
- Максимальная длина имён объектов ограничена правилами PostgreSQL.
Требования для машины, на которую будет установлен Конвертум Стрим (для работы графического интерфейса)
- Windows: Windows 10, 11 или более поздние версии.
- Процессор: Intel Pentium 4 или новее, с поддержкой SSE3.
- Оперативная память (RAM): Минимум 1 ГБ (для комфортной работы рекомендуется от 4 ГБ).
- Место на диске: Не менее 700 МБ свободного пространства.
Версии для Linux предоставляются по запросу.