Фон
В моей группе 4 базы данных SQL Server:
- Производство
- УАТ
- Тест
- Dev
Я работаю в среде разработчиков. Когда приходит время продвигать объекты, над которыми я работал (таблицы, представления, функции, хранимые процедуры), я делаю запрос моего менеджера, который продвигает Test. После тестирования она отправляет запрос администратору, который продвигает UAT. После успешного пользовательского тестирования тот же администратор продвигает в производство.
Проблема
Весь процесс неудобен по нескольким причинам.
- Каждый человек должен вручную отслеживать свои изменения. Если я обновляю, добавляю, удаляю любые объекты, которые мне нужны, чтобы отслеживать их, чтобы мой запрос на продвижение содержал все, что я сделал. Теоретически, если я что-то пропускаю, тестирование или UAT должны его поймать, но это не совсем точно, и в любом случае это пустая трата времени тестера.
- Множество изменений, которые я делаю, являются итеративными и выполняются в графическом интерфейсе, что означает, что нет записи о том, какие изменения я внес, только конечный результат (по крайней мере, насколько я знаю).
- Мы находимся на довольно ранних стадиях построения витрины данных, поэтому большинство внесенных изменений, по крайней мере, в подсчете, незначительны: изменение типа данных для столбца, изменение имен таблиц как мы кристаллизуем, для чего они будут использоваться, настраиваем функции и хранимые процедуры и т. д.
Вопрос
Люди занимались такой работой десятилетиями, поэтому я думаю, что должен быть намного лучший способ управлять процессом. Что бы мне понравилось, если бы я мог запустить diff между двумя базами данных, чтобы увидеть, как структура отличается, использовать этот diff для генерации сценария изменений, использовать этот сценарий изменений в качестве моего запроса на продвижение. Это возможно? Если нет, есть ли другие способы организовать этот процесс?
Для справки, мы на 100% Microsoft, только что обновив все до SQL Server 2008, поэтому любые инструменты, доступные в этом пакете, будут честной игрой.
Я должен уточнить, что я не обязательно ищу инструменты сравнения. Если это лучший способ синхронизации наших сред, то это хорошо, но если есть лучший способ, я ищу это.
Пример, делающий то, что я действительно хочу, это миграция в Ruby on Rails. Простой простой синтаксис, все изменения хорошо документированы автоматически, и по умолчанию определить, какие миграции необходимо выполнить, почти тривиально просто. Я хотел бы, чтобы было что-то подобное для SQL Server.
Мое идеальное решение: 1) легко и 2) сложно все испортить. Рельсы Миграции оба; все, что я до сих пор делал на SQL Server, - ни то, ни другое.