Управление исходным кодом базы данных с Oracle

В дополнение к бумаге, связанной в Лямбде Окончательное (из ссылки mmyers отправленный выше), у John Rose от Sun есть еще немного для высказывания об оптимизации последнего вызова.

http://blogs.oracle.com/jrose/entry/tail_calls_in_the_vm

я услышал, что это могло бы быть реализовано на JVM когда-нибудь. На поддержку последнего вызова среди других вещей смотрят на Машине Da Vinci.

http://openjdk.java.net/projects/mlvm/

13
задан borjab 7 April 2014 в 15:22
поделиться

8 ответов

Многие люди пытаются делать такие вещи (схемы различий). Я считаю, что

  • Исходный код входит в средство контроля версий (Subversion, CSV, GIT, Perforce ...). Относитесь к нему так, как если бы это был код Java или C, на самом деле это не исключение. У вас должен быть процесс установки, который проверяет его и применяет к базе данных.
  • DDL IS SOURCE CODE. Это также входит в инструмент управления версиями.
  • Данные - это серая область - таблицы поиска, возможно, должны быть в инструменте управления версиями. Данные, сгенерированные приложением, определенно не должны.

В наши дни я создаю сценарии миграции, аналогичные миграции Ruby on Rails. Поместите свой DDL в сценарии и запустите их для перемещения базы данных между версиями. Сгруппируйте изменения для выпуска в один файл или набор файлов. Затем у вас есть сценарий, который перемещает ваше приложение из версии x в версию y.

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

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

Единственное, что я никогда больше не делаю (и делал это, пока не научился лучше), - это использовать любые инструменты с графическим интерфейсом для создания объектов базы данных в моей среде разработки. Напишите сценарии DDL с первого дня - они вам все равно понадобятся, чтобы продвигать код для тестирования, производства и т. Д. Я видел так много людей, которые используют графические интерфейсы для создания всех объектов, и наступает время выпуска, есть царапина, чтобы попытаться создать сценарии для правильного создания / переноса схемы, которые часто не тестируются и терпят неудачу!

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

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

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

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

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

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

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

14
ответ дан 1 December 2019 в 21:53
поделиться

Oracle SQL Developer имеет функцию« Экспорт базы данных ». Он может создать один файл, содержащий все DDL и данные.

2
ответ дан 1 December 2019 в 21:53
поделиться

I use PL/SQL developer with a VCS Plug-in that integrates into Team Foundation Server, but it only has support for database objects, and not with the data itself, which usually is left out of source control anyways.

Here is the link: http://www.allroundautomations.com/bodyplsqldev.html

2
ответ дан 1 December 2019 в 21:53
поделиться

Это может быть не так гладко, как обнаружение различий, однако мы используем простой файл сборки ant. В нашей текущей ветке CVS у нас будет «базовый» код базы данных, разбитый на ddl для таблиц, триггеров и прочего. У нас также будет дельта-папка, разбитая таким же образом. Начиная с нуля, вы можете запустить «база» + «дельта» и получить текущее состояние базы данных. Когда вы перейдете в производство, вы просто запустите «дельта-сборку» и все готово. Эта модель не очень хорошо работает, если у вас огромная схема и вы быстро ее меняете. (Примечание: по крайней мере, среди объектов базы данных, таких как таблицы, индексы и т. П. Для пакетов, процедур, функций и триггеров это работает хорошо.) Вот пример задачи муравья:

    <target name="buildTables" description="Build Tables with primary keys and sequences">
<sql driver="${conn.jdbc.driver}" password="${conn.user.password}"
    url="${conn.jdbc.url}" userid="${conn.user.name}"
    classpath="${app.base}/lib/${jdbc.jar.name}">
    <fileset dir="${db.dir}/ddl">
        <include name="*.sql"/>
    </fileset>
</sql>
</target>
1
ответ дан 1 December 2019 в 21:53
поделиться

I think this is a case of,

  • You're trying to solve a problem
  • You've come up with a solution
  • You don't know how to implement the solution
  • so now you're asking for help on how to implement the solution

The better way to get help,

  • Tell us what the problem is
  • ask for ideas for solving the problem
  • pick the best solution

I can't tell what the problem you're trying to solve is. Sometimes it's obvious from the question, this one certainly isn't. But I can tell you that this 'solution' will turn into its own maintenance nightmare. If you think developing the database and the app that uses it is hard. This idea of versioning the entire database in a human readable form is nothing short of insane.

1
ответ дан 1 December 2019 в 21:53
поделиться

Вы пробовали Oracle Workspace Manager ? Не то чтобы у меня был опыт работы с ним в производственной базе данных, но я нашел несколько игрушечных экспериментов с ним многообещающими.

1
ответ дан 1 December 2019 в 21:53
поделиться

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

1
ответ дан 1 December 2019 в 21:53
поделиться

Хотя это может быть дорого, инструмент вроде TOAD для Oracle может быть идеальным решением для решения такого рода задач.

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

На моей последней работе у меня были сценарии NAnt, которые восстанавливали тестовые базы данных, запустите все необходимые сценарии обновления в зависимости от версии базы данных, а затем выгрузите конечный результат в DDL и DML. Я бы сделал то же самое для пустой базы данных (чтобы создать ее с нуля), а затем сравнил бы результаты. Если бы они были существенно разными (программа дампа не была идеальной), я мог бы сразу сказать, какие изменения необходимо внести в DDL и DML обновления / создания. Хотя я использовал инструменты сравнения баз данных, такие как TOAD, они были не так полезны, как рукописный SQL, когда мне нужно было создавать общие сценарии для обработки данных. (Машинно-генерируемый код может быть чрезвычайно хрупким.)

Я бы сделал то же самое для пустой базы данных (чтобы создать ее с нуля), а затем сравнил бы результаты. Если бы они были существенно разными (программа дампа не была идеальной), я мог бы сразу сказать, какие изменения необходимо внести в DDL и DML обновления / создания. Хотя я использовал инструменты сравнения баз данных, такие как TOAD, они не были так полезны, как рукописный SQL, когда мне нужно было создавать общие сценарии для обработки данных. (Машинно-генерируемый код может быть чрезвычайно хрупким.)

Я бы сделал то же самое для пустой базы данных (чтобы создать ее с нуля), а затем сравнил бы результаты. Если бы они были существенно разными (программа дампа не была идеальной), я мог бы сразу сказать, какие изменения необходимо внести в DDL и DML обновления / создания. Хотя я использовал инструменты сравнения баз данных, такие как TOAD, они были не так полезны, как рукописный SQL, когда мне нужно было создавать общие сценарии для обработки данных. (Машинно-генерируемый код может быть чрезвычайно хрупким.)

1
ответ дан 1 December 2019 в 21:53
поделиться
Другие вопросы по тегам:

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