lunes, 8 de noviembre de 2010

Script para Extraer la Definicion de un Usuario y Mas!!!

Cuantas veces no te han pedido que extraigas la definicion de un usuario para luego crearlo en otra instancia o recrearlo en la mismas despues de varias tareas administrativas. Al principio lo que hacia era ir al diccionario de datos en donde veia como estaba definido el usuario, y luego a cada uno de las tablas que contenian los privlegios del usuario, de ahi le tenia que dar el formato adecuado para poder ejecutarlo.
Despues de un buen rato de hacerlo de esta manera, voilà, llegue a descubrir el paquete de DBMS_METADATA, este paquete lo que nos extraer , como dice su nombre, la definicion de objetos.

Con el siguiente script podras obtener la definicion de un usuario y sus privilegios

column metadata format a200 WORD_WRAPPED
set long 10000000
execute dbms_metadata.set_transform_param (DBMS_METADATA.SESSION_TRANSFORM,'SQLTERMINATOR',TRUE);

select dbms_metadata.get_ddl ('USER', username) metadata
from dba_users
where username in ('&&USERNAME');



select dbms_metadata.get_granted_ddl ('DEFAULT_ROLE', grantee) metadata
from (select distinct grantee
from dba_role_privs
where default_role = 'YES'
intersect
select username
from dba_users
where username in ('&&USERNAME'));

select dbms_metadata.get_granted_ddl ('ROLE_GRANT', grantee) metadata
from (select distinct grantee
from dba_role_privs
intersect
select username
from dba_users
where username in ('&&USERNAME'));

select dbms_metadata.get_granted_ddl ('SYSTEM_GRANT', grantee) metadata
from (select distinct grantee
from dba_sys_privs
intersect
select username
from dba_users
where username in ('&&USERNAME'));

select dbms_metadata.get_granted_ddl ('OBJECT_GRANT', grantee, 'COMPATIBLE','ORACLE','DDL',100000) metadata
from (select distinct grantee
from dba_tab_privs
intersect
select username
from dba_users
where username in ('&&USERNAME'));

Conclusion
No solo este paquete te sirve para un usuario, te sirve tambien para extraer definicion de cualquier objeto de nuestra base de datos, una vez que te sientas agusto con este paquete, vas a ver el gran beneficio que tiene.