Подтвердить что ты не робот

Развертывание баз данных SQL Server из Test to Live

Интересно, как вы, ребята, управляете развертыванием базы данных между двумя SQL-серверами, в частности SQL Server 2005. Теперь есть развитие и живое. Поскольку это должно быть частью buildscript (стандартная пакетная версия Windows, даже с текущей сложностью этих скриптов, я могу переключиться на PowerShell или так позже), Enterprise Manager/Management Studio Express не учитывается.

Вы только скопировали файл .mdf и приложите его? Я всегда немного осторожен при работе с двоичными данными, так как это, похоже, проблема совместимости (даже несмотря на то, что разработка и live должны всегда запускать ту же версию сервера).

Или - если в T-SQL отсутствует "EXPLAIN CREATE TABLE" - вы делаете что-то, что экспортирует существующую базу данных в SQL-скрипты, которые вы можете запустить на целевом сервере? Если да, есть ли инструмент, который может автоматически сбрасывать заданную базу данных в SQL-запросы и запускается из командной строки? (Опять же, Enterprise Manager/Management Studio Express не учитывается).

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

Теперь я слышу много отличного материала о Red Gate, но для хобби-проектов цена немного крутая.

Итак, что вы используете для автоматического развертывания баз данных SQL Server из Test to Live?

4b9b3361

Ответ 1

Я взялся за ручное кодирование всех своих DDL-команд (create/alter/delete), добавив их в мой .sln в виде текстовых файлов и используя обычное управление версиями (используя подрывную деятельность, но любой контроль версий должен работать). Таким образом, я не только получаю выгоду от управления версиями, но обновление в реальном времени с dev/stage - это один и тот же процесс для кода и базы данных - теги, ветки и т.д. Работают все равно.

В противном случае я согласен, что redgate стоит дорого, если у вас нет компании, покупающей ее для вас. Если вы можете получить компанию, чтобы купить ее для вас, это действительно того стоит!

Ответ 2

Для моих проектов я чередую между SQL Compare из REd Gate и Мастером публикации баз данных из Microsoft, который вы можете скачать бесплатно здесь.

Мастер не такой гладкий, как SQL Compare или SQL Data Compare, но он делает трюк. Одна из проблем заключается в том, что сценарии, которые он создает, могут нуждаться в некотором перераспределении и/или редактировании для потока одним выстрелом.

В верхней части он может перемещать вашу схему и данные, что неплохо для бесплатного инструмента.

Ответ 3

Не забывайте решение Microsoft проблемы: Visual Studio 2008 Database Edition. Включает инструменты для развертывания изменений в базах данных, создания различий между базами данных для изменения схемы и/или данных, модульных тестов, генерации тестовых данных.

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

Ответ 4

Как и Роб Аллен, я использую SQL Compare/Data Compare by Redgate. Я также использую мастер публикации базы данных Microsoft. У меня также есть консольное приложение, которое я написал на С#, который занимает sql script и запускает его на сервере. Таким образом, вы можете запускать большие скрипты с командами "GO" в нем из командной строки или пакета script.

Я использую библиотеки Microsoft.SqlServer.BatchParser.dll и Microsoft.SqlServer.ConnectionInfo.dll в консольном приложении.

Ответ 5

Я работаю так же, как это делает Karl, сохраняя все мои сценарии SQL для создания и изменения таблиц в текстовом файле, который я храню в контроле источника. На самом деле, чтобы избежать проблемы с необходимостью иметь script проверить текущую базу данных, чтобы определить, какие ALTER запускать, я обычно работаю следующим образом:

  • В первой версии я помещаю все во время тестирования в один SQL script и обрабатываю все таблицы как CREATE. Это означает, что во время тестирования я сильно теряю и читаю таблицы, но это не очень важно на раннем этапе проекта (так как я обычно взламываю данные, которые я использую в этом случае).
  • Во всех последующих версиях я делаю две вещи: я создаю новый текстовый файл для хранения сценариев обновления SQL, содержащих только ALTERs для этой версии. И я вношу изменения в оригинал, создаю новую базу данных script. Таким образом, обновление просто запускает обновление script, но если нам нужно воссоздать БД, нам не нужно запускать 100 скриптов, чтобы добраться туда.
  • В зависимости от того, как я развертываю изменения БД, я также обычно помещаю таблицу версий в БД, которая содержит версию БД. Затем вместо того, чтобы принимать какие-либо человеческие решения о том, какие сценарии запускать, какой бы код у меня ни был, сценарии создания/обновления используют версию для определения того, что нужно запускать.

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

Ответ 6

Если у вас есть компания, покупающая ее, у Toad от Quest Software встроена такая функциональность управления. В основном это операция с двумя нажатиями для сравнения двух схем и генерации синхронизации script от одного к другому.

У них есть выпуски для большинства популярных баз данных, включая, конечно, Sql Server.

Ответ 7

С помощью SMO/DMO не сложно создать script вашей схемы. Данные немного веселее, но все же выполнимы.

В общем, я использую "Script It", но вам может понадобиться рассмотреть что-то в этих строках:

  • Различия между Development и Staging, которые вы можете разработать с помощью подмножества данных... это я бы создал инструмент, чтобы просто вытащить некоторые производственные данные или создать поддельные данные, в которых была обеспечена безопасность.
  • Для развития команды каждое изменение базы данных должно быть согласовано между членами вашей команды. Изменение схемы и данных может быть смешано, но один script должен включить данную функцию. После того как все ваши функции готовы, вы объединяете их в один файл SQL и запускаете это для восстановления производства.
  • После того, как ваша процедура очистится, вы снова запустите единственный файл SQL на производственной машине.

Я использовал инструменты Red Gate, и они являются большими инструментами, но если вы не можете себе это позволить, создание инструментов и работа таким образом не слишком далеки от идеала.

Ответ 8

Я согласен с тем, что сценарий - это лучший способ пойти и я защищаю на работе. Вы должны script все, начиная с создания БД и объекта, до заполнения таблиц поиска.

Все, что вы делаете в пользовательском интерфейсе, не будет переводиться (особенно для изменений... не для первых развертываний), и в итоге потребуются такие инструменты, как то, что предлагает Redgate.

Ответ 9

Я согласен с тем, чтобы держать все в исходном управлении и вручную создавать сценарии всех изменений. Изменения в схеме для одной версии приводятся в файл script, созданный специально для этой версии. Все сохраненные procs, views и т.д. Должны поступать в отдельные файлы и обрабатываться так же, как .cs или .aspx, насколько это возможно. Я использую powershell script для создания одного большого файла .sql для обновления информации о программируемости.

Мне не нравится автоматизировать применение изменений схемы, таких как новые таблицы, новые столбцы и т.д. При выполнении производственной версии мне нравится выполнять команду change script командой, чтобы убедиться, что каждый из них работает как ожидается. Там ничего хуже, чем запуск большого изменения script при производстве и получение ошибок, потому что вы забыли небольшую деталь, которая не представилась в разработке.

Я также узнал, что индексы нужно обрабатывать так же, как файлы кода, и помещать их в исходный код.

И у вас обязательно должно быть более двух баз данных - dev и live. У вас должна быть база данных dev, которую каждый использует для ежедневных задач dev. Затем промежуточная база данных, которая имитирует производство и используется для проведения тестирования интеграции. Тогда возможно полная последняя копия производства (восстановленная из полной резервной копии), если это возможно, поэтому ваш последний раунд тестирования установки идет вразрез с чем-то близким к реальному, насколько это возможно.

Ответ 10

Я использую Subsonic-механизм миграции, поэтому у меня просто есть dll с классами в порядке следования, которые имеют 2 метода, вверх и вниз. Существует непрерывная интеграция/сборка script в nant, так что я могу автоматизировать обновление моей базы данных.

Его не лучший тик в мире, но он превосходит запись DDL.

Ответ 11

RedGate SqlCompare - это, по-моему, способ. Мы развертываем развертывание БД на регулярной основе, и поскольку я начал использовать этот инструмент, я никогда не оглядывался назад. Очень интуитивно понятный интерфейс и экономит много времени в конце.

Версия Pro также позаботится о создании сценариев для интеграции с источником.

Ответ 12

Я также поддерживаю скрипты для всех моих объектов и данных. Для развертывания я написал эту бесплатную утилиту - http://www.sqldart.com. Это позволит вам переупорядочить ваши файлы script и будет выполнять всю транзакцию внутри транзакции.

Ответ 13

Я делаю все свое создание базы данных как DDL, а затем переношу этот DDL в класс поддержки схемы. Я могу делать разные вещи, чтобы создать DDL, но в принципе я использую весь код в коде. Это также означает, что если вам нужно делать не DDL-вещи, которые плохо сопоставляются с SQL, вы можете написать процессуальную логику и запустить ее между комками DDL/DML.

В моем dbs есть таблица, которая определяет текущую версию, чтобы можно было кодировать относительно простой набор тестов:

  • Существует ли БД? Если не создать его.
  • Является ли БД текущей версией? Если нет, то запустите методы, последовательно обновляющие схему (вы можете попросить пользователя подтвердить и - в идеале - сделать резервные копии на этом этапе).

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

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

Есть некоторые проблемы при разработке в командной среде, но это более или менее данное в любом случае!

Мерф

Ответ 14

В настоящее время я работаю с тобой. Не только развертывание баз данных SQL Server из теста, чтобы жить, но также включает весь процесс из Local → Integration → Test → Production. Итак, что может сделать меня легко каждый день, я делаю задача NAnt с Red-Gate SQL Compare. Я не работаю для RedGate, но я должен сказать, что это хороший выбор.