Извлечь код или скрипт из объектов базы данных

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

При разработке я не брал скрипт для резервного копирования всех объектов базы данных.

Каков наилучший способ извлечь код или скрипт? Любое предложение или помощь очень заметны.

Спасибо

4 ответа

Решение

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

В противном случае вы можете использовать системную функцию dbms_metadata.get_ddl, который возвратит клочок DDL, использованного для создания объекта. Это нужно будет сделать для каждого отдельного объекта, так что, возможно, стоит пройтись по user_objects,

В качестве альтернативы вы можете просмотреть определения в PL/SQL Developer, щелкнув правой кнопкой мыши по объекту и используя view Затем в правом нижнем углу вы можете просмотреть SQL, использованный для создания объекта.

Существует также "инструмент" экспорта, который не так хорошо объясняет, как его использовать, как вариант SQL Developer.

Конечно, правильный ответ - получить систему контроля версий и использовать ее.

Я не знаю о самой базе данных, но SQL Developer сделает это. Я уверен, что TOAD и другие подобные инструменты тоже будут.

В моем случае все пользовательские объекты начинаются с "XX". Вы можете использовать или изменить мой скрипт:

DECLARE
   CURSOR c_tables IS
     SELECT replace(object_type, ' ', '_') type,
            object_name name,
            owner schema,
            object_type||'#'||object_name||'.sql' files
       FROM all_objects
      WHERE UPPER(object_name) LIKE 'XX%'
        AND object_type NOT IN ('DIRECTORY');

   ddl_text CLOB;

 BEGIN
   FOR rec_tables IN c_tables LOOP
     dbms_output.put_line('OBJECT_TYPE: '||rec_tables.type||', OBJECT_NAME: '||rec_tables.name||', SCHEMA: '||rec_tables.schema||' ->'||rec_tables.files);

     SELECT dbms_metadata.get_ddl(rec_tables.type, rec_tables.name, rec_tables.schema)
       INTO ddl_text
       FROM DUAL;

     dbms_xslprocessor.clob2file(ddl_text, 'UTL_CUSTOM_DDL', rec_tables.files, nls_charset_id('WE8MSWIN1252'));
   END LOOP;
 END;

С уважением

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

Никогда не используйте возможности клиентов SQL GUI для редактирования объектов базы данных непосредственно в базе данных. (Если вы сознательно не хотите создавать искусственные проблемы.)

Вместо этого все SQL и PL/SQL DDL и DML должны быть расположены в текстовых файлах, сохраненных в системе контроля версий (VCS) (например, subversion, git, mercurial). Используйте ваш любимый редактор для редактирования файлов.

Измените базу данных, выполнив текстовые файлы, сохраненные в VCS, с помощью инструмента командной строки (в Oracle это sqlplus). Это относится ко всем экземплярам базы данных: разработка, контроль качества, производство.

Для крупных проектов разработки рассмотрите возможность использования инструментов миграции схемы (например, Flyway, Roundhouse).

На протяжении многих лет мне удалось устранить множество проблем разработки и производства, применяя простое правило:

Если код отсутствует в VCS, он не существует.

(Удивительно, что в 2015 году многие команды разработчиков не использовали VCS.)

Другие вопросы по тегам