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
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.
0 comentarios:
Publicar un comentario