стенды с базами данных между собой и как встраивать обновление баз в процесс CI/CD. В докладе будут рассмотрены два подхода к миграции баз данных, рыночные инструменты для решения таких задач в стеке технологий Microsoft, наш опыт смены подхода и сложности, с которыми мы столкнулись. 2
эталонное состояние БД Состояние хранится в терминах create В любой момент времени любая БД может быть приведена к эталону Скрипт создается только на дельту между эталоном и БД Полуавтоматическая генерация скриптов alter Разработчики могут работать в любом редакторе SQL или в дизайнере Сложности со встройкой в процесс миграции скриптов на изменения данных (ручная работа) Нет эталонного состояния БД Есть начальное состояние БД и набор скриптов изменений Низкий порог входа в подход Со временем количество скриптов накапливается, усложняются зависимости между ними Увеличение времени наката патчей из-за увеличения количества скриптов Сложности с мерджем скриптов, когда два разработчика вносили изменения в один и тот же объект Полностью скриптовый подход Скрипты пишутся на внутреннем языке инструмента (в большинстве) Так же ручные скрипты для изменения данных Требуется установка своих артефактов на БД (для отслеживания версионности)
выбранном репозитории (svn, git и др.) исходные коды БД Нужен для организации работы с БД как с обычным кодом: branch, merge и т. д. Отслеживает изменения, сравнивает версии средствами репозитория State-based migration: хранится эталонное состояние Change script-based migration: начальное состояние и инкремент 8
Data Compare Datasource Control Liquibase Datical Visual Studio Database projects (.dacpac) Open source Нет Да Нет Подход State-based Change script-based State-based Скрипты SQL Основной и рекомендуемый XML, есть поддержка SQL-скриптов SQL Артефакты работы в БД Нет Да Необязательно Интерфейс GUI Console GUI Поддерживаемые БД MS SQL Server, Oracle Database MS SQL Server, PostgreSQL, Oracle Database и другие MS SQL Server
сбору и подготовке патчей → повышается трудоемкость рутинных операций Необходимость изучения языка написания скриптов Проблемы стабилизации Неаккуратность разработчиков 11
(серверов мало: в каждом продукте 4–5 серверов, включая боевой) В патчах используются параметры (например, PWD_OF_RMS). Патчер автоматически заменяет эти параметры на нужные значения (на разных серверах они могут быть разными) Загрузка и установка патча в контуре CUSTIS автоматизированы (делаются из командной строки или по нажатию на кнопку в TeamCity) Проверка невалидных объектов после установки патча/фикса Рассылка писем об успешном завершении установки патча Отслеживание времени, которое заняла установка патча 14
шаги почти никто не делает? Как обеспечить идентичность схем баз данных, созданных from scratch и инкрементными обновлениями? Как использовать реальные данные на тестовом стенде, но не засветить конфиденциальную информацию перед новыми заказчиками или аутсорсерами? 26