Создание повторно запускаемых сценариев Oracle DDL SQL - PullRequest
3 голосов
/ 19 июля 2011

Наша команда разработчиков делает все свои разработки на своих локальных машинах, включая базы данных.Когда мы вносим изменения в схемы, мы сохраняем SQL-файл в файл, который затем отправляется в систему контроля версий (если есть лучшая практика для этого, я также буду открыт для прослушивания)

При работе на SQL Server мы обернули наши обновления вокруг операторов «если есть», чтобы сделать их повторно запускаемыми.Я не работаю над проектом Oracle 10g, и я не могу найти функции оракула, которые делают то же самое.Я смог найти эту ветку на dbaforums.org, но ответ здесь кажется немного глупым.

Ответы [ 2 ]

2 голосов
/ 19 июля 2011

Я предполагаю, что это для какой-то Автоматизации процесса сборки и восстановления сборки с нуля, если что-то не получается.

Как указала Шеннон, объекты PL / SQL, такие как процедуры, функции и пакеты, имеют опцию «создать или заменить», поэтому вторая перекомпиляция / повторный запуск будет в порядке. Гранты тоже должны быть в порядке.

Что касается создания таблиц и DDL, вы можете воспользоваться одним из следующих подходов.

1) Не добавляйте команды удаления в сценарии и попросите группу разработчиков придумать сценарий возврата для отдельных модулей.

Таким образом, для каждой создаваемой таблицы, которую они добавляют в сборку, к сценарию добавляется эквивалент «DROP TABLE ..», скажем. «Build_rollback.sql». Если ваша сборка не удалась, вы можете запустить этот скрипт перед началом сборки с нуля.

2) Второй (и наиболее часто используемый подход, который я видел) заключается в том, чтобы включить таблицу DROP непосредственно перед оператором создания таблицы, а затем игнорировать ошибки «Таблица или представление не существует» в журнале сборки. Нечто подобное ..

DROP TABLE EMP;
CREATE TABLE EMP (
   .......
   .......
);

В теме, которую вы разместили, есть большой недостаток. Наиболее важным является то, что вы всегда создаете таблицы постепенно. Например, ваша база данных уже содержит 100 таблиц, и вы добавляете еще 5 как часть этого выпуска. Сценарий создает DROP Create для всех 100 таблиц, а затем выполняет его, что не имеет особого смысла (если только вы не создаете базу данных в первый раз).

1 голос
/ 19 июля 2011

Сценарий SQL * Plus будет продолжаться после ошибок, если не указано иное.

Таким образом, вы можете использовать все свои сценарии:

DROP TABLE TABLE_1;
CREATE TABLE TABLE_1 (...

Это опция в PowerDesigner, язнать.

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

Я бы рассмотрел декомпозицию SQL для создания базы данных;один гигантский сценарий, содержащий все для схемы, звучит убийственно в общей среде.Разделение на уровне Схема / Тип объекта / Имя может быть разумным, сохраняя вместе полностью зависимые типы объектов (например, таблицы и индексы).

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