Если я развертываю N pl/sql пакеты к Oracle DB, я могу сделать их компиляцию атомарной, т.е. изменения в этих пакетах будут применены после успешной компиляции всех пакетов?
Поскольку пакеты являются редактируемыми, вы можете посмотреть на переопределение на основе редакции . Это даст вам возможность атомарно переключаться между версиями ваших пакетов.
CREATE OR REPLACE и ALTER PACKAGE - это операторы DDL, и каждый отдельный оператор DDL представляет собой дискретную транзакцию. COMMIT выдается перед и после каждой команды DDL; поэтому отката для DDL нет.
Мне кажется, что у вас проблема с управлением конфигурацией. И управление конфигурацией, плюс контроль версий - способ исправить это. Держите все свои сценарии PL / SQL (черт возьми, только все сценарии) под контролем версий. Когда вы развертываете новую версию некоторых программ PL / SQL, проверьте также и предыдущие версии (в отдельный подкаталог или что-то еще, что имеет смысл в вашем режиме развертывания). Затем, если возникнут какие-либо проблемы с новыми версиями ваших пакетов, можно будет повторно развернуть старые версии.
Другие ответы здесь хороши (например, переопределение на основе редакции, которое доступно в 11gR2).
Другой вариант предоставляется PL / SQL Developer , который может быть настроен на выполнение тестовой компиляции (компилирует пакет с альтернативным именем) перед «настоящей» компиляцией.