Каковы лучшие практики для управления изменениями схемы и конфигурации базы данных?
какие инструменты ты используешь?
Майкл
Есть отличная серия статей К. Скотта Аллена через Coding Horror: поставьте свою базу данных под контроль версий о контроле версий базы данных. Они ориентированы на SQL Server, но могут быть применимы к другим средам.
Боюсь, мне нравится старый школьный подход с использованием собственных инструментов dbms для сброса схемы в текстовый файл и помещения его в систему контроля версий. Я уверен, что некоторые из модных инструментов хорошо справляются со своей задачей, но мой существующий набор инструментов отлично подходит для моих нужд. Я бы рассмотрел только причудливые вещи, если бы я необходимо автоматическая миграция или что-то в этом роде. YMMV.
Важным моментом для управления этим является ограничение разрешений и наличие критической точки, через которую проходят изменения развертывания. Вы можете использовать систему VCS с базой данных, просто убедитесь, что люди проверяют файлы сценариев туда и обратно. Даже если они используют инструмент для внесения изменений, они должны получить сценарий, используемый для фактического внесения этих изменений (SQL Server включает эту возможность, но не уверен в других платформах).
Сохраните файлы сценариев, как и любой другой файл для вашего приложения, в VCS.
я приобрел сценарий VBS, который использует SQL-DMO для сценария SQL Serverобъекты. Затем он использует SourceSafe интеграция для проверки их в системе контроля версий. Запустите его каждую ночь, и у вас будет исторический DDL.
C:\WINNT\system32\cscript.exe vssAgent.vbs theServerName
vssAgent.vbs (Ссылка 1, Ссылка 2, Ссылка 3)
Вам нужно будет настроить некоторые логины / пароли в vbs
чтобы соответствовать вашим учетным данным VSS.
Вместо того, чтобы хранить фактические сценарии DDL, я управляю исходным кодом описания метаданных схемы, которые можно сравнить с другой базой данных. я использую SchemaCrawler - бесплатный инструмент с открытым исходным кодом для командной строки, который я написал на Java и предназначенный для этой цели.