Перейти к основному содержимому

Настройка репликации DDL операций через пользовательский интерфейс

GraDeLy поддерживает возможность репликации DDL операций.

Предусловия​

  • Окружение настроено для репликации DDL операций;
  • Данный сценарий доступен пользователю с ролью, обладающей привилегией на редактирование.

Последовательность выполнения​

Активация репликации DDL операций на пользовательском интерфейсе выполняется на вкладке Графы репликации при редактировании свойств модулей захвата и применения. По умолчанию функциональность выключена.

  1. Нажмите модуль на графе.

    ddl_module

    примечание

    Если поле Параметр по захвату DDL изменений в значении False, то функциональность выключена.

  2. Нажмите Редактировать в открывшемся окне Модуль.

    ddl_edit1

  3. Нажмите тумблер Включить функцию захвата DDL изменений в окне Редактирование свойств модуля и нажмите Сохранить.

    ddl_edit2

  4. Перейдите обратно на вкладку Модуль. Поле Параметр по применению DDL изменений будет изменен на True.

  5. Для активации репликации DDL операций действия пунктов 1-4 необходимо выполнить для модуля захвата и применения.

Результат​

Активирована репликация DDL операций через пользовательский интерфейс.

Ограничения​

Репликация DDL операций имеет ряд ограничений:

  • Захватываются DDL операции, вызывающие срабатывание необходимых примененных триггеров на БД источнике.
  • При публикации таблиц из БД-источника по отдельному списку (настраивается при создании публикации), события создания новых таблиц не влияют на конфигурацию захвата.
  • Не гарантируется поддержка и успешное исполнение специфичных для экземпляра БД команд и их параметров (например, указание tablespace, специфичных путей в файловой системе сервера и других при создании объектов).
  • Сбой в выполнении DDL операции приводит к невозможности гарантировать дальнейшую консистентность данных.
  • Теги '--START NOREPLICATE' и '--END NOREPLICATE' для исключения конкретных операций из захвата не работают с командой TRUNCATE.
  • В wal-журнал отправляется только init query (например, при создании таблицы с PK, не отправляем query создания INDEX).
  • В DDL операции необходимо явное указание схемы.
  • При создании партиции при помощи механизма автопартиционирования, не отправляется в wal-журнал query создания партиции.
  • DDL операции 'CREATE AS SELECT'(видна в WAL как insert, потом create) не реплицируются.
  • В триггере не захватываются DDL операции c CONCURRENTLY.
  • Доступна репликация создания sequence. Значения sequence не реплицируются.
  • Не реплицируются операции DDL в do блоках.
  • Не реплицируются операции DDL в функциях и процедурах.

Автоматическое добавление таблиц к публикации​

Поведение Gradely при создании в базе-реплике новых таблиц зависит от принципа отбора таблиц (черные/белые списки) и от состояния репликации DDL.

Если реплицируются все таблицы (или часть таблиц исключается по принципу «черных» списков), но не включена репликация DDL, то автоматизация добавления таблиц невозможна.

Если включена репликация DDL и режим создания публикации установлен в strict или smart , то модуль захвата, получив событие создания таблицы:

  1. открывает дополнительный сеанс в БД;
  2. проверяет, что новую таблицу следует добавить в список репликации (либо используется «черный» список и новая таблица не исключена; либо используется «белый» список, и новая таблица включена);
  3. проверяет возможность репликации новой таблицы (пользователь входит в группу владельцев таблицы);
  4. если репликация возможна, таблица добавляется в список репликации командой ALTER PUBLICATION;
  5. обработка фиксируется в журнале событий с важностью WARNING (чтобы даже при минимальном уровне детализации администратор видел событие).
Внимание!

Если в источнике сразу же после создания новой таблицы идет обращение к ней, модуль захвата Gradely может пропустить транзакции, выполненные до изменения публикации.