SET_ENTITY_LOCK
Содержание раздела
Поддерживается в версиях: 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 (Подготовлена).
- Запускает отмену ее операций записи в статусе 0 (Выполняется) и дожидается завершения процесса в течение
DELTA_ROLLBACK_OPERATIONS_TIMEOUT_MS. - Если в процессе сменился лидер кластера, новый лидер автоматически завершает включение режима и отмену операций.
- Если операции не успели отмениться за
DELTA_ROLLBACK_OPERATIONS_TIMEOUT_MS, исполнение завершается с ошибкой.
- Возвращает ответ.
* Операции по изменению схемы блокируются для логических, снапшот- и постоянных прокси-таблиц, а также логических и материализованных представлений.
Выключение режима
При успешном выключении режима «Только для чтения» запрос:
- Снимает для сущности запрет на новые операции по изменению схемы и операции записи.
- Возвращает ответ.
Ограничения
- Выключение режима для сущности недоступно, пока предыдущий запрос
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)