Простой скрипт для выгрузки 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 видел, но не знаю когда до него доберусь.
Один американец мне в коммитеры присоеденился как-то, если хотите - добавлю тоже, доделаете под себя и поделитесь с сообществом.