SET_ENTITY_LOCK

Содержание раздела
  1. Синтаксис
  2. Варианты ответа
  3. Результат выполнения
    1. Включение режима
    2. Выключение режима
  4. Ограничения
  5. Примеры
    1. Включение режима «Только для чтения»
    2. Выключение режима «Только для чтения»

Поддерживается в версиях: 7.8.

В зависимости от параметров запрос включает или выключает режим «Только для чтения» для указанной логической сущности на всех нодах кластера. При включении режима запрос может проигнорировать или отменить незавершенные операции записи в сущности (см. Синтаксис).

Режим действует независимо от режима, включенного на уровне окружения.

Подробнее о режиме см. в разделе Режим «Только для чтения».

Синтаксис

SET_ENTITY_LOCK([db_name.]entity_name, enable_mode[, erase_running_write_ops])

Аргументы запроса могут быть заданы как индексированные и (или) именованные параметры.

Параметры:

db_name (часть строкового идентификатора)

Имя логической базы данных, которой принадлежит сущность. Опционально, если выбрана логическая БД, используемая по умолчанию.

entity_name (строковый идентификатор | его часть)

Имя логической сущности, для которой включается или выключается режим «Только для чтения».

Можно указать имя любой сущности, но блокируются только операции, перечисленные в разделе Режим «Только для чтения» > Что блокируется.

enable_mode (boolean)

Флаг, управляющий режимом «Только для чтения» для сущности. Возможные значения:

  • true — включить режим;
  • false — выключить режим.
erase_running_write_ops (boolean)

Флаг, управляющий отменой выполняемых в сущности операций записистатусе 0) при включении режима. Возможные значения:

  • false (по умолчанию) — игнорировать операции, не отменяя их, и сразу вернуть ответ;
  • true — отменить операции и вернуть ответ только после завершения отмены.

При выключении режима флаг игнорируется.

После выполнения SET_ENTITY_LOCK(<entity_name>, true[, false]) убедитесь, что все операции записи в сущности завершены (GET_WRITE_OPERATIONS не возвращает операций по ней). При наличии незавершенных операций дождитесь их завершения или отмените их.

Варианты ответа

В ответе возвращается:

  • пустой объект ResultSet при успешном выполнении запроса;
  • исключение при неуспешном выполнении запроса.

Результат выполнения

Включение режима

При успешном включении режима «Только для чтения» система:

  1. Устанавливает для сущности запрет на новые операции по изменению схемы* и операции записи.
  2. Если запущен с флагом отмены выполняемых операций записи, выполняет следующие действия для сущности:
    1. Дожидается завершения ее операций записи в статусе 1 (Подготовлена).
    2. Запускает отмену ее операций записи в статусе 0 (Выполняется) и дожидается завершения процесса в течение DELTA_ROLLBACK_OPERATIONS_TIMEOUT_MS.
    3. Если в процессе сменился лидер кластера, новый лидер автоматически завершает включение режима и отмену операций.
    4. Если операции не успели отмениться за DELTA_ROLLBACK_OPERATIONS_TIMEOUT_MS, исполнение завершается с ошибкой.
  3. Возвращает ответ.

* Операции по изменению схемы блокируются для логических, снапшот- и постоянных прокси-таблиц, а также логических и материализованных представлений.

Выключение режима

При успешном выключении режима «Только для чтения» запрос:

  1. Снимает для сущности запрет на новые операции по изменению схемы и операции записи.
  2. Возвращает ответ.

Ограничения

  • Выключение режима для сущности недоступно, пока предыдущий запрос SET_ENTITY_LOCK включает режим для нее с отменой операций записи.
  • Запрос, отменяющий операции записи:
    • не гарантирует консистентность данных при отмене операций загрузки данных из Kafka в ADB;
    • завершается неуспешно, если операции записи не удалось отменить в течение DELTA_ROLLBACK_OPERATIONS_TIMEOUT_MS. В этом случае дождитесь завершения отмены операций и повторите команду.

Примеры

Включение режима «Только для чтения»

Включение режима для сущности без отмены выполняемых операций записи:

SET_ENTITY_LOCK(marketing.sales, true);

-- равносилен запросу
SET_ENTITY_LOCK(marketing.sales, true, false);

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

SET_ENTITY_LOCK(marketing.sales, true, true)

Включение режима для сущности в логической БД, выбранной по умолчанию, без отмены выполняемых операций записи:

-- выбор marketing в качестве логической БД по умолчанию
USE marketing;

-- включение режима для логической таблицы sales
SET_ENTITY_LOCK(sales, true);

Выключение режима «Только для чтения»

SET_ENTITY_LOCK(marketing.sales, false)