Вопрос по oracle10g, toad, plsql, database, plsqldeveloper – Извлечь код или скрипт из объектов базы данных

0

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

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

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

Спасибо

Ваш Ответ

4   ответа
0

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

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

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

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

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

За эти годы я смог устранить тонны проблем разработки и производства, применяя простое правило:

If the code is not in the VCS it doesn't exists.

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

6

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

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

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

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

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

Не то, что я знаю из. Вы можете создать свой собственный, сохранив все объекты DDL в таблице, однако, это все еще не так безопасно, как вы можете потерять все. У нас просто есть однострочный скрипт, который перебирает все папки в нашей VCS и выполняет там скрипты.
@ user75ponic Вы не включаете VCS в базе данных. Вместо этого вы пишете все SQL и PL / SQL DDL / DML в виде текстовых файлов, используя ваш любимый редактор на вашем компьютере. Сохраните файлы в VCS (SVN, git, hg и т. Д.) И выполните команду «Выполнить». файлы в базу данных с помощью инструмента командной строки (sqlplus в Oracle).
Что нужно сделать, чтобы включить VCS в базе данных? Любая настройка или сценарии должны быть выполнены, чтобы включить это? Спасибо Jåcob
Можно ли интегрировать контроль версий с базой данных? Jåcob
Да, VCS - хороший вариант. Большое спасибо. Jåcob
0

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

С уважением

1

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

Похожие вопросы