Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > Совместная разработка процедур, пакетов


Автор: avvo 20.10.2008, 02:06
Есть проект, в котором есть база данных, которая есть Oracle.
В этом проекте используются вызовы множества процедур базы данных.
Эти процедуры скомпонованы в пакеты по их функциональной принадлежности (пакеты взаимодействия между БД, пакеты для отдельных клиентов, пакеты для web клиентов итп.).
Разработку этих функций ведут разные люди, в разных местах.
Процедуры и функции пишут используя PL/SQL Developer прямо в базе.
Не смотря на то, что БД несколько, случается так, что несколько разработчиков одновременно ковыряются в одном пакете, одной и той-же тестовой БД. Естественно, кто последний скомпилил, тот и молодец. А тот, кто не последний часть своей работы потерял.

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


Автор: DimW 20.10.2008, 06:37
Цитата(avvo @  20.10.2008,  02:06 Найти цитируемый пост)
существуют ли способы совместной работы нескольких разработчиков в одном пакете


http://notes.rudomilov.ru/2007/01/30/stavim-subversion-za-5-minut/
http://mydebianblog.blogspot.com/2008/06/subversion.html

Автор: avvo 20.10.2008, 08:56
Цитата(DimW @ 20.10.2008,  06:37)
Цитата(avvo @  20.10.2008,  02:06 Найти цитируемый пост)
существуют ли способы совместной работы нескольких разработчиков в одном пакете


http://notes.rudomilov.ru/2007/01/30/stavim-subversion-za-5-minut/
http://mydebianblog.blogspot.com/2008/06/subversion.html

Вы драматизируете. В проекте, естественно, используется SVN. Иначе никак.
Только как его использовать для работы с БД?

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

Вопрос в том, как свести отдельные изменения в один пакет?
Поддерживать исходники DDL в SVN? Это тяжеловато и от косяков не спасает.

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

Вопрос о совместной работе именно для разработки пакетов БД.
Или все так и мучаются?

Автор: Sqlninja 20.10.2008, 09:56
http://ipicture.ru/

Автор: DimW 20.10.2008, 11:40
Цитата(avvo @  20.10.2008,  08:56 Найти цитируемый пост)
Вы драматизируете. В проекте, естественно, используется SVN. Иначе никак.

как же вы его используете если у вас стоит такая проблема?!

Цитата(avvo @  20.10.2008,  08:56 Найти цитируемый пост)
Только как его использовать для работы с БД?

так же как и для всего остального:
1) забрал актуальную версию из репозитория.
2) исправил код, скомпилил, протестил, сохранил.
3) загрузил опять в рапозиторий.



Автор: avvo 20.10.2008, 14:35
Цитата(DimW @  20.10.2008,  11:40 Найти цитируемый пост)
как же вы его используете если у вас стоит такая проблема?!

Для других вещей. Не для БД.


Цитата(DimW @  20.10.2008,  11:40 Найти цитируемый пост)
так же как и для всего остального:
1) забрал актуальную версию из репозитория.
2) исправил код, скомпилил, протестил, сохранил.
3) загрузил опять в рапозиторий.


Ну наверно так и придется. Хотя нужно бы всего немного добавить:
1. Возможность залочить объект на момент писания/тестирования (надо будет присмотреться к SQL Navigator)
Или, как вариант, создание тестовой копии объекта.
2. Вменяемый мержинг при изменении объекта двумя (и более) разными разработчиками.

Автор: LSD 20.10.2008, 15:16
Цитата(avvo @  20.10.2008,  15:35 Найти цитируемый пост)
1. Возможность залочить объект на момент писания/тестирования (надо будет присмотреться к SQL Navigator)

Залочить объект в SVN возможно.


Цитата(avvo @  20.10.2008,  15:35 Найти цитируемый пост)
2. Вменяемый мержинг при изменении объекта двумя (и более) разными разработчиками.

Что значит вменяемый?


И вообще, не понятно в чем вопрос. Для остальных языков как-то люди работают коллективно и ничего. Что такого особенного в PL/SQL? Проблема будет только в DDL для модификации базы. Вот тут надо подумать как это организовать.

Автор: avvo 20.10.2008, 19:16
Цитата(LSD @  20.10.2008,  15:16 Найти цитируемый пост)
Залочить объект в SVN возможно.

В SVN - да. В базе - нет. Просто возникает ситуация, когда два-три отдельных человека, что-то делают, потом одновременно (почти) компилят, потом долго тупят, почему все не работает, потом орут друг на друга на всю аську, потом, в конце концов договариваются, кто крайний. smile

Цитата(LSD @  20.10.2008,  15:16 Найти цитируемый пост)
Что значит вменяемый?


И вообще, не понятно в чем вопрос. Для остальных языков как-то люди работают коллективно и ничего. Что такого особенного в PL/SQL? Проблема будет только в DDL для модификации базы. Вот тут надо подумать как это организовать. 


