prosync

prosync — утилита для проигрывания изменений из базы данных-источника в базе данных-приёмнике другого типа

Синтаксис

prosync config generate [параметр...]

prosync init [параметр...]

prosync run [параметр...]

prosync complete [параметр...]

Описание #

prosync — это утилита для захвата изменений (CDC, Change Data Capture) из базы данных-источника и воспроизведения этих изменений в базе данных-приёмнике другого типа.

prosync не отвечает за:

  • Перенос схемы базы данных.

  • Перенос данных, отсутствующих в файлах журналов.

  • Проверку данных после их переноса.

Поддерживаемые операции #

  • DML: INSERT, UPDATE, DELETE

  • DDL: TRUNCATE

Использование #

Перенос базы данных #

prosync участвует в переносе «горячей» базы данных (за подробностями обратитесь к Разделу 4.5).

Подготовка к переносу «горячей» базы данных #

Чтобы подготовиться к переносу «горячей» базы данных, выполните следующие шаги:

  1. Подготовьте и настройте базу данных-приёмник для переноса:

    • Создайте необходимые схемы и таблицы.

    • Удалите или отключите триггеры.

  2. Сгенерируйте файл конфигурации:

    prosync config generate -o имя_файла
  3. Обновите файл конфигурации, указав нужные значения.

  4. Проинициализируйте prosync с помощью команды:

    prosync init -f имя_файла

    Для источника Oracle prosync сохранит текущий SCN, чтобы начинать последующую репликацию с этого значения. А для источника PostgreSQL/Postgres Pro prosync создаст слот логической репликации для последующего чтения изменений.

Перенос «горячей» базы данных #

Выполните перенос следующим образом:

  1. Запустите загрузку данных с помощью procopy:

    procopy load -f имя_файла
  2. После завершения загрузки запустите проигрывание изменений с помощью prosync:

    prosync run -f имя_файла
  3. Дождитесь, пока разница между значениями Parsing SCN и Oracle latest SCN уменьшится до допустимого уровня. При переносе «горячей» базы данных особенно важно добиться того, чтобы эта разница уменьшалась:

    Parsing SCN          3671057
    Oracle latest SCN    4995972
    
  4. Отключите нагрузку на базу данных-источник и дождитесь, пока значения Parsing SCN и Oracle latest SCN практически перестанут меняться. Затем остановите prosync.

    Примечание

    В Oracle изменения происходят постоянно, даже если никто не вносит явных изменений в данные, поэтому значение Oracle latest SCN непрерывно увеличивается. По этой причине разница между Parsing SCN и Oracle latest SCN никогда не будет равной нулю.

Исключение столбцов из задач типа Table #

При выполнении задач типа Table (за подробностями обратитесь к Подразделу «Типы задач») в рамках переноса данных с использованием prosync не исключайте (через параметры exclude_columns или include_columns) столбцы, которые LogMiner использует в качестве ключей строк. В противном случае команды DELETE или UPDATE могут затронуть сразу несколько строк.

Для таблиц без ключей (куч) нельзя исключать ни один столбец, так как LogMiner использует всю строку для идентификации.

Примечание

Эти правила не применяются, если перенос данных выполняется только с помощью procopy.

Замечания для источников PostgreSQL/Postgres Pro #

При миграции БД PostgreSQL/Postgres Pro требуется слот репликации для проигрывания изменений, выполняемого prosync. Поэтому:

  • Перед запуском команды prosync run, выполняющей проигрывание изменений, выполните команду init, которая создаст слот репликации.

  • По завершении работы run выполните команду complete, которая очистит слот репликации.

Работа с Shardman #

В этом разделе описано, как prosync работает с Shardman как с источником данных.

Конфигурация #

Например, в YAML-файле конфигурации укажите:

source:
    driver_name: shardman
    shards:
        shard-1:
            dsn: postgresql://host1:5432,host2:5432/postgres?user=postgres&password=fqs291dbb&target_session_attrs=prefer-standby
        shard-2:
            dsn: postgresql://host3:5432,host4:5432/postgres?user=postgres&password=fqs291dbb&target_session_attrs=prefer-standby

Где shard-1 и shard-2 — имена сегментов, а параметры dsn указывают BiHA-узлы в этих сегментах.

Примечание

Когда для параметра source.driver_name установлено значение shardman, конфигурацию каждого сегмента необходимо указать явно. Топология не определяется автоматически. Однако см. Подраздел «Частичное указание сегментов».

