DBMS_METADATA를 사용하여 주어진 스키마에 대해 DDL을 추출하는 데 어려움이 있습니다.DBMS_METADATA (및 SCHEMA_EXPORT)를 사용하여 Oracle SCHEMA를 DDL 스크립트로 가져 오는 방법
set termout off
create table copy_dml_schema(c clob, i number);
declare
m number;
t number;
e number;
c clob;
i number := 0;
begin
e := dbms_metadata.session_transform;
dbms_metadata.set_transform_param (e, 'REF_CONSTRAINTS' , false );
dbms_metadata.set_transform_param (e, 'CONSTRAINTS_AS_ALTER', true );
dbms_metadata.set_transform_param (e, 'CONSTRAINTS' , true );
dbms_metadata.set_transform_param (e, 'FORCE' , true );
m := dbms_metadata.open('SCHEMA_EXPORT');
t := dbms_metadata.add_transform (m, 'DDL' );
dbms_metadata.set_transform_param (t, 'PRETTY' , true );
dbms_metadata.set_transform_param (t, 'SQLTERMINATOR' , true );
dbms_metadata.set_filter (m, 'SCHEMA' , 'XYZ');
dbms_metadata.set_filter (m, 'EXCLUDE_PATH_EXPR' , 'in (' ||
'''GRANT'' ,' ||
'''SYNONYM'' ,' ||
'''STATISTICS'' ,' ||
'''COMMENT'' ' ||
')');
loop
c := dbms_metadata.fetch_clob(m);
exit when c is null;
insert into copy_dml_schema values (c, i);
i := i+1;
end loop;
dbms_metadata.close(m);
end;
/
commit;
set pages 0
set trimspool on
set long 1000000
set lines 300
set longchunksize 300
spool c:\temp\the_schema.sql
select
c
from
copy_dml_schema
order
by i;
spool off
drop table copy_dml_schema;
set termout on
나는이 방법은 생성 될 수 있다는 등의 순서로 "표 만들기"문을 반환하는 인상이었다, 즉, 종속 테이블이 방출 될 것이다 : 여기
는 기본적으로 내가하는 일입니다 후에.그러나 방출되지 않은 테이블을 참조하는 외래 키 제약 조건을 사용하여 일부 테이블을 생성한다는 점에서 테이블의 순서는 임의적입니다.
이 문제를 "해결"하기 위해 나는이 문제를 해결할 것이라고 생각했기 때문에 REF_CONSTRAINT
과 CONSTRAINTS_AS_ALTER
을 각각 거짓과 참으로 설정했습니다. 그렇지 않습니다.
내 문제가 해결 되었습니까? 아니면 간과 된 설정이 있습니까?
좋은 질문입니다. 대답을 기대합니다. – Rene