Используете ли вы контроль источника для ваших элементов базы данных? [закрыто]

596

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

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

Тем не менее, я знаю, как эта история идет. Это всего лишь вопрос времени, когда все выстроится в очередь и что-то пропадет.

Есть ли лучшие практики для этого? Какие стратегии сработали для вас?

Brian MacKay
источник
Обсуждается в конце Подкаста
Крис Москини

Ответы:

387

Необходимо прочитать Получить вашу базу данных под контролем версий . Проверьте серию сообщений К. Скотта Аллена.

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

Гульзар Назим
источник
1
Я очень внимательно следую методологии, описанной в ссылочных статьях. Вам не нужно реализовывать каждый уровень, и есть варианты, которые будут работать одинаково хорошо. Система является гибкой, легко настраиваемой, обеспечивает детальный контроль над схемой и изменениями данных и очень хорошо работает в качестве оптимального метода управления источником базы данных. Часть, которая может быть сложной и добавляет почти такую ​​же безопасность, как и остальная часть процесса, является инструментом, помогающим управлять сценариями. Это может быть как простая конкатенация файлов, так и сложная автоматизированная установка. Сначала получите src ctrl, затем подумайте об инструменте.
ulty4life
1
Существует распределенная система контроля версий для баз данных под названием Klonio, которая похожа на Git / GitHub для баз данных.
августа,
134

Сами базы данных? нет

Сценарии, которые их создают, включая вставки статических данных, хранимые процедуры и т. П .; конечно. Это текстовые файлы, они включены в проект и регистрируются, как и все остальные.

Конечно, в идеальном мире ваш инструмент управления базами данных сделает это; но вы просто должны быть дисциплинированы об этом.

blowdart
источник
7
С Mysql Workbench вы можете иметь все это в структурированном файле (xml), который можно открывать и обрабатывать с помощью графического интерфейса. Будучи xml просто текстом, да, это может быть управление версиями без необходимости вводить одно предложение SQL.
Левита
6
Сама база данных - это именно то, что должно находиться под контролем исходного кода, потому что в противном случае это ручной процесс, чтобы откатить / выборочно применить изменения схемы в соответствии с вашей веткой кода. Если у меня есть три зависимых проекта, и я переключаю все из них на определенную ветку (например, с определенным набором миграций схемы), то я также смогу переключить свою базу данных на эту схему. Кроме того, он должен поддерживать операции слияния и перебазирования. Этой технологии крайне не хватает. Entity Framework не поддерживает многопользовательскую среду, когда дело доходит до миграции баз данных.
Триынко
@Triynko, что на практике не работает. Есть причина, почему Microsoft отказалась от своего проекта базы данных Visual Studio 3+ раза. Это потому, что знание исходной и целевой схем теряет всю информацию о миграции схемы. Если вы реорганизуете свою схему, огромное количество информации уносится. Мы отбросили нашу попытку использовать эту модель и вместо этого использовали сценарии инкрементной миграции, которые тщательно обработаны, чтобы их можно было повторно запускать и т. Д., Чтобы они были терпимы к состоянию.
Шив
Отмечу, что обсуждения в Шиве и Тринько обычно обозначаются как «основанные на состоянии» против «основанные на миграции». Это довольно спорный вопрос, и оба подхода имеют свои плюсы и минусы. Отмечу, что подход на основе миграции, как правило, ускоряет создание / замену / обновление базы данных с последними миграциями, тогда как подход на основе состояния фактически создает изменения. Какой подход лучше, зависит отчасти от того, устанавливаете ли вы приоритетность частым изменениям базы данных (используйте основанные на состоянии) или частым развертываниям для рабочей / тестовой / локальной / CI (используйте миграцию на основе).
Брайан
Что касается того, почему Microsoft использует подход, основанный на состоянии: гораздо проще создать инструментарий / автоматизацию для подхода, основанного на состоянии, и это гораздо более под ключ для разработчиков. Разработчики, которые в настоящее время НЕ используют контроль версий для своих баз данных, часто находят подход, основанный на состоянии, более привлекательным, поскольку он менее разрушительный. Конечно, причина, по которой это менее разрушительно, заключается в том, что работа по миграции передается от разработчиков к релиз-инженерам ... которые сгенерируют скрипт diff (например, через SSDT), а затем исправят его вручную, надеясь, что они не пропустили что-нибудь.
Брайан
36

Я очень люблю миграции Rails ActiveRecord. Он абстрагирует сценарий от DML до ruby, который может быть легко переведен в ваш исходный репозиторий.

Однако, немного поработав, вы можете сделать то же самое. Любые изменения DDL (ALTER TABLE и т. Д.) Могут быть сохранены в текстовых файлах. Сохраните систему нумерации (или отметку даты) для имен файлов и применяйте их последовательно.

Rails также имеет таблицу «version» в БД, которая отслеживает последнюю примененную миграцию. Вы можете сделать то же самое легко.

Мэтт Рогиш
источник
1
Полностью согласованная, текущая версия миграции привязана к текущему коммиту, так что вы можете запускать задачи rake и поддерживать систему в чистоте и простой процесс с изменениями в БД
Анатолий
33

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

killdash10
источник
7
Просто добавим, что Flyway - это конкурирующий продукт, предлагающий аналогичную функциональность, который также получает положительные отзывы о других потоках StackOverflow.
Стив Чемберс
29

Вы никогда не должны входить в систему и начинать вводить команды «ALTER TABLE», чтобы изменить производственную базу данных. Проект, в котором я работаю, имеет базу данных на каждом клиентском сайте, поэтому каждое изменение базы данных выполняется в двух местах: файл дампа, который используется для создания новой базы данных на новом клиентском сайте, и файл обновления, который запускается. при каждом обновлении, которое проверяет номер вашей текущей версии базы данных по наибольшему номеру в файле и обновляет вашу базу данных на месте. Так, например, последние пару обновлений:

if [ $VERSION \< '8.0.108' ] ; then
  psql -U cosuser $dbName << EOF8.0.108
    BEGIN TRANSACTION;
    --
    -- Remove foreign key that shouldn't have been there.
    -- PCR:35665
    --
    ALTER TABLE     migratorjobitems
    DROP CONSTRAINT migratorjobitems_destcmaid_fkey;
    -- 
    -- Increment the version
    UPDATE          sys_info
    SET             value = '8.0.108'
    WHERE           key = 'DB VERSION';
    END TRANSACTION;
EOF8.0.108
fi

if [ $VERSION \< '8.0.109' ] ; then
  psql -U cosuser $dbName << EOF8.0.109
    BEGIN TRANSACTION;
    --
    -- I missed a couple of cases when I changed the legacy playlist
    -- from reporting showplaylistidnum to playlistidnum
    --
    ALTER TABLE     featureidrequestkdcs
    DROP CONSTRAINT featureidrequestkdcs_cosfeatureid_fkey;
    ALTER TABLE     featureidrequestkdcs
    ADD CONSTRAINT  featureidrequestkdcs_cosfeatureid_fkey
    FOREIGN KEY     (cosfeatureid)
    REFERENCES      playlist(playlistidnum)
    ON DELETE       CASCADE;
    --
    ALTER TABLE     ticket_system_ids
    DROP CONSTRAINT ticket_system_ids_showplaylistidnum_fkey;
    ALTER TABLE     ticket_system_ids
    RENAME          showplaylistidnum
    TO              playlistidnum;
    ALTER TABLE     ticket_system_ids
    ADD CONSTRAINT  ticket_system_ids_playlistidnum_fkey
    FOREIGN KEY     (playlistidnum)
    REFERENCES      playlist(playlistidnum)
    ON DELETE       CASCADE;
    -- 
    -- Increment the version
    UPDATE          sys_info
    SET             value = '8.0.109'
    WHERE           key = 'DB VERSION';
    END TRANSACTION;
EOF8.0.109
fi

Я уверен, что есть лучший способ сделать это, но пока он работает для меня.

Пол Томблин
источник
Мы делаем аналогичную вещь, за исключением того, что мы помещаем каждую «if версию» в отдельный файл и имеем инструмент, который запускает файлы по порядку.
Jwanagel
Мы также работаем над тем же, за исключением того, что устанавливаются сценарии SQL (новая установка или обновление) вместе с файлами приложения, а также регистрируются местоположение, дата и время выполнения сценария.
si618
Я тоже написал что-то вроде этого, но для баз данных Jet (например, MS Access). В настоящее время мы используем DB Ghost для SQL Server, который делает многое для вас.
Кенни Эвитт
Вы можете заменить begin transaction; ... end transaction;на переход --single-transactionк psql.
Владимир,
18

Да. Код есть код. Мое эмпирическое правило заключается в том, что мне нужно иметь возможность создавать и развертывать приложение с нуля , не глядя на машину для разработки или производства.

Стю Томпсон
источник
13

Наилучшая практика, которую я видел, - это создание сценария сборки, который удаляет и перестраивает вашу базу данных на промежуточном сервере. Каждой итерации давали папку для изменений базы данных, все изменения были записаны с помощью команды «Drop ... Create». Таким образом, вы можете в любое время выполнить откат к более ранней версии, указав сборку в папке, в которую хотите установить версию.

Я считаю, что это было сделано с помощью NaNt / CruiseControl.

Сара Чиппс
источник
11

ДА, я думаю, что важно создать версию вашей базы данных. Не данные, а схема наверняка.

В Ruby On Rails это обрабатывается платформой с помощью «миграций». Каждый раз, когда вы изменяете базу данных, вы создаете сценарий, который применяет изменения и проверяет его в системе контроля версий.

Моему магазину эта идея настолько понравилась, что мы добавили функциональность в нашу сборку на основе Java, используя сценарии оболочки и Ant. Мы интегрировали процесс в нашу процедуру развертывания. Было бы довольно легко написать сценарии, чтобы сделать то же самое в других средах, которые не поддерживают готовое управление версиями БД.

Пит
источник
8

Новые проекты баз данных в Visual Studio предоставляют контроль версий и сценарии изменений.

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

Схема БД «измельчается» для создания множества мелких файлов .sql, по одному на команду DDL, описывающую БД.

+ том


Дополнительная информация 2008-11-30

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

Поскольку схема «измельчена» в файлы sql, система управления исходным кодом работает нормально.

Одна проблема заключается в том, что вам нужно иметь другое мышление, когда вы используете проект БД. У инструмента есть «проект БД» в VS, который представляет собой просто sql, плюс автоматически сгенерированная локальная база данных, которая содержит схему и некоторые другие данные администратора - но нет данных вашего приложения, плюс ваша локальная база данных dev, которую вы используете для разработка данных приложения. Вы редко знаете о автоматически сгенерированной базе данных, но вы должны знать ее там, чтобы оставить ее в покое :). Этот специальный БД хорошо узнаваем, потому что в его имени есть Guid,

Проект VS DB делает хорошую работу по интеграции изменений БД, которые другие члены команды внесли в ваш локальный проект / связанный БД. но вам нужно сделать дополнительный шаг, чтобы сравнить схему проекта с вашей локальной схемой dev db и применить моды. Это имеет смысл, но на первый взгляд кажется неловким.

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

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

+ том

Том А
источник
8

Требование к командам разработчиков использовать систему управления исходным кодом базы данных SQL - это не волшебная палочка, которая предотвратит возникновение проблем. Сам по себе контроль источника базы данных вносит дополнительные накладные расходы, поскольку разработчики должны сохранять изменения, внесенные в объект, в отдельном скрипте SQL, открывать клиент системы управления исходным кодом, проверять файл скрипта SQL с помощью клиента, а затем применить изменения к действующей базе данных.

Я могу предложить использовать надстройку SSMS под названием ApexSQL Source Control . Это позволяет разработчикам легко сопоставлять объекты базы данных с системой контроля версий с помощью мастера непосредственно из SSMS. Надстройка включает в себя поддержку TFS, Git, Subversion и других систем SC. Он также включает поддержку контроля источника статических данных.

После загрузки и установки ApexSQL Source Control просто щелкните правой кнопкой мыши базу данных, для которой вы хотите управлять версиями, и перейдите в подменю ApexSQL Source Control в SSMS. Щелкните ссылку «Управление базой данных с источником», выберите систему управления источником и модель разработки. После этого вам нужно будет предоставить информацию для входа в систему и строку хранилища для выбранной вами системы контроля версий.

Вы можете прочитать эту статью для получения дополнительной информации: http://solutioncenter.apexsql.com/sql-source-control-reduce-database-development-time/

AliceF
источник
6

Я делаю, сохраняя сценарии создания / обновления и сценарий, который генерирует выборочные данные.

Paco
источник
6

Да, мы делаем это, сохраняя наш SQL как часть нашей сборки - мы сохраняем DROP.sql, CREATE.sql, USERS.sql, VALUES.sql и контроль версий, поэтому мы можем вернуться к любой теговой версии.

У нас также есть муравьиные задания, которые могут при необходимости воссоздать БД.

Плюс, SQL затем помечается вместе с вашим исходным кодом, который идет с ним.

DustinB
источник
6

Самая успешная схема, которую я когда-либо использовал в проекте, объединяла резервные копии и разностные файлы SQL. По сути, мы будем делать резервную копию нашей базы данных после каждого выпуска и делать дамп SQL, чтобы мы могли создать пустую схему с нуля, если нам это нужно. Затем в любое время, когда вам нужно внести изменения в БД, вы добавите скрипт alter в каталог sql под управлением версиями. Мы всегда будем добавлять префикс порядкового номера или даты к имени файла, поэтому первое изменение будет выглядеть примерно как 01_add_created_on_column.sql, а следующий скрипт будет 02_added_customers_index. Наша машина CI проверила бы их и последовательно запускала бы на новой копии БД, которая была восстановлена ​​из резервной копии.

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

Майк Дек
источник
6

Мы осуществляем контроль версий всех наших объектов, созданных базой данных. И просто чтобы разработчики были честными (потому что вы можете создавать объекты без их нахождения в Source Control), наши dbas периодически ищут что-либо, не находящееся в контроле исходного кода, и если они находят что-либо, они отбрасывают его, не спрашивая, нормально ли это.

HLGEM
источник
5

Я использую SchemaBank для контроля версий всех изменений схемы моей базы данных:

  • с первого дня я импортирую свой дамп схемы БД в него
  • я начал изменять свой дизайн схемы с помощью веб-браузера (потому что они основаны на SaaS / облаке)
  • когда я хочу обновить свой сервер базы данных, я генерирую из него скрипт изменения (SQL) и применяю его к базе данных. В Schemabank они поручают мне зафиксировать свою работу в качестве версии, прежде чем я смогу создать скрипт обновления. Мне нравится такая практика, так что я всегда могу отследить, когда мне это нужно.

Наше командное правило - НИКОГДА не трогать сервер БД напрямую, без предварительного сохранения проектной работы. Но бывает, у кого-то может возникнуть соблазн нарушить правило ради удобства. Мы снова импортировали бы дамп схемы в schemabank и позволили бы ему выполнить diff и bash, если будет обнаружено несоответствие. Хотя мы могли бы сгенерировать из него сценарии изменения, чтобы синхронизировать дизайн нашей БД и схемы, мы просто ненавидим это.

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

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

Leigh Pyle
источник
4

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

itsmatt
источник
4

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

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

Да, прежде чем вы это скажете, это очень похоже на то, что делают Rails и другие, но, похоже, работает довольно хорошо, поэтому у меня нет проблем, признав, что я бесстыдно поднял идею :)

Дэн
источник
4

Я использую сценарии SQL CREATE, экспортированные из MySQL Workbech, затем использую их функциональность «Export SQL ALTER». В итоге я получаю серию сценариев создания (нумерованных, конечно) и сценарии изменения, которые могут применять изменения между ними.

3.- Экспорт SQL-скрипта ALTER Обычно вам придется писать операторы ALTER TABLE вручную, отражая ваши изменения, внесенные в модель. Но вы можете быть умным и позволить Workbench сделать тяжелую работу за вас. Просто выберите File -> Export -> Forward Engineer SQL ALTER Script ... из главного меню.

Это предложит вам указать файл SQL CREATE, с которым должна сравниваться текущая модель.

Выберите сценарий SQL CREATE из шага 1. Затем инструмент создаст для вас сценарий ALTER TABLE, и вы сможете выполнить этот сценарий для своей базы данных, чтобы обновить его.

Вы можете сделать это, используя MySQL Query Browser или mysql client.Voila! Ваша модель и база данных теперь синхронизированы!

Источник: MySQL Workbench Community Edition. Руководство по синхронизации схем.

Все эти скрипты, конечно, находятся внутри под контролем версий.

levhita
источник
4

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

AndrewB
источник
4

Было много дискуссий о самой модели базы данных, но мы также храним необходимые данные в файлах .SQL.

Например, чтобы ваше приложение могло быть полезным, оно может понадобиться при установке:

INSERT INTO Currency (CurrencyCode, CurrencyName) 
VALUES ('AUD', 'Australian Dollars');

INSERT INTO Currency (CurrencyCode, CurrencyName) 
VALUES ('USD', 'US Dollars');

У нас будет файл с именем currency.sqlsubversion. В качестве ручного шага в процессе сборки мы сравниваем предыдущий currency.sql с последним и пишем скрипт обновления.

WW.
источник
Мы храним необходимые данные в базе данных (кто бы мог подумать?), Затем используем наши инструменты для генерации этих сценариев вставки / обновления, чтобы синхронизировать справочные данные между dev, qa, production и т. Д. Управлять данные и изменения таким образом. Все скрипты контролируются нашими версиями / инструментами настройки.
Карен Лопес
Это практично, когда в вашей базе данных много миллионов строк?
Ронни
4

Мы контролируем и контролируем все, что связано с нашими базами данных:

  • DDL (создавать и изменять)
  • DML (справочные данные, коды и т. Д.)
  • Изменения модели данных (с использованием ERwin или ER / Studio)
  • Изменения конфигурации базы данных (разрешения, объекты безопасности, общие изменения конфигурации)

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

Карен Лопес
источник
4

Я считаю, что каждая БД должна находиться под контролем исходного кода, и разработчики должны иметь простой способ создания своей локальной базы данных с нуля. Вдохновленный Visual Studio для специалистов по базам данных, я создал инструмент с открытым исходным кодом, который создает сценарии для баз данных MS SQL и предоставляет простой способ их развертывания на вашем локальном движке БД. Попробуйте http://dbsourcetools.codeplex.com/ . Веселись, Натан.

Натан Розенталс
источник
4

Если ваша база данных SQL Server, у нас может быть именно то решение, которое вы ищете. SQL Source Control 1.0 уже выпущен.

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

Это интегрируется в SSMS и обеспечивает связь между объектами вашей базы данных и вашей VCS. «Скриптинг» происходит прозрачно (он использует движок SQL Compare под капотом), что должно сделать его настолько простым в использовании, что разработчики не будут разочарованы принятием процесса.

Альтернативным решением Visual Studio является ReadyRoll , которое реализовано как подтип проекта базы данных SSDT. Это требует подхода, основанного на миграции, который больше соответствует требованиям автоматизации команд DevOps.

Дэвид Аткинсон
источник
Я бы никому не рекомендовал продукт Red-Gate. Я использую SQL Source Control 2.2 в течение некоторого времени. Вскоре они выпустили версию 3. После этого они прекратили поддержку 2.2. Даже они не исправили никаких ошибок (которые я не рассматриваю как новые функции - ошибки являются ошибками), они также не включали поддержку TFS2012, когда она была выпущена. Моя компания перешла с TFS2010 на TFS2012, и мы больше не могли подключаться к TFS. Нам буквально пришлось выбросить программное обеспечение Red Gate, потому что единственный вариант, который они нам дали, это купить новую версию их программного обеспечения. Нет планов по обновлению вер. 2.2.
Дима
Жаль, что у них не было поддержки CLI для операционных систем не-Microsoft.
18
Похоже, у них есть пара инструментов для MySQL red-gate.com/products/mysql/mysql-comparison-bundle
Джефф
3

Я управляю схемой базы данных, используя сценарии для всех объектов (определения таблиц, индексы, хранимые процедуры и т. Д.). Но, что касается самих данных, просто полагаться на регулярные резервные копии. Это гарантирует, что все структурные изменения фиксируются с надлежащей историей изменений, но не обременяет базу данных каждый раз, когда изменяются данные.

Бен Хоффштейн
источник
3

В нашем бизнесе мы используем сценарии изменения базы данных. Когда скрипт запускается, его имя сохраняется в базе данных и больше не запускается, пока эта строка не будет удалена. Сценарии именуются на основе даты, времени и ветви кода, поэтому возможно контролируемое выполнение.

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

Уэс П
источник
3

Мы находимся в процессе перевода всех баз данных в систему контроля версий. Мы используем sqlcompare для написания сценария базы данных (к сожалению, для профессиональной версии) и помещаем этот результат в SVN.

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

Удачи вам, чем раньше вы попробуете это, тем скорее у вас будут решены проблемы.

Min
источник
3

Я использовал инструмент dbdeploy от ThoughtWorks по адресу http://dbdeploy.com/ . Это поощряет использование сценариев миграции. В каждом выпуске мы объединяли сценарии изменений в один файл, чтобы облегчить понимание и позволить администраторам баз данных «благословлять» изменения.

Давид Мединец
источник
3

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

Инструмент, который я использовал в прошлом, который помог с этим, является SQL Delta. Он покажет вам различия между двумя базами данных (я считаю, что SQL-сервер / Oracle) и сгенерирует все сценарии изменений, необходимые для переноса A-> B. Еще одна приятная вещь - показать все различия между содержимым базы данных между рабочей (или тестовой) БД и вашей БД разработки. Поскольку все больше и больше приложений хранят конфигурацию и состояние, которые имеют решающее значение для их выполнения в таблицах базы данных, может быть реальной проблемой иметь сценарии изменений, которые удаляют, добавляют и изменяют правильные строки. Дельта SQL показывает строки в базе данных так же, как они выглядели бы в инструменте Diff - измененные, добавленные, удаленные.

Отличный инструмент. Вот ссылка: http://www.sqldelta.com/

Сэм Шутте
источник
3

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

RedGate также делает моментальные снимки данных, хотя я лично с ними не работал, они такие же надежные.

Том Андерсон
источник
Система управления исходным кодом SQL от Red Gate была разработана для решения этой проблемы, поэтому, пожалуйста, ознакомьтесь с ней и сообщите нам, соответствует ли она вашим требованиям. Преимущество SQL Source Control над SQL Compare заключается в том, что он интегрируется с SSMS и поэтому не требует загрузки отдельного инструмента для регистрации различных версий схемы. [Я менеджер по продукту в Red Gate]
Дэвид Аткинсон