Генерация скрипта создания базы данных с учетом зависимостей Автор: Максим Масунов, 545 группа Санкт-Петербургский государственный университет Математико-Механический факультет Кафедра системного программирования Научный руководитель: Графеева Н.Г. Рецензент: Помыткина Т.Б. Проблема Скрипты разложены по разным файлам Table1.sql Table1.sql Tables.sql Table1.sql Table1.sql Views.sql Table1.sql Table1.sql Triggers.sql Скрипты находятся в одном текстовом файле DataBase.sql Создание скрипта с учетом зависимостей Application Script.sql DataBase Существующие инструменты Aqua Data Studio* EMS SQL Advanced Manager Query Tool * UDB Toad for Workbench DB2 freeware -Tables + + + + - -Views + + + + - -Aliases + + - + - -Sequences + + - + - -Indexes + + - + - -Triggers + + - + - -Procedures + + - + - -Functions + + - + - -User Datatypes Зависимости + + - + - - - - - - Патчи - - - + - Freeware - - - - + Алгоритм создания объектов Создание графа зависимостей ◦ Порядок создания объектов ◦ Поиск зависимостей Топологическая сортировка ◦ Проверка ацикличности Обход графа с выводом результата Порядок создания объектов Пользовательские типы … Таблицы … Индексы … Встроенные процедуры, функции, представления … Поиск зависимостей Независимые объекты 1-й уровень зависимости 2-й уровень зависимости k-й уровень зависимости Процедура_ 2 Процедура_1 Представление_3 Процедура_3 Функция_ 1 Проверка на ацикличность Процедура_3 Процедура_2 Процедура_1 Решение .NET DLL GUI Скрипт создания всех объектов с учетом зависимостей DB2 UDB Задача, часть 2 Синхронизация SQL-схем Revision 58 DataBase.sql Update Revision 59 DataBase.sql Средствами контроля версий Не всегда удобно ◦ Сравнивают строки, а не объекты ◦ Не создают скрипта, а лишь показывают различия ◦ Может не понять, если поменять местами два текстовых блока без обрамляющих “\n”. Приложить резервную копию Могут быть различные данные ◦ Например, пользователи Sample ◦ 22 таблицы по 20-30 записей ◦ Резервная копия заняла 102 Мб Решение .NET DLL Новая SQLсхема в XML формате GUI Скрипт-патч DB2 Изменение схемы таблиц Переименование колонок Изменение размера колонок Изменение типов колонок и приведение существующих данных к новому типу, используя встроенные скалярные функции Изменение точности Изменение значений по умолчанию Изменение NULL/NOT NULL Удаление колонок Отличие от существующих Для создания патча не требуется подключения к обеим базам данных Достаточно файла с новой схемой и подключения к базе данных со старой схемой Скрипт может быть выполнен, так как объекты выстроены в порядке, учитывающем зависимости Код приложения полностью открытый Результат Проведено сравнение с существующими инструментами Разработан алгоритм создания объектов с учетом зависимостей Разработан алгоритм создания патчей Реализована программная система ◦ Работает на платформе .NET 3.5 ◦ Использует DB2 Universal DataBase v 9.5 Спасибо за внимание! Вопросы?