prosync
prosync — утилита для проигрывания изменений из базы данных-источника в базе данных-приёмнике другого типа
Синтаксис
prosync config generate [параметр...]
prosync init [параметр...]
prosync run [параметр...]
prosync complete [параметр...]
Описание #
prosync — это утилита для захвата изменений (CDC, Change Data Capture) из базы данных-источника и воспроизведения этих изменений в базе данных-приёмнике другого типа.
prosync не отвечает за:
Перенос схемы базы данных.
Перенос данных, отсутствующих в файлах журналов.
Проверку данных после их переноса.
Поддерживаемые операции #
DML:
INSERT,UPDATE,DELETEDDL:
TRUNCATE
Использование #
Перенос базы данных #
prosync участвует в переносе «горячей» базы данных (за подробностями обратитесь к Разделу 4.5).
Подготовка к переносу «горячей» базы данных #
Чтобы подготовиться к переносу «горячей» базы данных, выполните следующие шаги:
Подготовьте и настройте базу данных-приёмник для переноса:
Создайте необходимые схемы и таблицы.
Удалите или отключите триггеры.
Сгенерируйте файл конфигурации:
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 #
При миграции БД PostgreSQL/Postgres Pro требуется слот репликации для проигрывания изменений, выполняемого prosync. Поэтому:
Работа с 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|--formatjson|yaml] [-o|--outputимя_файла] [-c|--source_config] [глобальные_параметры]
Создаёт файл конфигурации для prosync.
-fjson|yaml--formatjson|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-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-levelerror|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-scnstringSCN, при котором завершается синхронизация. Значение по умолчанию — «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-levelstringУровень детализации журнала. Возможные значения —
error,warn,infoиdebug. Значение по умолчанию —info.