Подтвердить что ты не робот

Инструменты для работы с хранимыми процедурами в Oracle, в команде?

Какие инструменты вы используете для разработки хранимых процедур Oracle в команде:

  • Чтобы автоматически "заблокировать" текущую процедуру, с которой вы работаете, никто в команде не может вносить в нее изменения до тех пор, пока вы не закончите.
  • Чтобы автоматически отправлять изменения, внесенные в хранимую процедуру, в базу данных Oracle, в репозиторий Subversion, CVS,...

Спасибо!

4b9b3361

Ответ 1

Я не уверен, что оригинальный плакат все еще контролирует это, но я все равно задам вопрос.

Оригинальное сообщение, запрошенное, чтобы иметь возможность:

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

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

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

Еще один трюк, который я использовал в прошлом (в небольших группах), когда было невозможно позволить каждому разработчику иметь собственную копию данных из-за размера, заключалось в том, чтобы иметь общую схему со всеми таблицами и кодом в нем, с общественными синонимами, указывающими на все это. Затем, если разработчик захочет работать над хранимым процессом, он просто создает его в своей схеме. Таким образом, разрешение имен Oracle обнаруживает, что первое, а не копия в главной схеме, позволяет им проверять свой код, не затрагивая никого. У этого есть свои недостатки, но это был очень конкретный случай, когда мы могли бы жить с ними. Я бы никогда не реализовал что-то вроде этого в производстве.

Что касается второго требования:

Чтобы автоматически отправлять изменения, вы сделать в хранимой процедуре, в Oracle, к Subversion, CVS,... репозиторий

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

Ответ 3

Рассматривайте PL/SQL как обычный код: храните его в файлах и управляйте этими файлами с помощью средства контроля версий и внутренних процедур.

Если у вас еще нет средства управления ревизией, напишите ваши требования и выберите один из них. Многие люди, похоже, используют Subversion, связанные с TortoiseSVN как клиент в Windows (я).

Дело в том, что используйте ваш инструмент, как рекомендуется, и соответствующим образом адаптируйте свои процедуры. Например, Subversion по умолчанию использует copy-modify-merge, в отличие от lock-modify-unlock, которую вы, кажется, предпочитаете.

В моем случае мне нравится использовать TortoiseSVN, как указано выше. И как обычно с помощью этого инструмента:

  • Я никогда не блокирую файлы. Это очень легко справиться с небольшими командами, и это требует предварительного планирования более крупных, что всегда хорошо ИМХО.
  • Я отправляю свои изменения вручную на сервер, потому что... Я не думаю, что есть другой способ с Subversion (плюс, внутренние процедуры запрещают коммит без сообщения, что тоже хорошо относится к IMHO).

И независимо от вашего выбора, я рекомендую прочитать этот пост (и связанные с ним) о управлении версиями баз данных.

Ответ 4

Относительно простое (если немного старомодное) решение может заключаться в использовании системы контроля версий "блокировка", а не "слияния".... Subversion или CVS обычно используют режим "слияния" (хотя я считаю Subversion могут быть сделаны для "блокировки" файлов?)

У систем управления версиями режима "блокировка", конечно, есть свои недостатки.....

Единственный способ, которым я могу думать о том, чтобы делать это в Oracle, может быть одним из ПЕРЕД СОЗДАНИЕМ ТРИГГЕРА, возможно, ссылаясь на таблицу для поиска, кто может запускать пакет. Звучит немного неприятно?

Ответ 5

Используя Source Control для Oracle, вы получаете много того, что ищете.

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

Новый SQL для создания объекта можно затем проверить в SVN или TFS (без поддержки CVS, к сожалению).

Инструмент не является бесплатным, но имеет бесплатную 28-дневную пробную версию.

Ответ 6

Используя Oracle SQL Developer 1.5, вы можете легко создавать и управлять соединениями с CVS или Subversion. Чтобы создать соединение CVS (например), нажмите "Управление версиями" → CVS → "Проверить модуль". Вы будете запускать мастер для создания соединения (хост, имя пользователя и т.д.), Затем вы можете проверить свои процедуры/функции и как обычно.

Интеграция с CVS также предоставляется в Toad.

Ответ 7

Вы также можете посмотреть на Aqua Data Studio. Они также встроены в SVN и являются отличным редактором Stored Proc.

Ответ 8

После поиска инструмента для управления версиями для объектов Oracle без везения мы создали следующее (не идеальное, но подходящее) решение:

  • Используя dbms_metadata, мы создаем дамп метаданных нашего сервера Oracle. Мы создаем один файл для каждого объекта, поэтому результат - это не один огромный файл, а куча файлов. Для распознавания удаленного объекта мы удалим все файлы перед созданием дампа снова.
  • Скопируем все файлы с сервера на клиентский компьютер.
  • Используя Netbeans, мы распознаем изменения и зафиксируем изменения на сервере CVS (или проверьте diff...). Любое программное обеспечение CVS-обработчиков будет работать здесь, но мы уже использовали Netbeans для других целей. И Netbeans также позволяет создать задачу ant для вызова процесса Oracle, упомянутого в шаге 1, копирование файлов, упомянутых в шаге 2...

Вот наиболее важный запрос для шага 1:

SELECT object_type, object_name, 
  dbms_metadata.get_ddl(object_type, object_name) object_ddl FROM user_objects
WHERE OBJECT_TYPE in ('INDEX', 'TRIGGER', 'TABLE', 'VIEW', 'PACKAGE', 
  'FUNCTION', 'PROCEDURE', 'SYNONYM', 'TYPE')  
ORDER BY OBJECT_TYPE, OBJECT_NAME

Один файл для объектного подхода помогает идентифицировать изменения. Если я добавлю поле в таблицу TTTT (не обязательно имя реальной таблицы), то будет изменен только файл TABLE_TTTT.SQL.

Оба этапа 1 и 3 являются медленными процессами. (несколько минут для нескольких тысяч файлов)

Ответ 9

Toad также делает это, не требуя CVS/SVN.