Для target_session_attrs в dsn возможны следующие значения:

  • read-write, primary — соединение устанавливается только с ведущим узлом. Если ведущий узел меняется или недоступен, происходит переподключение к ведущему узлу.

  • read-only — соединение всегда устанавливается с резервным узлом. Если текущий узел становится ведущим или недоступен, происходит переподключение к другому резервному узлу.

  • prefer-standby — предпочтительно соединение устанавливается с резервным узлом. Если в BiHA-кластере есть несколько резервных узлов, выполняется переподключение к одному из них. Если остаётся только ведущий узел, выполняется переподключение к нему.

Настройте параметр prosync_options следующим образом:

  • Установите для параметра use_replica_auto_sync_slots значение true, если требуются слоты репликации для отработки отказа и репликация резервного узла BiHA-кластера.

  • Задайте для параметра use_failover_slots значение true, если требуются слоты репликации для отработки отказа и репликация только ведущего узла.

  • Рекомендуется задать для параметра use_replica_auto_sync_slots значение true и в dsn установить для target_session_attrs значение prefer-standby.

Частичное указание сегментов #

По умолчанию исключать сегменты из файла конфигурации запрещено, так как это может привести к потере данных в приёмнике при работе с сегментированными и локальными таблицами. Однако запуск команды prosync init или run с флагом --allow-partial-shardman-read позволяет исключить некоторые сегменты. Если флаг установлен, prosync будет работать без указания всех сегментов в файле конфигурации. Это полезно, когда:

  • Данные вручную распределены по сегментам и располагаются, например, в определённых локальных таблицах.

  • Данные располагаются только в глобальных таблицах или требуются только данные из этих таблиц.

Обработка глобальных таблиц #

Глобальные таблицы обрабатываются только из одного сегмента. Сегмент выбирается путём сортировки имён сегментов в файле конфигурации.

В выбранном сегменте создаётся два слота репликации:

  • слот только для глобальных таблиц;

  • слот для сегментированных и локальных таблиц.

В других сегментах создаются слоты репликации только для сегментированных и локальных таблиц.

Обработка локальных таблиц #

По умолчанию обработка локальных таблиц запрещена, так как её результат в приёмнике непредсказуем. Однако команда init или run с флагом --allow-shardman-local-tables может обрабатывать локальные таблицы. Это полезно, когда:

  • В соответствии с бизнес-логикой локальные таблицы во всех сегментах содержат разные данные.

  • Локальная таблица располагается в одном из сегментов.

Дополнительная информация #

Поддерживаются задачи типов Schema или Table . За подробной информацией обратитесь к Подразделу «Типы задач».

Если в файле конфигурации указана локальная таблица, расположенная в одном из сегментов, в этом сегменте будет автоматически создан слот репликации, который включает эту таблицу.

Таким образом для разных локальных таблиц в разных сегментах будут создаваться слоты репликации с разными именами и списками таблиц.

Команда prosync run выводит статистику, специфичную для Shardman. За подробной информацией обратитесь к Подразделу «Выводимая статистика».

Справка по командной строке #

Данный раздел описывает команды prosync. Необязательные параметры заключены в квадратные скобки.

config generate #

prosync config generate [-f|--format json|yaml]
[-o|--output имя_файла] [-c|--source_config]
[глобальные_параметры]

Создаёт файл конфигурации для prosync.

-f json|yaml
--format json|yaml

Указывает формат файла конфигурации: JSON или YAML. По умолчанию используется YAML.

-o имя_файла
--output имя_файла

Указывает имя файла конфигурации. По умолчанию файл выводится в стандартный поток вывода (stdout).

-c
--source-config

Использовать файл конфигурации procopy в качестве основы для файла конфигурации prosync и дополнить его недостающими параметрами.

init #

prosync init -f|--file имя_файла [-u|--update-config]
[--allow-partial-shardman-read] [--allow-shardman-local-tables]
[глобальные_параметры]

Получает текущий SCN из базы данных-источника. Все узлы, указанные в файле конфигурации, должны быть доступными.

-f имя_файла
--file имя_файла

Имя файла конфигурации, в котором заданы параметры подключения.

-u
--update-config

Использовать файл конфигурации procopy в качестве основы и дополнить его недостающими параметрами.

--allow-partial-shardman-read

Запускаться без указания всех сегментов кластера в файле конфигурации. Это может привести к потере данных.

--allow-shardman-local-tables

Обрабатывать локальные таблицы кластера Shardman. Это может привести к несогласованным данным в приёмнике.

run #

prosync run -f|--file имя_файла
[--log-level error|warn|info|debug] [--dry-run|--read-only]
[-c|--clear] [--with-table-stats] [--with-dev-stats] [--allow-key-exclude]
[--allow-partial-shardman-read] [--allow-shardman-local-tables]
[--final-scn] [--skip-scn-save]
[глобальные_параметры]

Запускает проигрывание изменений из базы данных-источника в базе данных-приёмнике. Выводит статистику при воспроизведении изменений.

