DDL/DCL DE CRIAÇÃO DE UM OWNER

Devido a alguns projetos profissionais que demandaram uma grande carga de trabalho, fiquei algum tempo se publicar novos artigos no blog.

Espero poder periodicamente pode compartilhar
experiências e conhecimentos através do blog. Sem delongas, vamos ao que interessa...

Imagine a necessidade de realizar uma carga de um owner de produção para uma base de testes na qual  a senha é diferente de produção e desconhecemos a mesma. Em alguns casos basta perguntar ao usuário, porém nem sempre o usuário pode ter essa informação.

Para solucionar esse problema, basta gerarmos a DDL de criação do owner e a DCL dos grants que o mesmo possuí, antes de excluí-lo na base de testes para realizar o processo de carga.

Abaixo compartilho os script usado para gerar a DDL e a DCL para recriação de um usuário, basta apenas substituir o nome do usuário no campo NOME_OWNER.



script
DEFINE OWNER = 'NOME_ONWER';

set head off
set pages 0
SET LINES 210
set long 9999999
select    dbms_metadata.get_ddl('USER', '&OWNER') from dual; 
select * from (
select 'grant ' || privilege || decode(privilege,'READ',' on directory "','WRITE',' on directory "',' on "' || owner || '"."') ||
table_name || '" to "' || grantee || decode(grantable, 'YES', '" with grant option','"') || ';'  from dba_tab_privs where
grantee in ('&OWNER')
union all
select 'grant '||privilege||' to "'||grantee||'"'||decode(admin_option,'YES',' with admin option')||';' from dba_sys_privs where
grantee in ('&OWNER')
union all
select 'grant "'||granted_role||'" to "'||grantee||'"'||decode(admin_option,'YES',' with admin option')||';' from dba_role_privs where
grantee in ('&OWNER'));

Comentários