Конвертум Стрим: архитектура и принципы работы

Инструмент Конвертум Стрим — специализированный инструмент для эффективной миграции данных из 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 для внутренних операций

Примечание: Если хотя бы одно из расширений отсутствует или установлено некорректно — инициализация проекта завершится ошибкой. Рекомендуется выполнить проверку расширений до начала реальной миграции.

Основные процессы и управление проектом миграции

Рабочий процесс миграции в Конвертум Стрим строго последовательный и состоит из нескольких ключевых этапов.

  1. Инициализация — создание управляющей (контрольной) схемы миграции.

  2. Создание/валидация таблиц— перенос структуры (или привязка уже созданных целевых таблиц) с возможностью кастомного маппинга названия схем, таблиц и колонок.

  3. Миграция — запуск фонового итеративного процесса (pg_cron). Таблицы в целевой схеме должны быть пустыми.

  4. Мониторинг — отслеживание итераций, задержки, батчей и ошибок.

    Для управления процессом реализованы следующие команды, которые доступны в проекте:

    • Пауза — временно приостанавливает обработку выбранных таблиц. Все уже завершённые батчи текущей итерации сохраняются. После паузы миграцию можно возобновить с того же места без потери прогресса. Таблицы на паузе блокируют переход всего проекта на следующую итерацию (в режиме полной консистентности).
    • Остановка — немедленно прерывает текущую итерацию. Все незавершённые батчи отбрасываются. После остановки таблицы переходят в неактивное состояние, но метаданные сохраняются — миграцию можно запустить заново.
    • Плавная остановка — самый «мягкий» и рекомендуемый способ завершения. Текущая итерация доводится до конца, после чего новые итерации запрещаются. Все активные таблицы переходят в режим завершения. Используется, когда источник стабилен и нужно получить максимально свежий согласованный срез данных перед переключением на целевую базу.
  5. Финализация — после остановки миграции автоматическое удаление управляющей схемы и метаданных.

После финализации проект считается завершенным. Целевая схема становится «чистой» — в ней остаются только перенесенные данные и структура без какого-либо мусора от миграционного механизма. Возобновить миграцию в этой же управляющей схеме уже невозможно.

Примечание: Миграция выполняется в фоновом режиме (через 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 предоставляются по запросу.