Проект
Мы ~ 50 разработчиков, плюс сотрудники DevOps и работаем ~ 30 Oracle 12 c EE. Мы ввели Liquibase в 2018 году.
Мы используем плагин Liquibase Maven версии 3.8.8, журналы изменений хранятся в многочисленных проектах Maven, они передаются в subversion в обычной структуре trunk / tag / branch.
Цель
Мы хотим упростить подготовку новых экземпляров базы данных с помощью версий выпуска, соответствующих соответствующим средам. Типичным примером использования является установка базы данных fre sh в среде интеграционных тестов.
Можно начать с пустой схемы базы данных и применить журналы изменений до определенной версии. К сожалению, журналы изменений, которые применялись к схеме, часто хранятся в разных проектах Maven. Это затрудняет их поиск.
Liquibase НЕ сохраняет фактическое содержание набора изменений (конкретный DDL) в таблице DATABASECHANGELOG
. Это решило бы проблему.
В поисках решения я сначала использовал maven, чтобы сохранить ревизию SVN журнала изменений в DATABASECHANGELOG
при выполнении обновления liquibase :. Получение журналов изменений на основе номера версии было подвержено ошибкам.
Я потратил неделю сейчас, чтобы найти надежное решение, гуглил в течение нескольких часов и построил несколько тестовых случаев (с адаптированными родительскими и бетонными помпами, частично используя плагин maven scm и тому подобное), но без удачи. Изначально я планировал использовать тег liquibase: для хранения пути к файлу + ревизии, но это работает, только если все наборы изменений находятся в одном файле журнала изменений, а это не так.
Конечно, желательно иметь все Журналы изменений хранятся в ОДНОМ месте, но это не всегда возможно. Например, сценарии, которые требуют привилегий администратора баз данных, должны быть зафиксированы в дополнительных проектах maven. Мне нужна надежная ссылка между каждым набором изменений и соответствующим файлом журнала изменений, или журнал изменений должен быть сохранен непосредственно в DATABASECHANGELOG
.
При нашей текущей настройке «Управление версиями базы данных» с Liquibase невозможно. Существует теоретическая прослеживаемость, но пользователи могут каким-то образом найти оригинальные журналы изменений в огромном беспорядке из 100+ отдельных проектов Maven.
Вопрос 1. Можно ли сохранить фактический контент журнала изменений для каждый набор изменений в DATABASECHANGELOG
?
Вопрос 2: Если нет, как можно сохранить ссылку между записью DATABASECHANGELOG
и исходным файлом журнала изменений?
(Кроме того, что происходит, когда файл журнала изменений удаляется из Subversion случайно? DATABASECHANGELOG
просто сообщает мне дату и время изменения, некоторые детали и имя файла - довольно бесполезно, потому что фактический файл будет удален, и не будет никакого способа восстановить фактический DDL. Чтобы предотвратить такой сценарий, я бы сделал резервную копию всех файлов изменений. Для этого метаданные DATABASECHANGELOG
недостаточно, поскольку Liquibase не отслеживает версии SVN и пути к файлам.)