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

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

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

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

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

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

Robert Columbia 05.03.2018 07:21
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
124
2
33 492
22
Перейти к ответу Данный вопрос помечен как решенный

Ответы 22

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

Да, но сравнение файлов SQL не даст вам необходимых сценариев для обновления базы данных dev / prod с одной версии до другой.

Asaf Mesika 19.11.2010 03:02

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

Ответ принят как подходящий

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

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

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

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

Это выбор для проектов Ruby. Ближайшим эквивалентом этого дизайна в java является миграция схемы mybatis. Для .NET эквивалент code.google.com/p/migratordotnet. ИМО, все они отличные инструменты для этой работы.

Dan Tanner 09.05.2012 16:50

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

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

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

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

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

Взгляните на пакет Oracle DBMS_METADATA.

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

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

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

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

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

В MSDN есть инструкция видео, которая очень полезна.

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

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

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

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

From the web:

The Version Control Plug-In provides a tight integration between the PL/SQL Developer IDE >>and any Version Control System that supports the Microsoft SCC Interface Specification. >>This includes most popular Version Control Systems such as Microsoft Visual SourceSafe, >>Merant PVCS and MKS Source Integrity.

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

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

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

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

Рекомендации по двум книгам: «Рефакторинг баз данных» Эмблера и Садаладжа и «Методы гибкой разработки баз данных» Эмблера.

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

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

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

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

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

Я немного сторонник старой закалки в том, что использую исходные файлы для создания базы данных. На самом деле существует 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 $, чтобы заморозить их.

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

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

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

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

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

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

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

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

мы используем Liquibase, но мы используем 3 разных подхода для получения различной информации: 1. структура (таблица, представления, ...): исторический журнал изменений 2. коды (процедуры, pl / sql, функции): журнал изменений только с одним набором изменений, отмеченным значком runalways = true runonchange = true 3. кодовые таблицы, другие мета «константы», хранящиеся в таблицах: тот же подход, что и для кодов, только одна ревизия, удалить из, вставить всю информацию

Palesz 22.07.2011 00:12

Для Java я настоятельно рекомендую взглянуть на flywaydb.org в наши дни - см. Также сравнение функций на этом сайте

Karussell 24.02.2016 20:35

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

To achieve a good database change management practice, we need to identify a few key goals. Thus, the MyBatis Schema Migration System (or MyBatis Migrations for short) seeks to:

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

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

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

Другие вопросы по теме