Инструменты для работы с хранимыми процедурами в Oracle, в команде?
Какие инструменты вы используете для разработки хранимых процедур Oracle в команде:
- Чтобы автоматически "заблокировать" текущую процедуру, с которой вы работаете, никто в команде не может вносить в нее изменения до тех пор, пока вы не закончите.
- Чтобы автоматически отправлять изменения, внесенные в хранимую процедуру, в базу данных Oracle, в репозиторий Subversion, CVS,...
Спасибо!
Ответы
Ответ 1
Я не уверен, что оригинальный плакат все еще контролирует это, но я все равно задам вопрос.
Оригинальное сообщение, запрошенное, чтобы иметь возможность:
Чтобы автоматически "заблокировать" текущий с которым вы работаете, никто в команде не может сделать изменяет его до тех пор, пока вы не закончите.
Возможно, проблема здесь - одна из парадигм развития больше, чем неспособность продукта "заблокировать" хранимую процедуру. Всякий раз, когда я слышу "Я хочу заблокировать это, чтобы никто другой не менял его", я сразу чувствую, что люди разделяют схему, и все развиваются в одном и том же пространстве.
Если это так, почему бы просто не позволить каждому иметь свою собственную схему с копией модели данных? Я имею в виду серьезных людей, это ничего не стоит для создания другой схемы. Таким образом, каждый разработчик может вносить изменения до тех пор, пока они не станут синими в лицо, не затрагивая никого.
Еще один трюк, который я использовал в прошлом (в небольших группах), когда было невозможно позволить каждому разработчику иметь собственную копию данных из-за размера, заключалось в том, чтобы иметь общую схему со всеми таблицами и кодом в нем, с общественными синонимами, указывающими на все это. Затем, если разработчик захочет работать над хранимым процессом, он просто создает его в своей схеме. Таким образом, разрешение имен Oracle обнаруживает, что первое, а не копия в главной схеме, позволяет им проверять свой код, не затрагивая никого. У этого есть свои недостатки, но это был очень конкретный случай, когда мы могли бы жить с ними. Я бы никогда не реализовал что-то вроде этого в производстве.
Что касается второго требования:
Чтобы автоматически отправлять изменения, вы сделать в хранимой процедуре, в Oracle, к Subversion, CVS,... репозиторий
Я был бы удивлен, если найду инструменты, достаточно умные, чтобы сделать это (возможно, возможность:). Он должен подключиться к вашему db, запросить словарь данных (USER_SOURCE) и вытащить связанный текст. Высокий порядок для систем управления версиями, где почти повсеместно основаны файлы.
Ответ 2
В Oracle новый SQL Developer встроен встроенный контроль версий.
Вот ссылка на продукт.
http://www.oracle.com/technology/products/database/sql_developer/files/what_is_sqldev.html
http://www.oracle.com/technology/products/database/sql_developer/images/what_version.png http://www.oracle.com/technology/products/database/sql_developer/images/what_version.png
Ответ 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.