Как я могу поддерживать согласованную схему БД для 18 баз данных (сервер sql)? - PullRequest
2 голосов
/ 18 сентября 2008

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

Как лучше синхронизировать схемы базы данных?

Ответы [ 8 ]

4 голосов
/ 18 сентября 2008

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

Для магазинов .NET, работающих под управлением SQL Server, также существует Visual Studio Database Edition , который может создавать сценарии изменений для изменений схемы, которые можно проверить в системе управления версиями и автоматически создать с помощью CI / сборки. процесс.

4 голосов
/ 18 сентября 2008

SQL Compare от Red Gate - отличный инструмент для этого.

3 голосов
/ 18 сентября 2008

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

Чтобы синхронизировать базы данных, вам нужно иметь несколько вещей:

1) Вам нужны политики о том, кто может вносить изменения в производство. Как правило, это должны быть только DBA (команда DBA для больших организаций) и 1 или 2 резервные копии. Резервные копии должны вносить изменения только при отсутствии администратора базы данных или в чрезвычайной ситуации. Резервные копии НЕ должны развертываться на регулярной основе. Установите права на базу данных в соответствии с этой политикой.

2) Процесс и инструменты для управления запросами на развертывание. В идеале у вас будет среда разработки, тестовая среда и производственная среда. Разработчики должны выполнить начальную разработку в среде разработчика и внести изменения, необходимые для тестирования и производства. Вам понадобится какой-то способ сообщить администратору базы данных, когда нужно вносить изменения. Я НЕ рекомендовал бы процесс, где вы кричите к следующему кубу. В больших организациях может быть комитет по контролю за изменениями, и изменения могут вноситься только один раз в месяц. Небольшие компании могут просто пройти тестирование запроса разработчика, и после тестирования передается запрос на развертывание в производство. Одна небольшая компания, на которую я работал, использовала для этих запросов Problem Tracker .

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

3) Вы сказали, что иногда объектам нужно всего лишь перейти к нескольким базам данных. Имея только 18 баз данных, вероятно, на одном сервере, я бы рекомендовал, чтобы каждая Databse точно соответствовала объектам. Только 5 БД нуждаются в usp_DoSomething? И что? Поместите это в каждую базу данных. Это будет намного проще в управлении. Мы сделали это таким образом на 6-серверной системе с 250-300 БД. Были исключения, но они были сгруппированы. Базы данных на сервере C получили этот дополнительный набор объектов. Базы данных на сервере L получили этот другой набор.

4) Вы сказали, что иногда администратор БД забывает развернуть сценарии изменений на всех БД. Это говорит мне о том, что ему / ей нужны инструменты для развертывания изменений. Он / она, вероятно, берет сценарий SQL, открывает его в Query Analyzer или Manegement Studio (или что бы вы ни использовали) и вручную обращается к каждой базе данных и выполняет SQL. Это не хорошее долгосрочное (или краткосрочное) решение. Красные Врата (создатели SQLCompare выше) имеют много замечательных инструментов. MultiScript похоже, что он может работать в целях развертывания. Я работал с администратором базы данных, который написал собственный инструмент в SQL Server 2000, используя O-SQl. Он взял бы файл SQL и выполнил бы его в каждой базе данных на сервере. Он должен был выполнить его на каждом сервере, но он превзошел выполнение на каждой БД. Я также помог написать инструмент VB.net, который бы делал то же самое, за исключением того, что он также просматривал список серверов, поэтому его нужно было выполнить только один раз.

5) Контроль источника. Моя нынешняя команда не использует систему контроля версий, и у меня нет достаточно времени, чтобы рассказать вам, сколько проблем это вызывает. Если у вас нет какой-либо системы контроля версий, получите ее.

1 голос
/ 18 сентября 2008

Создайте по одному исходному сценарию DDL / SQL для каждого выпуска и только используйте его для обновления баз данных. Инструменты сравнения могут быть полезны, но в основном для проверки того, что вы не ошиблись, и выхода из проблем при сбое политики. Объедините сценарии DDL, SQL и хранимых процедур в один сценарий, чтобы было непросто «забыть» запустить один из сценариев.

1 голос
/ 18 сентября 2008

Помимо использования инструментов сравнения баз данных, с 18 базами данных у вас должен быть администратор баз данных, поэтому применяйте политику, согласно которой только администратор баз данных может изменять таблицы на уровне базы данных, ограничивая доступ только к CREATE и ALTER только для администратора баз данных. И на ваших тестовых и на живых базах. Конечно, в базе данных разработчиков такого не должно быть! Заставьте разработчиков, которые создавали или изменяли схемы, волей-неволей проходите через администратора баз данных.

1 голос
/ 18 сентября 2008

У меня недостаточно репутации, чтобы комментировать вышеприведенный ответ, но профессиональная версия SQL Compare имеет API-интерфейс с поддержкой сценариев. Учитывая, что вам нужно реплицировать данные во все эти базы данных, вы можете использовать это для создания автоматизированной работы по созданию сценариев изменений или для проверки того, что базы данных синхронизированы. Это также не намного дороже, чем стандартная версия.

0 голосов
/ 04 октября 2013

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

0 голосов
/ 19 мая 2009

У нас есть инструмент под названием DB Schema Difftective, который может сравнивать и синхронизировать схемы базы данных. С помощью нашего другого инструмента, DB MultiRun, вы можете легко развернуть сгенерированные (синхронизированные) сценарии на нескольких серверах БД (на основе проекта).

...