-f имя_файла
--file имя_файла

Имя файла конфигурации, в котором заданы параметры подключения.

--log-level error|warn|info|debug

Уровень детализации сообщений. По умолчанию используется уровень info.

--dry-run

Отключает запись в базу данных-приёмник. prosync выполнит все действия, кроме записи. Этот флаг полезен для оценки производительности записи без её фактического выполнения.

--read-only

Отключает всю логику prosync, кроме чтения из базы данных-источника. Этот флаг полезен для оценки производительности чтения.

-c
--clear

Очищает экран перед каждой новой выдачей статистики. При включении этого режима рекомендуется перенаправить вывод журналов в файл, например:

prosync run ... -c 2>prosync.log
--with-table-stats

Собирать и выводить прогресс в разрезе таблиц и операций. За подробной информацией обратитесь к Подразделу «Выводимая статистика».

--with-dev-stats

Собирать и выводить статистику разработки. За подробной информацией обратитесь к Подразделу «Выводимая статистика».

--allow-key-excude

Позволяет исключить из репликации ключевые столбцы. Если флажок установлен, для таблиц с уникальными ограничениями и таблиц-куч prosync может некорректно обрабатывать включение или исключение некоторых столбцов. Устанавливайте его с осторожностью, учитывая риск потери данных.

--allow-partial-shardman-read

Запускаться без указания всех сегментов кластера в файле конфигурации. Это может привести к потере данных.

--allow-shardman-local-tables

Обрабатывать локальные таблицы кластера Shardman. Это может привести к несогласованным данным в приёмнике.

--final-scn string

SCN, при котором завершается синхронизация. Значение по умолчанию — «0».

--skip-scn-save

Не сохранять SCN.

Выводимая статистика #

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

  • Общие измерения — общая статистика в формате таблицы:

    • Read — количество операций, прочитанных из источника.

    • Write — количество операций, записанных в приёмник.

    • Transactions — количество прочитанных транзакций.

    • Read bytes — количество прочитанных байтов.

    • Write bytes — количество записанных байтов.

  • Сегменты — статистика по сегментам в формате таблицы (для источника Shardman):

    • Shard name — имя сегмента. При переносе глобальных таблиц строка с именем сегмента с окончанием «_global» добавляется к статистике по переносу глобальных таблиц из этого сегмента.

    • State — текущий статус: receiveLogs — чтение или ожидание чтения данных из источника; processLogs — обработка прочитанных данных; reconnecting — переподключение.

    • Time lag — время, на которое приёмник отстаёт от источника. Вычисляется как разница между временем завершения последней перенесённой операции в источнике и текущим временем на исходном сервере.

    • Bytes lag — отставание от источника в байтах. Вычисляется как разница между LSN последней перенесённой операции в источнике и текущим LSN на исходном сервере. Учитываются операции со всеми таблицами на исходном сервере.

    • Avg 60 sec, speed — средняя скорость записи байтов в приёмник за 60 секунд.

  • Дополнительно — дополнительная общая статистика:

    • Confirmed data time — время перенесённых данных на исходном сервере. Вычисляется как разница между текущим временем на исходном сервере и максимальным значением Time lag. Это значение может быть полезным при проверке данных в источнике и приёмнике.

    • App time — текущее время в приложении prosync.

    • App duration — длительность работы prosync с начала процесса репликации.

Если установлен флаг --with-table-stats, выводится дополнительная статистика по таблицам:

  • Измерения таблиц — более подробная статистика по таблицам в формате таблицы:

    • <схема>.<имя_таблицы> Insert — количество перенесённых операций Insert, где <схема>.<имя_таблицы> — это имя схемы и таблицы в приёмнике, а Insert — тип перенесённой операции. Каждая перенесённая операция занимает отдельную строку.

    • <схема>.<имя_таблицы> Write bytes — количество перенесённых байтов.

Если установлен флаг --with-dev-stats, выводится дополнительная статистика:

  • Общие измерения:

    • Read time — время, затраченное на чтение данных.

    • Process time — время, затраченное на обработку данных.

    • Write time — время, затраченное на запись данных.

    • Write batch count — количество пакетов, записанных в приёмник.

    • Write, current applying batch importers — количество загрузчиков, которые на данный момент пишут пакеты.

  • Дополнительно

    • Latest batch insert time — время записи последнего пакета.

complete #

prosync complete [-f имя_файла] [глобальные_параметры]

Очищает слот репликации, используемый командой run. Имя слота определяется параметрами в файле конфигурации (по умолчанию config.yaml).

Глобальные параметры #

--log-level string

Уровень детализации журнала. Возможные значения — error, warn, info и debug. Значение по умолчанию — info.