Cómo exportar un script DDL para importarlo en otra base de datos Oracle

Hola Amig@s,

Aquí les dejo una serie de pasos para poder exportar a script, una tabla, indice, tablespace, paquete o función.

Lo primero que debemos hacer es decirle a Oracle que nos quite del DDL aquella información que no es necesaria. Por ejemplo, el nombre del tablespace, el porcentaje utilizado, el tamaño que debe tomar, etc.

Todo esto hay que hacerlo como SYS:

--quita el parámetro storage.
execute dbms_metadata.set_transform_param(dbms_metadata.session_transform,'storage',false); 

--quita los parámetros PCTFREE etc.
execute dbms_metadata.set_transform_param (dbms_metadata.session_transform,'segment_attributes', false);

--quita el parámetro del tablespace.
execute dbms_metadata.set_transform_param(dbms_metadata.session_transform,'tablespace',false);

--devuelve el formato del script de forma ordenada.
execute dbms_metadata.set_transform_param(dbms_metadata.session_transform,'pretty',true);

--añade el ; al final de cada linea que saque el DDL.
execute dbms_metadata.set_transform_param(dbms_metadata.session_transform,'sqlterminator',true);

Luego exportamos lo que necesitamos, con la siguiente sentencia SQL. Obviamente el primer y segundo parámetro es el objeto a importar y su propiedad, por ejemplo:

select dbms_metadata.get_ddl('INDEX', index_name, owner)
from all_indexes
where owner in ('USUARIODEBBDD');

Exportaremos todos los indices del usuario USUARIOBBDD, nombre del indice y propietario.

La salida será algo similar a ésto:

CREATE INDEX USUARIODEBBDD.INDXTIPOINTERFASE ON USUARIODEBBDD.INTERFAZ (TIPOINTERFASE, FORMATO);

Otra opción por ejemplo es exportar un usuario y todos sus privilegios, para ello, tendremos que utilizar el siguiente script.

set long 20000 longchunksize 20000 pagesize 0 linesize 1000 feedback off verify off trimspool on
column ddl format a1000

begin
   dbms_metadata.set_transform_param (dbms_metadata.session_transform, 'SQLTERMINATOR', true);
   dbms_metadata.set_transform_param (dbms_metadata.session_transform, 'PRETTY', true);
end;
/

variable v_username VARCHAR2(30);

exec :v_username := upper('&1');

select dbms_metadata.get_ddl('USER', u.username) AS ddl
from   dba_users u
where  u.username = :v_username
union all
select dbms_metadata.get_granted_ddl('TABLESPACE_QUOTA', tq.username) AS ddl
from   dba_ts_quotas tq
where  tq.username = :v_username
and    rownum = 1
union all
select dbms_metadata.get_granted_ddl('ROLE_GRANT', rp.grantee) AS ddl
from   dba_role_privs rp
where  rp.grantee = :v_username
and    rownum = 1
union all
select dbms_metadata.get_granted_ddl('SYSTEM_GRANT', sp.grantee) AS ddl
from   dba_sys_privs sp
where  sp.grantee = :v_username
and    rownum = 1
union all
select dbms_metadata.get_granted_ddl('OBJECT_GRANT', tp.grantee) AS ddl
from   dba_tab_privs tp
where  tp.grantee = :v_username
and    rownum = 1
union all
select dbms_metadata.get_granted_ddl('DEFAULT_ROLE', rp.grantee) AS ddl
from   dba_role_privs rp
where  rp.grantee = :v_username
and    rp.default_role = 'YES'
and    rownum = 1
union all
select to_clob('/* Start profile creation script in case they are missing') AS ddl
from   dba_users u
where  u.username = :v_username
and    u.profile <> 'DEFAULT'
and    rownum = 1
union all
select dbms_metadata.get_ddl('PROFILE', u.profile) AS ddl
from   dba_users u
where  u.username = :v_username
and    u.profile <> 'DEFAULT'
union all
select to_clob('End profile creation script */') AS ddl
from   dba_users u
where  u.username = :v_username
and    u.profile <> 'DEFAULT'
and    rownum = 1
/

set linesize 80 pagesize 14 feedback on trimspool on verify on

Pasando como parámetro el nombre del usuario.

Autor del script: Tim Hall

Espero que les haya resultado útil.
Salu2.
Share on Google Plus
    Blogger Comment

0 comentarios: