Схемы базы данных WAY не синхронизированы - необходимо обновляться без потери данных - PullRequest
4 голосов
/ 08 марта 2010

Проблема: у нас есть одно приложение, у которого есть часть, которая используется очень небольшим подмножеством пользователей, и эта часть приложения также выполняется из отдельной базы данных. В идеальном мире схемы двух баз данных будут синхронизированы, но это не так. Некоторые миграции выполнялись в меньшей базе данных, большинство - нет; и, кроме того, нет ничего такого, как номер редакции, чтобы можно было легко определить, кто имеет, а кто нет. Мы хотели бы решить эту проблему для будущих проектов. Во время обсуждения мы разработали следующий возможный план действий, и мне интересно, знает ли кто-нибудь о каком-либо проекте, который уже решил эту проблему:

Что мы хотели бы сделать, это создать пустую базу данных из схемы большой полностью перенастроенной базы данных, а затем переместить все данные из меньшей неперемещенной базы данных в эту пустую. Если это облегчает ситуацию, то, вероятно, ради этой проблемы можно предположить, что никакие миграции никогда ничего не удаляли, а только добавляли.

Иначе, если есть другие известные решения, я бы тоже хотел их услышать.

Ответы [ 3 ]

8 голосов
/ 09 марта 2010

Вы можете использовать инструмент сравнения схем, например SQL Compare от Red-Gate. Вы можете синхронизировать изменения и не потерять какие-либо данные. Я написал об этом и многих других альтернативных инструментах, широко варьирующихся в цене здесь:

http://bertrandaaron.wordpress.com/2012/04/20/re-blog-the-cost-of-reinventing-the-wheel/

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

(Обновлено 2012-06-23, чтобы помочь предотвратить гниение ссылок.)

3 голосов
/ 09 марта 2010

Сравнение SQL в Red-Gate, о котором Аарон Бертран упоминает в своем ответе - очень хороший вариант. Однако, если вам не разрешено приобретать что-либо, можно попробовать что-то вроде:

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

2) запустите DIFF, просмотрите все различия и убедитесь, что небольшая БД может их принять. Если не внедрить какие-либо изменения (включая данные), необходимые для небольшой БД, чтобы она могла принять изменения.

3) создать новую пустую базу данных из схемы большой БД

4) импортировать данные из маленькой БД в новую БД.

2 голосов
/ 09 марта 2010

Вы также можете перепроектировать свою базу данных в Visual Studio как проект базы данных. Visual Studio Team Suite Database Edition GDR R2 (я знаю длинное имя) имеет возможность проводить сравнение схем и сравнение данных, но прелесть этого подхода в том, что вы превращаете всю свою базу данных в хороший проект базы данных, где вы можете управлять изменениями. и интегрировать с контролем версий. Это позволит вам строить из общего источника и внедрять согласованные изменения.

...