Простой скрипт для выгрузки DDL-кода Oracle-объекта в файл.
GenDDL.sql:
1) Пользователь (схема);
2) Объект;
3) Файл для выгрузки.
Пример запуска:
GenDDL.sql:
SET TERMOUT OFF SET VERIFY OFF SET ECHO OFF SET LONG 9000000 SET LONGC 900 SET LINES 400 SET TRIMSPOOL ON SET PAGES 0 SET FEEDBACK OFF SET HEAD OFF SET SQLBLANKLINES OFF SET SERVEROUTPUT ON BEGIN DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'PRETTY', TRUE); DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SQLTERMINATOR', TRUE); DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SEGMENT_ATTRIBUTES', FALSE); DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'STORAGE', FALSE); DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'TABLESPACE', FALSE); DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'REF_CONSTRAINTS', TRUE); DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'SPECIFICATION', TRUE); DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'BODY', TRUE); DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'CONSTRAINTS', TRUE); DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'STORAGE', TRUE); DBMS_METADATA.set_transform_param (DBMS_METADATA.session_transform, 'CONSTRAINTS_AS_ALTER', TRUE); END; / SPOOL '&&3' BEGIN FOR i IN (SELECT owner, object_type, object_name, created d FROM all_objects WHERE owner = '&&1' AND object_name = '&&2') LOOP DBMS_OUTPUT.Put_Line ( DBMS_METADATA.get_ddl (REPLACE (i.object_type, ' ', '_'), i.object_name, i.owner)); END LOOP; END; / SPOOL OFF EXITИспользуется 3 входных параметра:
1) Пользователь (схема);
2) Объект;
3) Файл для выгрузки.
Пример запуска:
rlwrap sqlplus -silent=true objectman@XE/objectman @/home/maksim/projects/AntOraDDL/GenDDL.sql OBJECTMAN MYBOOKS /home/maksim/projects/AntOraDDL/mybooks.sql
А есть скрипт выгрузки всей схемы?
ОтветитьУдалитьдля последующей загрузки в контроллер версий
Готового под рукой нет, но вариантов несколько:
ОтветитьУдалить1. Можно убрать строчку "AND object_name = '&&2'", тогда в указанный файл выгрузится DDL всех объектов схемы;
2. Если нужно выгружать каждый объект в свой файл (как для СКВ в вашем случае), то можно заранее sql-скриптом сгенерировать bat-ник, bash-сценарий (или что-нибудь еще), который будет дергать вышеуказанный скрипт с нужными параметрами.
3. Если есть доступ к ФС, где база работает, то там еще проще.
4. Есть еще утилитка интересная http://code.google.com/p/oracle-ddl2svn/, хоть там все и готово, но она имеет ряд своих ограничений.
Будут вопросы - обращайтесь.
А чего в утилите oracle-ddl2svn не хватает? Я ее автор :)
ОтветитьУдалитьЕсли чего нужно - пишите в багтрекер, подумаю.
Баг http://code.google.com/p/oracle-ddl2svn/issues/detail?id=38 от Pavel.Pimenov видел, но не знаю когда до него доберусь.
Один американец мне в коммитеры присоеденился как-то, если хотите - добавлю тоже, доделаете под себя и поделитесь с сообществом.