Как создать базу данных «master-Structure» с базами данных «children-data» в SQL SERVER 2005? - PullRequest
1 голос
/ 04 июня 2009

Я много гуглил и не мог найти, существует ли он вообще или я прошу немного магии = P

Хорошо, вот сделка.

Мне нужен способ создать базу данных с "главной структурой", которая будет содержать только схемы, структуры, таблицы, процедуры хранения, udfs и т. Д., Все, кроме реальных данных в SQL SERVER 2005 (если это доступно в 2008, дайте мне знать, я мог бы попытаться убедить моего клиента заплатить за это = P)

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

Поэтому, когда мне нужно создать новую хранимую процедуру или что-то в этом роде, я просто создаю ее в базе данных master (и, конечно, она доступна для ее дочерних элементов).

На самом деле у меня есть несколько разных баз данных с одной и той же схемой и разными данными. Но проблема в том, чтобы поддерживать соответствие между ними. Каждый раз, когда я создаю сценарий для создания некоторого SP или добавления некоторого индекса или чего-то еще, я должен выполнять его в каждой базе данных, а иногда я могу пропустить один = P

Итак, давайте представим, что у вас есть ВСЕЛЕННАЯ (была бы главная БД), а во вселенной есть ПРОСТРАНСТВА (каждая представлена ​​дочерним БД). Поэтому приложение, над которым я работаю, должно динамически «клонировать» ПРОСТРАНСТВА. Для этого нам нужно создать новую базу данных. В настоящее время я создаю резервную копию клонируемой БД, восстанавливаю ее как новую и усекаю таблицы. Я хочу иметь возможность создать новый "потомок" "главной" базы данных, который будет поддерживать схемы и все, но будет начинаться с пустых данных.

Надеюсь, это понятно ... Мой английский не идеален, извините за это = P Спасибо всем!

Ответы [ 6 ]

2 голосов
/ 04 июня 2009

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

См. do-you-source-control-your-database

Если вы используете SQL Server, я бы порекомендовал dbGhost - не дорого и отлично справляется с работой:

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

Вы можете использовать эту инфраструктуру для:

  • прокатные версии для тестирования, интеграции и производства систем
  • развертывание вашей "обновленной" системы для нескольких производственных развертываний (особенно в размещенной среде)
1 голос
/ 04 июня 2009

Есть клуджи, но основным способом решения этой проблемы по-прежнему является использование контроля исходного кода (со всеми другими сопутствующими преимуществами.) И SQL Server становится все более дружественным к SCC.

Кроме того, для многих (наиболее надежных) сайтов это проблема для каждого сервера в той же степени, что и для базы данных.

1 голос
/ 04 июня 2009

Я запишу свои изменения в виде файла sql и использую OSQL или SQLCMD через пакетный файл, чтобы обеспечить многократное выполнение всех баз данных, не задумываясь об этом.

В качестве альтернативы я бы использовал инструменты VisualStudio Database Pro или инструменты сравнения RedGate SQL для сравнения и распространения изменений.

0 голосов
/ 04 июня 2009

Теоретически вы можете поместить триггер в таблицу объектов UNIVERSE.sys (при условии, что SQL Server), а затем перечислить базы данных master.dbo.sys, чтобы найти все дочерние базы данных. Если у вас есть специальная таблица, которая указывает, что это дочерняя база данных, вы можете обратиться к child.dbo.sysobjects, чтобы найти ее.

Не ошибитесь, это будет сложно реализовать. Но это один из способов сделать это.

0 голосов
/ 04 июня 2009

Маленькие мелочи здесь. База данных mssqlsystemresource работает так, как вы ее описали: определяется один раз и «появляется» в каждой базе данных как специальная схема sys. К сожалению, специальная «магия», необходимая для этого, недоступна для пользовательских баз данных. Вы должны будете использовать методы развертывания, чтобы синхронизировать вашу схему. То есть примените изменения к каждой базе данных, как уже предлагались другие ответы.

0 голосов
/ 04 июня 2009

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

Однако для того, чтобы новые таблицы просто появлялись в дочерних базах данных после добавления в родительские, ничего.

Можно было бы создать что-то для просмотра баз данных и создания сценариев из базы данных шаблонов, а также есть коммерческие инструменты, которые могут помочь обнаружить различия между базами данных. Вы также можете иметь триггер DDL в базе данных «master», который отключился и сделал это при создании новой таблицы.

Если бы вы сохранили хороший шаблон SPACES, вы могли бы написать его (без данных) и создать новую базу данных, чтобы не было необходимости выполнять TRUNCATE. Вы можете написать его из SQL или внешнего инструмента.

...