Pull to refresh

Контроль изменения структуры БД

Reading time 2 min
Views 8.8K

Преамбула


Пару лет назад я и мои сотрудники столкнулись с проблемой сопровождения большого количества аналогичных БД на удаленных филиалах. Удалены они иногда на тысячи километров, а объемы исчислялись гигабайтами – что не позволяло использовать какое-либо зеркалирование серверов. Осложнялась ситуация мелкими отличиями, т.е. 95% бизнес-логики филиалов совпадало, но было ещё 5%, которые сильно мешали и ни о какой автоматической обработке группы филиалов не было и речи.

Для данных в итоге было написано приложение синхронизации «общей» структуры, которая собственно и интересовала центральный офис. Однако ключевым моментом являлась именно бизнес-логика: структуры таблиц, триггеры, хранимые процедуры. Т.е. когда происходило обновление логики в центре – те же изменения нужно было произвести и по всем филиалам, и не сломать при этом индивидуальные особенности каждого филиала.

Вторым моментом, который требовалось упорядочить, была работа команды с большой БД (более 100 таблиц, десятки тысяч строк SQL в процедурах и триггерах). Вы можете представить ситуацию, когда один программист решает задачу и не специально задевает соседнюю логику или расчет. Отследить такое проблематично.

Постановка задачи


Основные требования к функционалу были простые:
  • возможность сравнения двух БД;
  • автоматическая генерация скрипта на преобразования одной базы в другую;
  • создание «снимка» базы
  • поиск объектов в бизнес логике (поиск зависимостей)

Все это в нашем случае должно было работать на SQLServer 2005+.

Продукт



За несколько недель неполной занятости была написана утилита, которая могла помочь нам со всеми этими напастями. Программа написана на C#.NET 3.5.

Просмотр и анализ структуры БД или снимка.


При просмотре, особенно удобно «вырывать» куски скриптов из процедур, функций, триггеров… Но и создание таблиц и индексов иногда нужно.


Поиск по структуре базы.
Вот здесь более интересно. Ввод имени таблицы, покажет вам не только эту таблицу, а и все ссылки на неё, упоминания в хранимых процедурах, функциях и триггерах. Таким же образом можно искать, например, домены (мы в один момент решили от них отказаться и перевести все типы в стандартные).



Сравнение структур БД и/или снимка структуры БД


Основное окно работы с программой. В верхней части указывается соединение с БД или заранее сохраненный снимок структуры. В нижней части окна отображается полный скрипт на преобразование структуры.


Здесь видно скрипт на изменение конкретного объекта, в данном случае таблицы. Скрипт полного преобразования, всех внешних связей и индексов.


Сравнение двух версий объекта. Похоже на SVN, не так ли? :) Видно новые/удаленные колонки, индексы, связи и т.д. Также видны будут изменения и в коде хранимых процедур — самое важное.


Эпилог



Продукт оказался очень востребован, как у нас так и у знакомых программистов. Оттуда мы узнали ещё одно важное свойство продукта: контролировать действия других разработчиков. :)
На данный момент программа работает только с SQLServer. Но в коде реализация идет по принципу драйверов, т.о. в течении следующего года возможны и другие БД. Естественно не следует понимать данный продукт как 100% анализ изменений структуры БД. Это скорее контроль каркаса и бизнес-логики, а административные элементы остаются на совести админов.

Продукт является полностью свободным, и использоваться должен только во благо :)
Продавать его естественно нельзя.

Скачать программу: архив

UPD: Файл обновлен, баг с невозможностью копирования скрипта. Спасибо seele
Tags:
Hubs:
+49
Comments 42
Comments Comments 42

Articles