Стратегии развертывания базы данных (SQL Server)

Причина, по которой вы получаете ошибку, состоит в том, что вы пытаетесь преобразовать строку (например, setosa) в число с плавающей точкой, что, очевидно, невозможно, потому что это не число.

Если вы хотите отобразить строковые категории в числа, вы можете использовать:

train["CLASS_LABEL"] = train["CLASS_LABEL"].factorize()[0]

это превратит ваши строки в числовые категории

52
задан 17 revs, 4 users 78% 27 November 2010 в 06:11
поделиться

12 ответов

Для этой самой проблемы я принял решение использовать инструмент миграции: Migratordotnet.

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

[Migration(62)]
public class _62_add_date_created_column : Migration
{
    public void Up()
    {
       //add it nullable
       Database.AddColumn("Customers", new Column("DateCreated", DateTime) );

       //seed it with data
       Database.Execute("update Customers set DateCreated = getdate()");

       //add not-null constraint
       Database.AddNotNullConstraint("Customers", "DateCreated");
    }

    public void Down()
    {
       Database.RemoveColumn("Customers", "DateCreated");
    }
}

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

Это было действительно ценным дополнением к нашей сборке и оптимизировало процесс очень .

я отправил сравнение различных платформ миграции в.NET здесь: http://benscheirman.com/2008/06/net-database-migration-tool-roundup

32
ответ дан Ben Scheirman 7 November 2019 в 09:32
поделиться

Необходимо рассмотреть использование инструмента сборки как MSBuild или NAnt. Мы используем комбинацию CruiseControl.NET, NAnt и Крепости SourceGear для обработки нашего развертывания, включая объекты SQL. Задача сборки дб NAnt называет sqlcmd.exe для обновления сценариев в нашем dev и средах подготовки после того, как они будут проверены в Крепость.

2
ответ дан Robert S. 7 November 2019 в 09:32
поделиться

Пойдите сюда:

https://blog.codinghorror.com/get-your-database-under-version-control /

Прокручивают немного вниз к списку 5 ссылок на сайт odetocode.com. Фантастические пять серий. Я использовал бы это в качестве начальной точки, чтобы получить идеи и выяснить процесс, который будет работать на Вашу команду.

4
ответ дан Cœur 7 November 2019 в 09:32
поделиться

Если Вы говорите о попытке сохранить схемы базы данных в синхронизации, попытайтесь использовать Красный Логический элемент сравнение SDK SQL. Создайте временную базу данных на основе создать сценария (newDb) - это - то, на что Вы хотите, чтобы Ваша база данных была похожа. Сравните newDb со своей старой базой данных (oldDb). Получите массив изменений от того сравнения и примените его с помощью Красного Логического элемента. Вы могли встроить этот процесс обновления в Вас тесты, и можно попытаться заставить весь devs соглашаться, что существует одно место, где создать сценарий для базы данных сохранен. Эта та же практика работает хорошо на обновление Вашей базы данных через несколько версий и запущения скриптов миграции данных и процессов между каждым шагом (использующий документ XML для отображения сценариев создавания и миграции данных)

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

4
ответ дан Mike 7 November 2019 в 09:32
поделиться

Мы использовали SQL, Выдерживают сравнение от RedGate в течение нескольких лет теперь:

http://www.red-gate.com/products/index.htm

про версия имеет интерфейс командной строки, который Вы могли, вероятно, использовать для установки процедур развертывания.

6
ответ дан Mike K. 7 November 2019 в 09:32
поделиться

Мы используем измененную версию управления версиями базы данных, описанного K. Scott Allen . Мы используем Мастер Печати по базе данных для создания исходного базового сценария. Затем пользовательский инструмент C# на основе SQL SMO для дампа хранимых процедур, представлений и функций пользователя. Сценарии изменения, которые содержат схему и изменения данных, сгенерированы инструменты Red Gate . Таким образом, мы заканчиваем со структурой как

Database\
    ObjectScripts\ - contains stored procs, views and user funcs 1-per file
    \baseline.sql - database snapshot which includes tables and data
    \sc.01.00.0001.sql - incremental change scripts
    \sc.01.00.0002.sql
    \sc.01.00.0003.sql

, инструмент пользователя создает базу данных при необходимости, применяет baseline.sql при необходимости, добавляет таблица SchemaChanges при необходимости и применяет сценарии изменения по мере необходимости на основе того, что находится в таблице SchemaChanges. Тот процесс происходит как часть сценария сборки nant каждый раз, когда мы делаем сборку развертывания с помощью cc.net.

, Если кто-либо хочет исходный код к schemachanger приложению, я могу подбросить его на codeplex/google или везде, где.

5
ответ дан Todd Smith 7 November 2019 в 09:32
поделиться

