Pull to refresh

Comments 42

Молодцы.
Всегда нравились люди которые не жмутся выложить собственные тулзы бесплатно.
Полностью согласен. И присоединяюсь к выше сказанному.
На .net-е это не проблема ;)
Что именно?

Как делается сканирование структуры? С помощью «exec sp_help», «exec sp_helptext», а также иногда выборки из системных таблиц.

Генерация скриптов? Ну тут много «if(a != b) ....» :)
Позновательного там не много.
Таки зажали :) "… а что там пробовать — сало оно и в африке сало..."
Если быть честным, есть кусок кода который будет использован в коммерческом продукте, отсюда и скрытность. Может быть после его выпуска, эту утилиту отдам с потрохами.
По секрету вам скажу (из своего опыта написания парсеров структур БД), там действительно либо куча if — else, либо switch, либо они же в хитрых комбинациях. Хотя в 3.5 LINQ должен помочь избавиться от этого.
Эх, такую бы штуку под PostgreSQL :)
Но у нас не много филиалов, справляемся вручную…
Опа, спасибо!
Судя по описанию — то, что надо. Попробуем в деле.
Вы таки написали статью :) Спасибо, интересно, и утилита, судя по всему, весьма полезная. Жаль, что с MySQL ее нельзя использовать… впрочем, если сделаете её опенсорсной, я уверен, что такая возможность скоро появится :)

У меня вопрос. Когда вы писали про свою утилиту первый раз, в комментариях к моей статье про версионную миграцию БД, вы упоминали, что планируете также сделать возможность миграции данных, в дополнение к миграции структуры БД. Было бы интересно узнать, как именно вы это планируете реализовать.

P.S. Может быть, стоит упомянуть в статье, что эта утилита помогает реализовать «Метод уподобления структуры БД исходному коду» из статьи по ссылке выше?
P.P.S. Возможно, статье больше подойдет название типа «Утилита для версионной миграции БД», + соответствующие теги?
Миграция данных ещё в проекте, много текущих задач. Как это будет? Пока не сделаю — ничего точно сказать не могу, вариантов то много :)

«Метод уподобления структуры БД исходному коду» из статьи по ссылке выше — не пойму о чем речь.
Понял что за уподобление… Оно похоже но не совсем, ведь я не оперирую скриптами — я их создаю на основе сравнения снимков. Т.е. снимок создается при сканировании БД и потом сравнивается с аналогичным. Здесь скорее библиотека классов описывающих структуру БД.

То что вы описали: подходит в моем случае только для хранимых процедур, функций и триггеров.
Круто;)

Я лет 15 как использую PowerDesigner(S-Designer) и в кооперативных проектах использую Modify Database. Но версионный контроль триггеров/хранимых процедур в нём головная боль. Плюс он стоит прилично денег.

Для контроля пакетов (читай хряп, триггеров) вполне подходит SVN. Но в вашей разработке удобный просмотр изменений. Красиво.
В IBExpert — это инструмент администрирования для Interbase/Firebird. Уже давно есть подобная функция — Сравнение БД, сравнивает структуру, генерирует скрипты для приведения в одинаковый вид, для данных есть аналогичная вещь.
Давно ею успешно пользуюсь.

Чего не хватает там — фильтра для структуры, т.е. когда нужно синхронизировать часть объектов, а не все. Ну критерием для фильтра могла бы быть принадлежность той или иной схеме, но в Interbase/Firebird нет схем. Устроил бы фильтр по регулярке от имени объекта.
Там есть фильтр по видам объектов, но его бывает недостаточно, да.

Еще один минус — невозможно увидеть что именно изменилось в процедурах/триггерах. Процедура дропается целиком, причем вместе с зависимыми процедурами, и потом создается заново.
Да меня интересует фильтр не по видам, а исходя из логики проекта. Т.е. по именам.

Ну с просмотром изменений проще — можно из двух баз выдрать метаданные и сравнить два скрипта, как два текстовых файла. Конечно, хорошо бы, чтоб это было автоматизировано.
Боюсь предложить, но рискну, попробуйте использовать Rails Migrations :) Сайты создавать не нужно, достаточно иметь рельсовый проект и размещать в нем только миграции, при мне однажды так делалось на PHP-проекте.
Есть замечательный продукт, SQL Toolbet
Он платный, есть триал. Если триала не хватает, вводите
i need more time
вместо серийника. Несколько раз сработает. Очень удобная программа :)

На днях знакомый рассказывал, что для версионности можно использовать что-то из старших редакций Visual Studio 2010, но я ещё не пробовал.
Хорошая утилита, вернее комплекс — но очень дорогой. Да и недостаток такого рода продуктов их чрезмерная мощность. Нам как и многим другим просто не нужна будет большая часть функционала.

А про студию, я знаю — но и она платная, да и пользуются ли ею все пользователи SQLServer (express)?
У всех подобных тулзов (да и всего процесса версионирования БД) есть одна проблема, мешающая их промышленному применению. Я покажу на примере.
Допустим, история базы была такой:
Версия  Изменение
------- -----------------------------------------
1.0     create table t (id...
1.1     alter table t add column c ...
1.2     alter table t add constraint c_fk foreign key © references...
1.3     create index t_c on t ©
1.4     alter index t_c disable
        update t set c = -1 where c is null
        alter table t add constraint c_ck check (c is not null)
        alter index t_c rebuild

На момент выхода релиза 1.4 на целевой базе может быть схема данных любой версии, вплоть до 1.0. Соответственно, для корректного приведения ее к версии 1.4 могут потребоваться разные действия и разная реакция на возможные ошибки.

Как ваш процесс (с участием вашей тулзы) решает эту задачу? как выглядят скрипты после тестирования и выпуска для наката в production, и как они применяются к целевой БД?
Я упоминал, что программа не 100% панацея. Она умеет: генерировать скрипты и выстраивать их в правильном порядке (индекс не будет создан до добавления поля в таблицу). Ну а ситуации с выключением индексов и проверкой зависимостей я вообще не обрабатывал, не было нужды. Все что накопится в этом обсуждении возможно будет добавлено в следующих версиях.
Отвечали выше
Я же могу сказать — что буду делать аналогичное для PosgreSQL, MySQL, Oracle. Другие БД о-о-очень сомнительно.
Про тот инструмент знаю, но там очень много ручной работы…
А почему сомнительно для других? Выкладывайте на github или в google.code — народ поможет. Лично мне пригодилось бы для FB.

Сейчас, как я понимаю, доступ к MSSQL осуществляется нативными средствами .NET?
Напрямую ядро не работает с базами, а только со снимками. Драйвер может использовать что угодно (для SQLServer — нативный интерфейс).

Честно — никогда не делал проекты в github или в google.code. Но и здесь загвоздка в коммерческой составляющей о которой я писал выше.

Дойдет дело до открытия исходников — будут создано множество драйверов.
Использую для контроля изменения структуры БД Oracle самописную программку oracle-ddl2svn.
Ставлю ее на расписание, чтобы она выкачивала всю схему БД в виде DDL-скриптов и коммитила их в систему контроля версий SVN.
Написана на Java, Spring.

Народ качает, пользуется. Даже шлют положительные отзывы.
Пользуюсь для этих целей AdeptSQL — очень доволен.
Здорово, что у вас открытый код, хотя слова «полностью свободен» и «продавать нельзя» несколько противоречят друг другу.
Продавать то что отдано даром — это как? :) Кажется это обман покупателя…
Полностью свободен проект скомпилированный — т.е. для использования.
Вообще, странно, что в SQL Server до сих пор не появилось никакого механизма версионирования, хотя бы кода хранимых процедур и функций. Неужели это так сложно сделать? Приходится либо забивать на версии и хранить всё в базе, либо постоянно параллельно держать набор запросов MODIFY.
В Visual Studio 2010 есть такая возможность как сравнение-синхронизация-выгрузкавскрипты-проектбазывскриптах.
Очень удобно.
Выше описал ситуацию.
Строго говоря, SQLServer — это любой сервер БД, поддерживающий язык SQL. Мы конечно понимаем, что речь идет о продукте Microsoft, но все же.
Ссылка устарела, можете перезалить?
С удовольствием пользовался этой программкой, да вот только удалилась она, а найти нигде не могу.
Sign up to leave a comment.

Articles