Настройка репликации DDL операций через пользовательский интерфейс
GraDeLy поддерживает возможность репликации DDL операций.
Предусловия
- Окружение настроено для репликации DDL операций;
- Данный сценарий доступен пользователю с ролью, обладающей привилегией на редактирование.
Последовательность выполнения
Активация репликации DDL операций на пользовательском интерфейсе выполняется на вкладке Графы репликации при редактировании свойств модулей захвата и применения. По умолчанию функциональность выключена.
-
Нажмите модуль на графе.
примечаниеЕсли поле Параметр по захвату DDL изменений в значении False, то функциональность выключена.
-
Нажмите Редактировать в открывшемся окне Модуль.

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

-
Перейдите обратно на вкладку Модуль. Поле Параметр по применению DDL изменений будет изменен на True.
-
Для активации репликации 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 , то модуль захвата, получив событие создания таблицы:
- открывает дополнительный сеанс в БД;
- проверяет, что новую таблицу следует добавить в список репликации (либо используется «черный» список и новая таблица не исключена; либо используется «белый» список, и новая таблица включена);
- проверяет возможность репликации новой таблицы (пользователь входит в группу владельцев таблицы);
- если репликация возможна, таблица добавляется в список репликации командой ALTER PUBLICATION;
- обработка фиксируется в журнале событий с важностью WARNING (чтобы даже при минимальном уровне детализации администратор видел событие).
Если в источнике сразу же после создания новой таблицы идет обращение к ней, модуль захвата Gradely может пропустить транзакции, выполненные до изменения публикации.