Вменяемый - это я хочу такую значит штуку, чтобы например в пакете есть процедуры А, Б, В, Г, Д. Я поковырял пакет, исправил процедуры А->А', Б->Б' и добавил Е. Закомитил.
При этом "другой я", в то же время, поковырял процедуру Г-Г' и добавил Ж. Закомитил.
При этом "третий я" после апдейта получил А', Б', В, Г', Д, Е, Ж. И чтобы второму я не приходилось вручную сводить это в одну файлу.
Аналогично хотелось бы и в DDL таблиц, секвенсов, видов и т.д. иметь мерджинг, который не тупо сводит и сравнивает тексты, а учитывает особенности языка.

При этом для отдельного скрипта отдельной процедуры SVN отлично подходит. Но когда касается пакетов, схем, тогда все ручками.

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

Вообще, если честно, этот проект изначально сделан так, чтобы было максимально неудобно. Например, по моему, стоило бы разнести разные функции для разных подсистем по разным пакетам и в такую проблему просто не упираться. Ну да ладно.

Автор: ToshaCh 20.10.2008, 20:46
Цитата(avvo @  20.10.2008,  19:16 Найти цитируемый пост)
В SVN - да. В базе - нет. Просто возникает ситуация, когда два-три отдельных человека, что-то делают, потом одновременно (почти) компилят, потом долго тупят, почему все не работает, потом орут друг на друга на всю аську, потом, в конце концов договариваются, кто крайний. 

Почему два человека одновремеено работают надо одим блоком? Почему они одновременно компилят? Что значит орать, друг на друга, и выяснять кто крайний? 

Если у вас такая ситуация возникает, то надо немдленно гнать в шею вашего менеджера проекта и нанять компетентного специалиста.

Вопрос не имеет отношения к базам данных - это вопрос управления.  

Простите, если грубо, но если хотите зарабатывать умейте организовывать процесс. Даже SVN в некомпетентных руках  превращается в помойку.

Добавлено @ 20:49
Цитата(avvo @  20.10.2008,  19:16 Найти цитируемый пост)
Вменяемый - это я хочу такую значит штуку, чтобы например в пакете есть процедуры А, Б, В, Г, Д. Я поковырял пакет, исправил процедуры А->А', Б->Б' и добавил Е. Закомитил.При этом "другой я", в то же время, поковырял процедуру Г-Г' и добавил Ж. Закомитил.

Каждую процедуру храните отдельно + makefile для сборки пакета, затем вытащили ветку, запустили make  и он вам всё собрал и скомпилил. 

Автор: LSD 21.10.2008, 12:30
Цитата(avvo @  20.10.2008,  20:16 Найти цитируемый пост)
В SVN - да. В базе - нет. Просто возникает ситуация, когда два-три отдельных человека, что-то делают, потом одновременно (почти) компилят, потом долго тупят, почему все не работает, потом орут друг на друга на всю аську, потом, в конце концов договариваются, кто крайний.

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


Цитата(avvo @  20.10.2008,  20:16 Найти цитируемый пост)
Вменяемый - это я хочу такую значит штуку, чтобы например в пакете есть процедуры А, Б, В, Г, Д. Я поковырял пакет, исправил процедуры А->А', Б->Б' и добавил Е. Закомитил.
При этом "другой я", в то же время, поковырял процедуру Г-Г' и добавил Ж. Закомитил.
При этом "третий я" после апдейта получил А', Б', В, Г', Д, Е, Ж. И чтобы второму я не приходилось вручную сводить это в одну файлу.

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


Цитата(avvo @  20.10.2008,  20:16 Найти цитируемый пост)
Аналогично хотелось бы и в DDL таблиц, секвенсов, видов и т.д. иметь мерджинг, который не тупо сводит и сравнивает тексты, а учитывает особенности языка.

Вы по моему сами не понимаете чего хотите. Для всех остальных языков, все обходятся и без синтаксического анализа, а вот для DDL, он обязательно нужен.
Что вы вообще от него хотите? Чтобы если Вася добавил в таблицу поле А, а Петя поле Б, то система сгенерировала скрипт который бы добавлял оба этих поля? smile




А вообще я согласен с ToshaCh, у вас просто плохо организованна совместная разработка, и технологии тут ни при чем. У вас не согласованны действия разработчиков, и вы хотите, чтобы техника делала это за вас.

Автор: avvo 21.10.2008, 20:43

ToshaCh, - чертовски прав smile. Эффективный менеджмент, знаете-ли smile.
Просто знаете, когда оказываешься в такой среде эффективного менеджмента, остается надеяться на чудо, что-ли. А их, чудеса, как на зло все разобрали.
Спасибо за ответы, они к сожалению, подтверждают мою изначальную позицию и противоречат настрою руководства smile (ну должна же где-то быть кнопка "решить все вопросы").
Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)