Читайте ряд K.Scott Allen сообщений на управлении версиями базы данных .
Мы создали инструмент для применения сценариев базы данных управляемым способом на основе методов, которые он описывает, и оно работает хорошо.
Это могло затем использоваться в качестве части непрерывного процесса интеграции с каждым тестовым развертыванием базы данных изменения к нему, когда фиксация сделана к URL, Вы удерживаете сценарии обновления базы данных. Я предложил бы иметь базовый сценарий и сценарии обновления так, чтобы можно было всегда выполнять последовательность сценариев для получения базы данных от, он - текущая версия к новому состоянию, которое необходимо.
Это действительно все еще требует некоторого процесса и дисциплины от разработчиков хотя (все изменения должны включиться в новую версию основного сценария установки и сценария патча).

7
ответ дан Hamish Smith 7 November 2019 в 09:32
поделиться

Недавно я установил git-1.6.4.2 на CentOS 5.3. Сборка git не составила труда, но попытки установить сопутствующие документы вызывали боль на каждом этапе. Версии xmlto и asciidoc из репозиториев yum были старыми, поэтому я построил их из исходного кода. Затем xmlto (посредством xmllint ) пожаловался на отсутствие DocBook 4.5, и мне, наконец, удалось ввести их вручную.

Заходя так далеко, сборка документа успешно продвигается, пока

    DB2TEXI user-manual.texi
/bin/sh: line 1: docbook2x-texi: command not found
make[1]: *** [user-manual.texi] Error 127

Но docbook2x установлен! Ах, команда другая:

$ rpm -q --filesbypkg docbook2x | grep bin.\*texi
docbook2x                 /usr/bin/db2x_docbook2texi
docbook2x                 /usr/bin/db2x_texixml

Даже пытаясь запустить ее вручную, я все равно не нахожу радости:

$ db2x_docbook2texi user-manual.xml --encoding=UTF-8 --to-stdout >user-manual.texi++
docbook2texi:/book: no description for directory entry
/usr/bin/db2x_texixml:-::node: fatal error: node belongs to a different file
Died at /usr/bin/db2x_texixml line 959.

Внизу INSTALL упоминается пара удобных целей make : quick-install-man и quick-install-html. Получается, например, Я захочу продолжить (я "свернул свою собственную" систему много лет назад, нужно посмотреть, есть ли сходства). Одна вещь, которая вам понадобится, и я надеюсь, упомянута в этих ссылках, - это дисциплина. Я не совсем понимаю, как может работать любая автоматизированная система, если кто-то может что-то изменить в любое время. (Ваш вопрос подразумевает, что это может произойти в ваших производственных системах, но, очевидно, это не может быть правдой.)

Наличие одного человека (легендарного «администратора базы данных»), посвященного задаче управления изменениями в базах данных, особенно в производственных базах данных. , является очень распространенным решением. Что касается поддержания согласованности между базами данных разработки и тестирования X: если он / они используются многими пользователями, вам, опять же, лучше всего будет иметь отдельное лицо, выступающее в качестве «центра обмена информацией» для изменений; если у каждого есть свой экземпляр базы данных, затем они несут ответственность за поддержание порядка, и наличие централизованной согласованной базы данных «источник» будет иметь решающее значение, когда им понадобится обновленная базовая база данных.

Вот недавняя публикация о переполнении стека, которая может быть интересна: как -to-refresh-a-test-instance-of-sql-server-with-production-data-without-using

0
ответ дан 7 November 2019 в 09:32
поделиться

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

0
ответ дан 7 November 2019 в 09:32
поделиться

В книге Рефакторинг баз данных многие из этих проблем рассматриваются на концептуальном уровне.

Что касается инструментов, я знаю, что DB Ghost хорошо работает для SQL Server. Я слышал, что редакция Visual Studio Data Dude действительно была улучшена в последней версии, но у меня нет опыта работы с ней.

Что касается разработки базы данных в стиле непрерывной интеграции, то она очень быстро становится ресурсоемкой благодаря необходимому количеству копий базы данных. Это очень выполнимо, когда база данных может поместиться на рабочей станции разработчика, но непрактично, когда база данных настолько велика, что ее необходимо развернуть в сетке. Для этого вам понадобится 1 копия базы данных на разработчика [разработчиков, которые вносят изменения в DDL, а не только в процессы] + 6 общих копий. Распространены следующие копии:

  1. INT DEV -> Разработчики «возвращают» свой рефакторинг в INT DEV для интеграционного тестирования. Когда интеграционное тестирование проходит, эта база данных копируется в DEV.
  2. DEV -> Это "официальная" копия базы данных в разработке. INT DEV регулярно обновляется копией DEV. Разработчики, работающие над новыми рефакторингами, получают новую копию базы данных от DEV.
  3. INT QA -> Та же идея, что и INT DEV, за исключением команды QA. Когда здесь проходят интеграционные тесты, эта база данных копируется в QA и DEV *.
  4. QA
  5. INT PROD -> Та же идея, что и INT QA, за исключением производства. Когда здесь пройдут интеграционные тесты, эта база данных копируется в PROD, QA * и DEV *
  6. PROD

