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

голоса
104

Я часто впадать в следующей задаче.

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

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

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

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


22 ответов

голоса
56

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

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

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

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

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

голоса
29

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

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

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

SQL

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

INSERT IGNORE  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 $, чтобы заморозить их.

Ответил 26/09/2008 в 21:29
источник пользователем

голоса
11

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

Ответил 08/07/2011 в 15:51
источник пользователем

голоса
11

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

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

  • Работа с любой базой данных, новые или существующие
  • Эффективное использование системы управления исходным кодом (например, Subversion)
  • Включить одновременно разработчик или команды работать независимо друг от друга
  • Разрешить конфликты очень заметны и легко управляемым
  • Разрешить для прямой и обратной миграции (развиваться, переходят соответственно)
  • Сделать текущее состояние базы данных легко доступной и понятной
  • Включение миграции, несмотря на привилегии доступа или бюрократии
  • Работа с любой методологии
  • Призывает хорошие, последовательные практики
Ответил 10/07/2010 в 22:56
источник пользователем

голоса
10

Интересно , что никто не упомянул инструмент с открытым исходным кодом LiquiBase , который на основе Java и должны работать почти каждая база данных , которая поддерживает JDBC. По сравнению с рельсов он использует XML вместо рубина , чтобы выполнить изменения схемы. Хотя мне не нравится XML для домена конкретных языков очень крутое преимуществом XML является то , что LiquiBase знает , как откатить некоторые операции , такие как

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

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

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

Ответил 10/07/2010 в 22:26
источник пользователем

голоса
10

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

Они имеют как SQL-сервер & версии Oracle.

Ответил 28/05/2009 в 03:12
источник пользователем

голоса
9

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

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

голоса
8

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

Там есть обучающее видео на MSDN , что это очень полезно.

Я знаю о DBMS_METADATA и жаба, но если кто-то может придумать Чувак данных для Oracle, то жизнь была бы очень мило.

Ответил 10/09/2008 в 20:49
источник пользователем

голоса
7

Посмотрите на оракул пакет DBMS_METADATA.

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

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

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

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

Ответил 01/09/2008 в 21:57
источник пользователем

голоса
7

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

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

Ответил 31/08/2008 в 12:25
источник пользователем

голоса
7

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

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

голоса
6

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

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

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

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

Ответил 17/09/2008 в 16:50
источник пользователем

голоса
6

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

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

Ответил 15/09/2008 в 16:01
источник пользователем

голоса
6

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

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

голоса
5

ER Студия позволяет отменить схему базы данных в инструмент , а затем вы можете сравнить его жить базы данных.

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

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

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

голоса
5

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

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

голоса
3

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

Ответил 22/12/2014 в 11:58
источник пользователем

голоса
2

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

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

Ответил 10/01/2010 в 03:59
источник пользователем

голоса
2

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

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

Ответил 26/09/2008 в 19:12
источник пользователем

голоса
1

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

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

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

голоса
1

Две рекомендации книги: «Рефакторинг баз данные» по Амблеру и Sadalage и «Agile методы базы данных» по Амблеру.

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

Ответил 22/09/2008 в 19:17
источник пользователем

голоса
1

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

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

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