Существует ли система контроля версий для изменения структуры базы данных?

Я часто сталкиваюсь со следующей проблемой.

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

Итак, я делаю толчок к работающей системе и получаю большую, очевидную ошибку, которой нет NewColumnX, тьфу.

Независимо от того, что это не может быть наилучшей практикой в ​​этой ситуации, существует ли система контроля версий для баз данных? Я не забочусь о конкретной технологии базы данных. Я просто хочу знать, если таковой существует. Если это случится для работы с MS SQL Server, то отлично.

2.08.2008 01:52:54
В соответствии с нашими указаниями по теме « Некоторые вопросы по-прежнему не по теме, даже если они вписываются в одну из категорий, перечисленных выше: ... Вопросы, в которых нас просят порекомендовать или найти книгу, инструмент, библиотеку программного обеспечения, учебное пособие или другое Вне сайта ресурсы не по теме ... "
Robert Columbia 5.03.2018 04:21:53
22 ОТВЕТА
РЕШЕНИЕ

В Ruby on Rails есть концепция миграции - быстрый скрипт для изменения базы данных.

Вы создаете файл миграции, в котором есть правила для увеличения версии БД (например, добавление столбца) и правила для понижения версии (например, удаление столбца). Каждая миграция пронумерована, и таблица отслеживает вашу текущую версию БД.

Чтобы выполнить миграцию , вы запускаете команду db: migrate, которая просматривает вашу версию и применяет необходимые сценарии. Вы можете перейти вниз аналогичным образом.

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

62
3.08.2008 04:44:07
Это выбор для проектов Ruby. Ближайшим эквивалентом этого дизайна в Java является миграция схемы mybatis. Для .NET эквивалентом является code.google.com/p/migratordotnet . Они все отличные инструменты для этой работы IMO.
Dan Tanner 9.05.2012 12:50:54

Я немного старомоден, я использую исходные файлы для создания базы данных. На самом деле существует 2 файла - project-database.sql и project-updates.sql - первый для схемы и постоянных данных, а второй для изменений. Конечно, оба находятся под контролем источников.

Когда база данных изменяется, я сначала обновляю основную схему в project-database.sql, затем копирую соответствующую информацию в project-updates.sql, например, в инструкции ALTER TABLE. Затем я могу применить обновления к базе данных разработки, протестировать, выполнить итерацию, пока все не будет сделано хорошо. Затем проверьте файлы, протестируйте снова и примените к производству.

Кроме того, у меня обычно есть таблица в db - Config - такая как:

SQL

CREATE TABLE Config
(
    cfg_tag VARCHAR(50),
    cfg_value VARCHAR(100)
);

INSERT INTO Config(cfg_tag, cfg_value) VALUES
( 'db_version', '$Revision: $'),
( 'db_revision', '$Revision: $');

Затем я добавляю следующее в раздел обновления:

UPDATE Config SET cfg_value='$Revision: $' WHERE cfg_tag='db_revision';

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

Я мог хранить обновления в их отдельных файлах, но я решил собрать их все вместе и использовать вырезать и вставить для извлечения соответствующих разделов. Немного больше служебного порядка, т. Е. Удалите ':' из $ Revision 1.1 $, чтобы заморозить их.

30
24.05.2011 20:36:52

MyBatis (ранее iBatis) имеет миграцию схемы , инструмент для использования в командной строке. Он написан на Java, хотя может быть использован с любым проектом.

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

  • Работа с любой базой данных, новой или существующей
  • Использовать систему контроля версий (например, Subversion)
  • Разрешить одновременным разработчикам или командам работать независимо
  • Разрешить конфликты очень заметные и легко управляемые
  • Разрешить прямую и обратную миграцию (развиваться, развиваться соответственно)
  • Сделать текущий статус базы данных легкодоступным и понятным
  • Разрешить миграцию, несмотря на привилегии доступа или бюрократию
  • Работать с любой методологией
  • Поощряет хорошие, последовательные методы
12
10.07.2010 21:56:52

Redgate имеет продукт под названием SQL Source Control . Он интегрируется с TFS, SVN, SourceGear Vault, Vault Pro, Mercurial, Perforce и Git.

12
8.07.2011 14:51:41

Я очень рекомендую дельта SQL . Я просто использую его для генерации сценариев diff, когда я закончу кодировать свою функцию, и проверяю эти сценарии в своем инструменте управления версиями (Mercurial :))

У них есть версия SQL-сервера и Oracle.

11
28.05.2009 02:12:15

Интересно, что никто не упомянул инструмент с открытым исходным кодом liquibase, который основан на Java и должен работать почти для каждой базы данных, поддерживающей jdbc. По сравнению с рельсами он использует xml вместо ruby ​​для выполнения изменений схемы. Хотя мне не нравится xml для языков, специфичных для предметной области, очень классное преимущество xml заключается в том, что liquibase знает, как откатить некоторые операции, такие как

<createTable tableName="USER"> 
   <column name="firstname" type="varchar(255)"/>
</createTable>

Так что вам не нужно справляться с этим самостоятельно

Чистые операторы SQL или импорт данных также поддерживаются.

11
10.07.2010 21:26:04
мы используем liquibase, но мы используем 3 разных подхода для разной информации: 1. структура (таблица, представления, ...): исторический журнал изменений 2. коды (процедуры, pl / sql, функции): журнал изменений только с одним набором изменений, отмеченным знаком runalways = true runonchange = true 3. кодовые таблицы, другие мета-константы, хранящиеся в таблицах: тот же подход, что и для кодов, только один набор изменений, удалить из, вставить всю информацию
Palesz 21.07.2011 20:12:58
Что касается Java, я очень рекомендую посмотреть на flywaydb.org в эти дни - см. Также сравнение возможностей на этом сайте
Karussell 24.02.2016 17:35:14

Большинство систем баз данных должны поддерживать дамп вашей базы данных в файл. Во всяком случае, я знаю, что MySQL. Это будет просто текстовый файл, так что вы можете отправить его в Subversion, или что вы используете. Было бы легко запустить diff для файлов тоже.

10
2.08.2008 01:56:51
Да, но различие файлов SQL не даст вам необходимых сценариев для обновления вашей базы данных dev / prod с одной ревизии на другую
Asaf Mesika 19.11.2010 00:02:30

Если вы используете SQL Server, было бы трудно победить Data Dude (он же версия базы данных Visual Studio). Как только вы это освоите, сравнение схемы между вашей исходной версией базы данных и версией, находящейся под контролем, будет проще простого. И одним щелчком мыши вы можете создать свой diff DDL.

На MSDN есть обучающее видео, которое очень полезно.

Я знаю о DBMS_METADATA и Toad, но если бы кто-то мог придумать Data Dude для Oracle, тогда жизнь была бы действительно сладкой.

9
10.09.2008 19:49:15

Сделайте ваши первоначальные операторы создания таблицы в контроллере версий, затем добавьте операторы alter table, но никогда не редактируйте файлы, просто добавляйте файлы с идеальным последовательным именем или даже как «набор изменений», чтобы вы могли найти все изменения для конкретного развертывания.

Самая трудная часть, которую я вижу, это отслеживание зависимостей, например, для конкретной таблицы развертывания B может потребоваться обновление до таблицы A.

8
31.08.2008 11:25:21

Для Oracle я использую Toad , который может записать схему в несколько отдельных файлов (например, по одному файлу на таблицу). У меня есть несколько сценариев, которые управляют этой коллекцией в Perforce, но я думаю, что это легко сделать практически в любой системе контроля версий.

8
21.01.2009 16:07:11

Взгляните на пакет оракула DBMS_METADATA.

В частности, следующие методы особенно полезны:

  • DBMS_METADATA.GET_DDL
  • DBMS_METADATA.SET_TRANSFORM_PARAM
  • DBMS_METADATA.GET_GRANTED_DDL

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

Не уверен, что есть что-то такое простое для MSSQL.

8
20.12.2016 05:32:42

Я пишу свои сценарии выпуска БД параллельно с кодированием и храню сценарии выпуска в разделе, посвященном конкретному проекту, в SS. Если я внесу изменение в код, который требует изменения в БД, я одновременно обновлю скрипт выпуска. Перед выпуском я запускаю скрипт выпуска на чистой базе данных разработчика (копируемую структуру с производства) и выполняю на нем финальное тестирование.

7
30.08.2008 18:58:40

Я делал это время от времени - управлял (или пытался управлять) версиями схемы. Лучшие подходы зависят от инструментов, которые у вас есть. Если вы сможете приобрести инструмент Quest Software «Schema Manager», вы будете в хорошей форме. У Oracle есть собственный, более низкий инструмент, который также называется «Диспетчер схем» (много смущает?), Который я не рекомендую.

Без автоматизированного инструмента (см. Другие комментарии здесь о Data Dude) вы будете напрямую использовать скрипты и файлы DDL. Выберите подход, задокументируйте его и строго придерживайтесь. Мне нравится иметь возможность заново создавать базу данных в любой момент, поэтому я предпочитаю иметь полный экспорт DDL всей базы данных (если я администратор базы данных) или схемы разработчика (если я в продукте) режим разработки).

7
15.09.2008 15:01:05

PLSQL Developer, инструмент от All Arround Automations, имеет плагин для репозиториев, который работает нормально (но не очень) с Visual Source Safe.

Из Интернета:

Плагин контроля версий обеспечивает тесную интеграцию между IDE разработчика PL / SQL >> и любой системой контроля версий, которая поддерживает спецификацию интерфейса Microsoft SCC. >> Сюда входят самые популярные системы контроля версий, такие как Microsoft Visual SourceSafe, >> Merant PVCS и MKS Source Integrity.

http://www.allroundautomations.com/plsvcs.html

7
17.09.2008 15:50:33

ER Studio позволяет вам обратить схему вашей базы данных в инструмент, а затем сравнить ее с действующими базами данных.

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

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

7
21.01.2009 16:08:58

Есть PHP5 "среда миграции базы данных", которая называется Ruckusing. Я не использовал его, но примеры показывают идею: если вы используете язык для создания базы данных по мере необходимости, вам нужно только отслеживать исходные файлы.

6
2.08.2008 07:48:56

Инструменты визуализации Microsoft SQL Server можно использовать в Visual Studio для генерации сценариев для объектов базы данных в рамках проекта SQL Server. Затем вы можете добавить сценарии в систему управления версиями с помощью интеграции системы управления версиями, встроенной в Visual Studio. Кроме того, проекты SQL Server позволяют проверять объекты базы данных с помощью компилятора и генерировать сценарии развертывания для обновления существующей базы данных или создания новой.

4
22.12.2014 11:58:25

Мы использовали MS Team System Database Edition с довольно хорошим успехом. Он более или менее интегрируется с управлением версиями TFS и Visual Studio и позволяет легко управлять сохраненными процессами, представлениями и т. Д. Разрешение конфликтов может быть проблемой, но история версий завершена, как только это будет сделано. После этого переход к QA и производству чрезвычайно прост.

Справедливо сказать, что это продукт версии 1.0, хотя и не без проблем.

3
21.01.2009 16:08:21

Schema Compare for Oracle - это инструмент, специально разработанный для переноса изменений из нашей базы данных Oracle в другую. Пожалуйста, посетите URL ниже для ссылки на скачивание, где вы сможете использовать программное обеспечение для полнофункциональной пробной версии.

http://www.red-gate.com/Products/schema_compare_for_oracle/index.htm

3
11.07.2010 22:15:37

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

2
1.09.2008 07:29:33

Я бы порекомендовал один из двух подходов. Во-первых, инвестируйте в PowerDesigner от Sybase. Enterprise Edition. Это позволяет создавать физические модели данных и многое другое. Но он поставляется с хранилищем, которое позволяет вам проверять ваши модели. Каждая новая регистрация может быть новой версией, она может сравнивать любую версию с любой другой версией и даже с тем, что находится в вашей базе данных в то время. Затем он представит список всех различий и спросит, какие из них следует перенести ... и затем создаст сценарий для этого. Это не дешево, но выгодно в два раза дороже, а рентабельность инвестиций составляет около 6 месяцев.

Другая идея - включить аудит DDL (работает в Oracle). Это создаст таблицу с каждым внесенным вами изменением. Если вы запросите изменения из отметки времени, когда вы в последний раз перемещали изменения базы данных в prod прямо сейчас, у вас будет упорядоченный список всего, что вы сделали. Несколько предложений where для исключения изменений с нулевой суммой, таких как create table foo; с последующей дроп-таблицей foo; и вы можете легко построить мод-скрипт. Зачем хранить изменения в вики, это двойная работа. Позвольте базе данных отследить их для вас.

2
21.01.2009 16:05:45

Две рекомендации книги: «Рефакторинг баз данных» от Ambler и Sadalage и «Agile Database Techniques» от Ambler.

Кто-то упомянул Rails Migrations. Я думаю, что они отлично работают, даже за пределами приложений Rails. Я использовал их в приложении ASP с SQL Server, которое мы перешли на Rails. Вы проверяете сами сценарии миграции в VCS. Вот пост прагматичного Дэйва Томаса на эту тему.

1
22.09.2008 18:17:48