* При копировании баз данных по строкам DEV / QA / PROD вам также потребуется запускать сценарии для обновления тестовых данных, относящихся к конкретной среде ( например, настройка пользователей в QA, которые команда QA использует для тестирования, но которых нет в производстве).

0
ответ дан 7 November 2019 в 09:32
поделиться

Мы используем Visual Studio for Database Professionals и TFS для создания версий и управления развертыванием наших баз данных. Это позволяет нам обращаться с нашими базами данных так же, как с кодом (извлекать, регистрировать, блокировать, просматривать историю версий, ветвление, сборку, развертывание, тестирование и т. Д.) И даже включать их в те же файлы решения, если мы хотим.

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

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

Это отличный продукт, но его внедрение было затруднено на раннем этапе из-за маркетинговой ошибки Microsoft. Изначально это был отдельный продукт в рамках Team System. Это означало, что для одновременного использования функций выпуска для разработчиков и выпуска базы данных вам необходимо было перейти на гораздо более дорогую версию Team Suite. Мы (и многие другие клиенты) огорчили Microsoft по этому поводу, и мы были очень рады, что они объявили в этом году, что DB Pro добавлен в версию для разработчиков , и что любой, кто имеет лицензию на версию для разработчиков, может немедленно установить редакция базы данных.

Это означало, что для одновременного использования функций выпуска для разработчиков и выпуска базы данных вам необходимо было перейти на гораздо более дорогую версию Team Suite. Мы (и многие другие клиенты) огорчили Microsoft по этому поводу, и мы были очень рады, что они объявили в этом году, что DB Pro добавлен в версию для разработчиков , и что любой, кто имеет лицензию на версию для разработчиков, может немедленно установить редакция базы данных.

Это означало, что для одновременного использования функций выпуска для разработчиков и выпуска базы данных вам необходимо было перейти на гораздо более дорогую версию Team Suite. Мы (и многие другие клиенты) огорчились по этому поводу в Microsoft, и мы были очень рады, что они объявили в этом году, что DB Pro добавлен в версию для разработчиков , и что любой, кто имеет лицензию на версию для разработчиков, может немедленно установить редакция базы данных.

1
ответ дан 7 November 2019 в 09:32
поделиться

Гас небрежно упомянул DB Ghost (выше) - я использую его как потенциальное решение.

Краткий обзор того, как моя компания использует DB Ghost:

  • После того, как схема для новой БД была обоснованно определена во время начальной разработки, мы используем БД Ghost 'Data and Schema Scripter' для создания файлов скриптов (.sql) для всех объектов БД (и любых статических данных), и мы регистрируем эти файлы скриптов в системе управления версиями (инструмент разделяет объекты по папкам, например 'Хранимые процедуры ',' Таблицы 'и т. Д.). На этом этапе мы можем использовать DB GHost 'Packager' или 'Packager Plus' инструменты для создания автономного исполняемого файла для создания новой БД из этих сценариев.
  • Все изменения в схеме БД регистрируются в источнике посредством регистрации определенных файлов сценариев.
  • В любое время мы можем использовать упаковщик для создания исполняемого файла либо (а) для создания новой БД, либо (б) для обновления существующей БД. Некоторая настройка требуется для определенных изменений, зависящих от пути (например, изменений, требующих обновления данных), но у нас есть сценарии до и после обновления, которые запускаются.

Процесс «обновления» включает в себя создание чистого 'исходная' БД, а затем (после предварительного обновления пользовательских скриптов) сравнение схем исходной и целевой БД. DB Ghost обновляет целевую БД в соответствии с

. Мы регулярно вносим изменения в производственные БД (у нас есть 14 клиентов в 7 различных производственных средах), но неизбежно развертываем достаточно большой набор изменений с исполняемым файлом обновления DB Ghost (созданным во время нашей сборки процесс). Любые производственные изменения, которые не были зарегистрированы в источнике (или которые не были возвращены в соответствующую выпускаемую ветвь), УТЕРЯНЫ. Это вынудило всех последовательно регистрировать изменения.

Подводя итог:

  • Если вы применяете политику, согласно которой все обновления БД развертываются с использованием исполняемого файла обновления DB Ghost, вы можете «заставить» разработчиков последовательно регистрировать свои изменения, независимо от того, были ли они развернуты вручную в промежуточный период. не обновляться в одиночку), что затрудняет поддержку клиентских объектов в основной базе данных приложения
1
ответ дан 7 November 2019 в 09:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: