Развертывание баз данных SQL Server из теста, чтобы жить

голоса
24

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

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

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

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

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

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

Задан 03/08/2008 в 00:30
источник пользователем
На других языках...                            


14 ответов

голоса
19

Я взял в руки кодирования всех моих DDL (создает / изменить / удалить) заявления, добавляя их к моему .sln в виде текстовых файлов, а также с помощью обычного контроля версий (с помощью подрывной, но любой контроля версий должен работать). Таким образом, я не только получить выгоду от версий, но ОБНОВЛЕНИЯ жить от разработчика / этап тот же самый процесс для кода и баз данных - метки, веток и т.д. работ все же.

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

Ответил 03/08/2008 d 00:51
источник пользователем

голоса
14

Для моих проектов я чередоваться между SQL Compare из Красного крыльцу и базами данных Publishing Wizard от Microsoft , которые вы можете скачать бесплатно здесь .

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

На сторона, это может переместить схему и данные, которые не плохо для свободного инструмента.

Ответил 03/08/2008 d 00:40
источник пользователем

голоса
7

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

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

Ответил 18/08/2008 d 11:47
источник пользователем

голоса
6

Как Роб Аллен, я использую SQL Сравнить / Сравнение данных по RedGate. Я также использовать мастер публикации базы данных с помощью Microsoft. У меня также есть консольное приложение, которое я написал в C #, которая принимает SQL сценарий и запускает его на сервере. Таким образом, вы можете запустить большие сценарии с командами «Go» в нем из командной строки или в пакетном сценарии.

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

Ответил 04/08/2008 d 19:00
источник пользователем

голоса
4

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

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

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

Ответил 03/08/2008 d 01:37
источник пользователем

голоса
3

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

В общем, я беру «скрипта» подход, но вы могли бы хотеть рассмотреть что-то вдоль этих линий:

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

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

Ответил 04/08/2008 d 18:38
источник пользователем

голоса
3

Если у вас есть компания, покупая ее, жаба от Quest Software имеет такую ​​функциональность управления встроенным в систему. Это в основном операции два щелчка, чтобы сравнить две схемы и генерировать синхронизации сценария от одного к другому.

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

Ответил 03/08/2008 d 01:22
источник пользователем

голоса
2

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

Ответил 08/06/2010 d 22:33
источник пользователем

голоса
2

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

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

Ответил 28/08/2008 d 01:22
источник пользователем

голоса
2

Я использую механизм переселений дозвуковых, чтобы я просто библиотеку DLL с классами в squential порядке, которые имеют 2 метода, вверх и вниз. Существует непрерывная интеграция / сценарий сборки крюк в NAnt, так что я могу автоматизировать обновление моей базы данных.

Его не лучший thign в мире, но он бьет писать DDL.

Ответил 26/08/2008 d 18:39
источник пользователем

голоса
2

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

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

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

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

Ответил 13/08/2008 d 16:41
источник пользователем

голоса
2

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

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

Ответил 03/08/2008 d 02:38
источник пользователем

голоса
1

Я сейчас работаю то же самое для вас. Не только развертывание баз данных SQL Server от теста , чтобы жить , но и включать в себя весь процесс от Local -> Интеграция -> Тест -> Продукция. Так что же может сделать меня легко Каждодневный я задачу NAnt с Red-Gate SQL сравнения . Я не работаю для RedGate , но я должен сказать , что это хороший выбор.

Ответил 27/11/2008 d 04:15
источник пользователем

голоса
1

Я делаю все мои создание базы данных как DDL, а затем обернуть этот DDL в класс схемы ОБСЛУЖИВАНИЕ. Я могу делать разные вещи, чтобы создать DDL в первую очередь, но в основном я делаю все Мейнт схемы в коде. Это также означает, что если нужно использовать не DDL вещи, которые не очень хорошо сопоставляются с SQL вы можете написать процедурную логику и запустить его между комками DDL / DML.

Мои д.б.н., то есть таблица, которая определяет текущую версию, таким образом можно закодировать относительно простой набор тестов:

  1. Существует ли DB? Если не создать.
  2. Является ли DB текущая версия? Если нет, то запустите методы, в последовательности, которые приводят схему до даты (вы можете предложить пользователю подтвердить и - в идеале - делать резервные копии в этой точке).

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

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

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

Murph

Ответил 26/08/2008 d 16:38
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more