C # библиотека для базы данных diff (ing) - PullRequest
3 голосов
/ 30 августа 2011

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

В соответствии с почти всеми другими проектами разработки нам нужна возможность привести производственную схему в соответствие с новейшей схемой разработки без потери производственных данных.

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

Текущий подход полностью автоматизирован, но он не учитывает столбцы, которые были просто переименованы. Различия в определениях таблиц (DBMS_METADATA_DIFF) не дают никаких машинно-понятных подсказок о том, что удаление столбца с последующим добавлением столбца фактически является переименованием столбца. Для человека переименование столбца может быть очевидным, особенно если переименование представляет собой просто грамматическое исправление или выбор более подходящего имени.

Я пытаюсь решить эту проблему, написав собственный генератор сценариев diff для базы данных и добавив логику для определения переименований столбцов (с поддержкой вмешательства, подтверждения и т. Д.). Теперь я совершенно уверен, что мне нужно изобретать другое колесо.

Есть ли хорошие библиотеки с открытым исходным кодом, на которые мне стоит взглянуть? Я предпочитаю C #, но, поскольку я работаю с Oracle, возможно, есть несколько хороших реализаций Java. Любые указатели приветствуются.

1 Ответ

1 голос
/ 30 августа 2011

Мы используем API RedGate SQL Compare и SQL Data Compare для создания дифференциальной схемы и сценариев обновления данных между нашей базой данных начальной загрузки и нашими целевыми (клиентскими) базами данных во время установки. Это работает очень хорошо. RedGate предлагает сопоставимый продукт Oracle (не использовал его, поэтому ваш пробег может отличаться)

http://www.red -gate.com / продукты / оракул-разработка / схема-сравнения-в-оракула / .

PS, я знаю, что это не открытый исходный код, но я думаю, вам будет сложно найти такую ​​же простую в использовании библиотеку, как эта.

...