Ho problemi ad estrarre il DDL per uno schema dato con DBMS_METADATA, probabilmente perché la mia comprensione di ciò è errata.Come ottenere un SCHEMA Oracle come script DDL con DBMS_METADATA (e SCHEMA_EXPORT)
Ecco quello che fondamentalmente faccio:
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
ho avuto l'impressione che questo metodo sarebbe tornato il bilancio "CREATE TABLE" in tale modo che essi potrebbero essere creati, cioè, tabelle dipendenti sarebbero stati emessi dopo.
Si scopre, tuttavia, che l'ordine delle tabelle è arbitrario in quanto alcune tabelle sono emesse con un vincolo di chiave esterna che fa riferimento a una tabella che non è stata emessa.
Per "risolvere" questo problema, ho impostato il REF_CONSTRAINT
e il CONSTRAINTS_AS_ALTER
su falso e vero, rispettivamente, perché ho pensato che questo avrebbe risolto il mio problema. Che non è il caso
Quindi, c'è un problema intorno al mio problema o c'è un ambiente che ho trascurato?
Buona domanda. In attesa di risposta. – Rene