Преамбула
Пару лет назад я и мои сотрудники столкнулись с проблемой сопровождения большого количества аналогичных БД на удаленных филиалах. Удалены они иногда на тысячи километров, а объемы исчислялись гигабайтами – что не позволяло использовать какое-либо зеркалирование серверов. Осложнялась ситуация мелкими отличиями, т.е. 95% бизнес-логики филиалов совпадало, но было ещё 5%, которые сильно мешали и ни о какой автоматической обработке группы филиалов не было и речи.
Для данных в итоге было написано приложение синхронизации «общей» структуры, которая собственно и интересовала центральный офис. Однако ключевым моментом являлась именно бизнес-логика: структуры таблиц, триггеры, хранимые процедуры. Т.е. когда происходило обновление логики в центре – те же изменения нужно было произвести и по всем филиалам, и не сломать при этом индивидуальные особенности каждого филиала.
Вторым моментом, который требовалось упорядочить, была работа команды с большой БД (более 100 таблиц, десятки тысяч строк SQL в процедурах и триггерах). Вы можете представить ситуацию, когда один программист решает задачу и не специально задевает соседнюю логику или расчет. Отследить такое проблематично.
Постановка задачи
Основные требования к функционалу были простые:
- возможность сравнения двух БД;
- автоматическая генерация скрипта на преобразования одной базы в другую;
- создание «снимка» базы
- поиск объектов в бизнес логике (поиск зависимостей)
Все это в нашем случае должно было работать на SQLServer 2005+.
Продукт
За несколько недель неполной занятости была написана утилита, которая могла помочь нам со всеми этими напастями. Программа написана на C#.NET 3.5.
Просмотр и анализ структуры БД или снимка.
При просмотре, особенно удобно «вырывать» куски скриптов из процедур, функций, триггеров… Но и создание таблиц и индексов иногда нужно.
Поиск по структуре базы.
Вот здесь более интересно. Ввод имени таблицы, покажет вам не только эту таблицу, а и все ссылки на неё, упоминания в хранимых процедурах, функциях и триггерах. Таким же образом можно искать, например, домены (мы в один момент решили от них отказаться и перевести все типы в стандартные).
Сравнение структур БД и/или снимка структуры БД
Основное окно работы с программой. В верхней части указывается соединение с БД или заранее сохраненный снимок структуры. В нижней части окна отображается полный скрипт на преобразование структуры.
Здесь видно скрипт на изменение конкретного объекта, в данном случае таблицы. Скрипт полного преобразования, всех внешних связей и индексов.
Сравнение двух версий объекта. Похоже на SVN, не так ли? :) Видно новые/удаленные колонки, индексы, связи и т.д. Также видны будут изменения и в коде хранимых процедур — самое важное.
Эпилог
Продукт оказался очень востребован, как у нас так и у знакомых программистов. Оттуда мы узнали ещё одно важное свойство продукта: контролировать действия других разработчиков. :)
На данный момент программа работает только с SQLServer. Но в коде реализация идет по принципу драйверов, т.о. в течении следующего года возможны и другие БД. Естественно не следует понимать данный продукт как 100% анализ изменений структуры БД. Это скорее контроль каркаса и бизнес-логики, а административные элементы остаются на совести админов.
Продукт является полностью свободным, и использоваться должен только во благо :)
Продавать его естественно нельзя.
Скачать программу: архив
UPD: Файл обновлен, баг с невозможностью копирования скрипта. Спасибо seele