Разбирая сценарии миграции для инкрементальных обновлений базы данных, я обнаружил, что ни один из готовых инструментов сравнения баз данных (которые я исследовал) не будет создавать сценарии миграции, необходимые для нашего процесса разработки.
В соответствии с почти всеми другими проектами разработки нам нужна возможность привести производственную схему в соответствие с новейшей схемой разработки без потери производственных данных.
До сих пор подход заключался в отбрасывании и воссоздании любого объекта, который не является таблицей (с целью обновления следующих последовательностей до подходящего значения), а затем для обработки различий в таблице путем удаления столбцов, которые больше не существуют, добавления столбцов которые были созданы, переименовывая столбцы, тип или длина которых были изменены, добавляя новые определения столбцов, а затем заполняя измененные столбцы данными, используя соответствующее преобразование типов.
Текущий подход полностью автоматизирован, но он не учитывает столбцы, которые были просто переименованы. Различия в определениях таблиц (DBMS_METADATA_DIFF) не дают никаких машинно-понятных подсказок о том, что удаление столбца с последующим добавлением столбца фактически является переименованием столбца. Для человека переименование столбца может быть очевидным, особенно если переименование представляет собой просто грамматическое исправление или выбор более подходящего имени.
Я пытаюсь решить эту проблему, написав собственный генератор сценариев diff для базы данных и добавив логику для определения переименований столбцов (с поддержкой вмешательства, подтверждения и т. Д.). Теперь я совершенно уверен, что мне нужно изобретать другое колесо.
Есть ли хорошие библиотеки с открытым исходным кодом, на которые мне стоит взглянуть? Я предпочитаю C #, но, поскольку я работаю с Oracle, возможно, есть несколько хороших реализаций Java. Любые указатели приветствуются.