prosync — утилита для проигрывания изменений из базы данных-источника в базе данных-приёмнике другого типа
prosync config generate [параметр...]
prosync init [параметр...]
prosync run [параметр...]
prosync complete [параметр...]
prosync — это утилита для захвата изменений (CDC, Change Data Capture) из базы данных-источника и воспроизведения этих изменений в базе данных-приёмнике другого типа.
prosync не отвечает за:
Перенос схемы базы данных.
Перенос данных, отсутствующих в файлах журналов.
Проверку данных после их переноса.
prosync участвует в переносе «горячей» базы данных (за подробностями обратитесь к Разделу 1.3).
Чтобы подготовиться к переносу «горячей» базы данных, выполните следующие шаги:
Подготовьте и настройте базу данных-приёмник для переноса:
Создайте необходимые схемы и таблицы.
Удалите или отключите триггеры.
Сгенерируйте файл конфигурации:
prosync config generate -o имя_файлаОбновите файл конфигурации, указав нужные значения.
Проинициализируйте prosync с помощью команды:
prosync init -f имя_файлаДля источника Oracle prosync сохранит текущий SCN, чтобы начинать последующую репликацию с этого значения. А для источника PostgreSQL/Postgres Pro prosync создаст слот логической репликации для последующего чтения изменений.
Выполните перенос следующим образом:
Запустите загрузку данных с помощью procopy:
procopy load -f имя_файлаПосле завершения загрузки запустите проигрывание изменений с помощью prosync:
prosync run -f имя_файлаДождитесь, пока разница между значениями Parsing SCN и Oracle latest SCN уменьшится до допустимого уровня. При переносе «горячей» базы данных особенно важно добиться того, чтобы эта разница уменьшалась:
Parsing SCN 3671057 Oracle latest SCN 4995972
Отключите нагрузку на базу данных-источник и дождитесь, пока значения 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 требуется слот репликации для проигрывания изменений, выполняемого prosync. Поэтому:
В этом разделе описано, как 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. Необязательные параметры заключены в квадратные скобки.
prosync config generate [-f|--formatjson|yaml] [-o|--outputимя_файла] [-c|--source_config] [глобальные_параметры]
Создаёт файл конфигурации для prosync.
-f json|yaml--format json|yamlУказывает формат файла конфигурации: JSON или YAML. По умолчанию используется YAML.
-o имя_файла--output имя_файлаУказывает имя файла конфигурации. По умолчанию файл выводится в стандартный поток вывода (stdout).
-c--source-configИспользовать файл конфигурации procopy в качестве основы для файла конфигурации prosync и дополнить его недостающими параметрами.
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. Это может привести к несогласованным данным в приёмнике.
prosync run -f|--fileимя_файла[--log-levelerror|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 stringSCN, при котором завершается синхронизация. Значение по умолчанию — «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 — время записи последнего пакета.
prosync complete [-fимя_файла] [глобальные_параметры]
Очищает слот репликации, используемый командой run. Имя слота определяется параметрами в файле конфигурации (по умолчанию config.yaml).
--log-level stringУровень детализации журнала. Возможные значения — error, warn, info и debug. Значение по умолчанию — info.