Какова реальная выгода от содержащихся баз данных - PullRequest
3 голосов
/ 09 мая 2011

В SQL Server 2012 они представили базу данных Contained.Какова реальная цель этой функции?Какие недостатки предыдущих версий это исправило?

1 Ответ

8 голосов
/ 14 июля 2011

Они разрабатываются для упрощения миграции баз данных между системами (как вашими базами данных, так и базами данных в SQL Azure, которые им необходимо перемещать для балансировки ресурсов).Все, что имеет зависимость вне базы данных, считается риском, потому что это дополнительные леса, которые должны идти с базой данных - легко забыть, легко ошибиться, легко выйти из синхронизации.

Например, в Denali решаются следующие проблемы:

  • Сегодня, когда вы перемещаете базу данных на другой сервер, вам также необходимо перенести все имена входа SQL на уровне сервера -это может быть проблемой, особенно когда SID не синхронизированы.С автономными базами данных пользователи уровня базы данных, которые не привязаны к имени входа в SQL Server, просто приходят на прогулку, когда резервное копирование базы данных, отсоединение, зеркальное копирование, репликация и т. Д. Приятно и просто.

  • Если у вас есть база данных с сопоставлением, которое отличается от сопоставления сервера, вы можете обнаружить, что у вас возникают конфликты сопоставления, когда вы присоединяетесь или выполняете другие операции с таблицами #temp, потому что создаваемые таблицы #temp будутнаследовать параметры сортировки сервера, а не вызывающей базы данных.Хотя вы можете обойти это, указав условие COLLATE для каждой ссылки на столбец, с содержащимися базами данных, #tempdb наследует параметры сортировки вызывающей базы данных, переопределяя параметры сортировки сервера.

  • THROW () также может почти попасть в эту категорию - поскольку вам больше не нужно использовать sys.messages для хранения пользовательских сообщений.Это не так часто, как две вышеупомянутые проблемы, но, безусловно, делает миграцию на новый сервер лучше, если нет необходимости также синхронизировать sys.messages.Это не ограничивается автономными базами данных, но играет ту же роль.

  • Для вещей, которые не соответствуют критериям «сдерживания», существует DMV, который может показать вам списоквещи, которые потенциально могут сломаться, если вы переместите их на другой сервер.Например, вызов имени, состоящего из трех или четырех частей.

В будущих версиях будут решаться другие проблемы.Например:

  • Агент SQL Server является внешней зависимостью.Когда вы перемещаете базу данных на другой сервер, задания агента SQL, которые ссылаются на эту базу данных, не перемещаются автоматически вместе с базой данных, вы должны определить, какие из них затронуты, и составить их сценарий самостоятельно (это не так просто, как просто взять с собой msdb).тоже).В будущей версии SQL Server я предполагаю, что либо (а) каждая база данных будет иметь своего собственного агента, либо (б) агент будет перемещен в архитектуру уровня ОС, где какой-то уровень перевода говорит вам, где находится база данныхвместо того, чтобы агент работал на одной машине.Последний вариант может усложниться, когда мы говорим о Azure, гео-разрозненных сетях и т. Д.

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

Есть и другие, но это тяжелые игроки.

...