[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-liquibase-chto-takoe-databasechangelog-i-databasechangeloglock":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},957,"chto-takoe-databasechangelog-i-databasechangeloglock",29,"liquibase","Liquibase","💧","Что такое DATABASECHANGELOG и DATABASECHANGELOGLOCK?","DATABASECHANGELOG и DATABASECHANGELOGLOCK — две служебные таблицы, которые Liquibase автоматически создаёт в БД при первом запуске для отслеживания состояния миграций и предотвращения конкурентного выполнения.\n\n### DATABASECHANGELOG\n\nХранит информацию о каждом применённом changeset:\n\n| Столбец | Описание |\n|---|---|\n| `ID` | Идентификатор changeset |\n| `AUTHOR` | Автор changeset |\n| `FILENAME` | Путь к файлу changelog |\n| `DATEEXECUTED` | Дата и время применения |\n| `ORDEREXECUTED` | Порядковый номер выполнения |\n| `EXECTYPE` | Тип выполнения (EXECUTED, FAILED, SKIPPED, RERAN, MARK_RAN) |\n| `MD5SUM` | Контрольная сумма (checksum) changeset |\n| `DESCRIPTION` | Описание типа изменения |\n| `COMMENTS` | Комментарий из changeset |\n| `TAG` | Тег (если был проставлен) |\n| `LIQUIBASE` | Версия Liquibase |\n| `CONTEXTS` | Контексты changeset |\n| `LABELS` | Метки changeset |\n| `DEPLOYMENT_ID` | Идентификатор развёртывания |\n\n### DATABASECHANGELOGLOCK\n\nПредотвращает одновременное выполнение миграций несколькими экземплярами приложения:\n\n| Столбец | Описание |\n|---|---|\n| `ID` | Идентификатор (обычно 1) |\n| `LOCKED` | Флаг блокировки (true\u002Ffalse) |\n| `LOCKGRANTED` | Время установки блокировки |\n| `LOCKEDBY` | Хост, который установил блокировку |\n\nПеред началом миграции Liquibase устанавливает `LOCKED = true`, а после завершения — `LOCKED = false`. Если приложение аварийно завершилось во время миграции, блокировка может «зависнуть». В этом случае можно вручную снять блокировку:\n\n```bash\nliquibase releaseLocks\n```\n\nИли SQL:\n\n```sql\nUPDATE DATABASECHANGELOGLOCK SET LOCKED = FALSE, LOCKGRANTED = NULL, LOCKEDBY = NULL WHERE ID = 1;\n```\n\n> **На собеседовании:** важно назвать обе таблицы и объяснить их назначение. Практический вопрос, который часто задают: «что делать, если блокировка зависла?» — нужно знать про releaseLocks.","","junior",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Что такое DATABASECHANGELOG и DATABASECHANGELOGLOCK? — Gymterview","DATABASECHANGELOG и DATABASECHANGELOGLOCK — две служебные таблицы, которые Liquibase автоматически создаёт в БД при первом запуске для отслеживания состояния ми","DATABASECHANGELOG и DATABASECHANGELOGLOCK — две служебные таблицы, которые Liquibase автоматически создаёт в БД при перв",[7,13],"DATABASECHANGELOG и DATABASECHANGELOGLOCK — две служебные таблицы, которые Liquibase автоматически создаёт в БД при первом запуске для отслеживания состояния миграций и предотвращения конкурентного выполнения.",true]