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

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

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

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

Спасибо


person Jacob    schedule 08.06.2012    source источник


Ответы (4)


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

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

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

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

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

person Ben    schedule 08.06.2012
comment
Можно ли интегрировать контроль версий с базой данных? - person Jacob; 09.06.2012
comment
Не то, что я знаю о. Вы можете создать свой собственный, сохранив все объекты DDL в таблице, однако это все равно не так безопасно, так как вы можете все потерять. У нас есть однострочный скрипт, который перебирает все папки в нашей системе контроля версий и выполняет содержащиеся в них скрипты. - person Ben; 09.06.2012
comment
Что нужно сделать, чтобы включить VCS в базе данных? Какие-либо настройки или сценарии должны быть выполнены, чтобы включить это? Спасибо - person Jacob; 10.06.2012
comment
@ user75ponic Вы не включаете VCS в базе данных. Вместо этого вы пишете все SQL и PL/SQL DDL/DML в виде текстовых файлов, используя свой любимый редактор на своем компьютере. Сохраните файлы в VCS (SVN, git, hg и т. д.) и запустите файлы в базу данных с помощью инструмента командной строки (sqlplus в Oracle). - person user272735; 14.08.2015

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

person John Watts    schedule 08.06.2012

В моем случае все пользовательские объекты начинаются с «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;

С Уважением

person Andrés M. Jiménez    schedule 21.09.2018
comment
сработало очень хорошо для меня спасибо - person Ahmed D. Sherif; 18.05.2021

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

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

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

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

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

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

Если кода нет в системе контроля версий, его не существует.

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

person user272735    schedule 14.08.2015