Gymterview
junior

Что такое DATABASECHANGELOG и DATABASECHANGELOGLOCK?

DATABASECHANGELOG и DATABASECHANGELOGLOCK — две служебные таблицы, которые Liquibase автоматически создаёт в БД при первом запуске для отслеживания состояния миграций и предотвращения конкурентного выполнения.

DATABASECHANGELOG

Хранит информацию о каждом применённом changeset:

Столбец Описание
ID Идентификатор changeset
AUTHOR Автор changeset
FILENAME Путь к файлу changelog
DATEEXECUTED Дата и время применения
ORDEREXECUTED Порядковый номер выполнения
EXECTYPE Тип выполнения (EXECUTED, FAILED, SKIPPED, RERAN, MARK_RAN)
MD5SUM Контрольная сумма (checksum) changeset
DESCRIPTION Описание типа изменения
COMMENTS Комментарий из changeset
TAG Тег (если был проставлен)
LIQUIBASE Версия Liquibase
CONTEXTS Контексты changeset
LABELS Метки changeset
DEPLOYMENT_ID Идентификатор развёртывания

DATABASECHANGELOGLOCK

Предотвращает одновременное выполнение миграций несколькими экземплярами приложения:

Столбец Описание
ID Идентификатор (обычно 1)
LOCKED Флаг блокировки (true/false)
LOCKGRANTED Время установки блокировки
LOCKEDBY Хост, который установил блокировку

Перед началом миграции Liquibase устанавливает LOCKED = true, а после завершения — LOCKED = false. Если приложение аварийно завершилось во время миграции, блокировка может «зависнуть». В этом случае можно вручную снять блокировку:

Пример
liquibase releaseLocks

Или SQL:

Пример
UPDATE DATABASECHANGELOGLOCK SET LOCKED = FALSE, LOCKGRANTED = NULL, LOCKEDBY = NULL WHERE ID = 1;

На собеседовании: важно назвать обе таблицы и объяснить их назначение. Практический вопрос, который часто задают: «что делать, если блокировка зависла?» — нужно знать про releaseLocks.