E um detalhe ** crucial ** que não cobri no exemplo : evidentemente, se vc 
optar por remover constraints e dropar objetos com PURGE antes, vc passa a ter 
a possibilidade de ter PARALELISMO (ie, uma sessão dropando os objetos de A até 
F (digamos), ao mesmo tempo que roda outra sessão dropando outra parte dos 
objetos, e outra e outra ,quantas o teu hardware permitir), o que PODE acelerar 
ainda mais o processo... 

[]s

  Chiappa
--- Em oracle_br@yahoogrupos.com.br, "jlchiappa" <jlchia...@...> escreveu
>
> Colega, primeiro de tudo TENHO que observar que DROP de schema é uma operação 
> que DEVERIA SER RARA, se vc está fazendo com frequência a sua lógica é meio 
> questionável - entre outras razões, isso INVALIDA SQLs, não permitindo re-uso 
> de cache, é faz uma porrada de I/Os...
>   Muito bem, isso dito, veja lá que COMO EU DISSE, absolutamente ** não tem 
> como ** vc não gerar redo log/undo para o DROP, como citei apenas ALGUMAS 
> POUCAS operações o permitem, e DROP não é uma delas... Como eu disse também, 
> além da questão de redo/undo, há OUTRAS operações que o DROP de um schema tem 
> que fazer (tal como checks de constraints e quetais), SE vc (como eu disse) 
> as fazer manualmente pode ser que obtenha ganho... Um exemplo :
> 
> ==> crio dois schemas similares 
> 
> s...@o10gr2:SQL> create user user1 identified by user1;
> 
> Usuário criado.
> 
> s...@o10gr2:SQL> create user user2 identified by user2;
> 
> Usuário criado.
> 
> s...@o10gr2:SQL> grant connect, resource to user1;
> 
> Concessão bem-sucedida.
> 
> s...@o10gr2:SQL> grant connect, resource to user2;
> 
> Concessão bem-sucedida.
> 
> s...@o10gr2:SQL>grant select on sys.v_$session to user1;
> 
> Concessão bem-sucedida.
> 
> s...@o10gr2:SQL>grant select on sys.v_$session to user2;
> 
> Concessão bem-sucedida.
> 
> ==> populo o schema user1 com tabelas, constraints, índices
> 
> us...@o10gr2:SQL>create sequence seque1;
> 
> Seqüência criada.
> 
> us...@o10gr2:SQL>create table TAB_PAI_1   nologging as (select 0 codigo, d.* 
> from all_objects d where 1=2);
> 
> Tabela criada.
> 
> us...@o10gr2:SQL>create table TAB_FILHA_1 nologging as (select 0 codigo, d.* 
> from all_objects d where 1=2);
> 
> Tabela criada.
> 
> us...@o10gr2:SQL>BEGIN
>   2  for i in 1..15 loop
>   3     insert /*+ APPEND */ into TAB_PAI_1 (select seque1.nextval, d.* from 
> all_objects d);
>   4     commit;
>   5  end loop;
>   6  END;
>   7  /
> 
> Procedimento PL/SQL concluído com sucesso.
> 
> us...@o10gr2:SQL>insert /*+ APPEND */ into TAB_FILHA_1 (select * from 
> TAB_PAI_1);
> 
> 617685 linhas criadas.
> 
> us...@o10gr2:SQL>commit;
> 
> Commit concluído.
> 
> us...@o10gr2:SQL>alter table TAB_PAI_1 add constraint TAB_PAI_1_PK primary 
> key (CODIGO) novalidate;
> 
> Tabela alterada.
> 
> us...@o10gr2:SQL>alter table TAB_FILHA_1 add constraint TAB_FILHA_1_FK 
> foreign key (codigo) references TAB_PAI_1(codigo) novalidate;
> 
> Tabela alterada.
> 
> us...@o10gr2:SQL>disc;
> Desconectado de Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 
> Production
> 
> ==> populo o schema user2 de maneira similar :
> 
> us...@o10gr2:SQL>create sequence seque2;
> 
> Seqüência criada.
> 
> us...@o10gr2:SQL>create table TAB_PAI_2   nologging as (select 0 codigo, d.* 
> from all_objects d where 1=2);
> 
> Tabela criada.
> 
> us...@o10gr2:SQL>create table TAB_FILHA_2 nologging as (select 0 codigo, d.* 
> from all_objects d where 1=2);
> 
> Tabela criada.
> 
> us...@o10gr2:SQL>BEGIN
>   2  for i in 1..15 loop
>   3     insert /*+ APPEND */ into TAB_PAI_2 (select seque2.nextval, d.* from 
> all_objects d);
>   4     commit;
>   5  end loop;
>   6  END;
>   7  /
> 
> Procedimento PL/SQL concluído com sucesso.
> 
> us...@o10gr2:SQL>insert /*+ APPEND */ into TAB_FILHA_2 (select * from 
> TAB_PAI_2);
> 
> 617685 linhas criadas.
> 
> us...@o10gr2:SQL>commit;
> 
> Commit concluído.
> 
> us...@o10gr2:SQL>alter table TAB_PAI_2 add constraint TAB_PAI_2_PK primary 
> key (CODIGO) novalidate;
> 
> Tabela alterada.
> 
> us...@o10gr2:SQL>alter table TAB_FILHA_2 add constraint TAB_FILHA_2_FK 
> foreign key (codigo) references TAB_PAI_2(codigo) novalidate;
> 
> Tabela alterada.
> 
> us...@o10gr2:SQL>disc;
> Desconectado de Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 
> Production
> 
> 
> ===> dropo o schema user1 diretamente :
> 
> us...@o10gr2:SQL>conn system/ora...@o10gr2
> Conectado.
> 
> Sessão alterada.
> 
> sys...@o10gr2:SQL>select sid from v$session  where 
> audsid=userenv('sessionid');
> 
>  SID
> ----
>  137
> 
> sys...@o10gr2:SQL>set timing on
> sys...@o10gr2:SQL>drop user user1 cascade;
> 
> Usuário eliminado.
> 
> Decorrido: 00:00:07.61
> 
> ==> vejo quanto gerou de undo/redo
> 
> s...@o10gr2:SQL>select name,a.value
>   2    from v$sesstat a, v$sysstat b
>   3    where b.statistic#=a.statistic#
>   4    and (b.name ='redo size' or b.name = 'undo change vector size')
>   5    and sid = 137;
> 
> NAME                                                                          
> VALUE
> ---------------------------------------------------------------- 
> ------------------
> redo size                                                                    
> 173228
> undo change vector size                                                       
> 47420
> 
> ==> agora vou pedir DROP com PURGE , remover constraints sem validar, antes 
> de remover o schema... 
> 
> us...@o10gr2:SQL>conn user2/us...@o10gr2
> Conectado.
> 
> Sessão alterada.
> 
> us...@o10gr2:SQL>select sid from v$session  where audsid=userenv('sessionid');
> 
>  SID
> ----
>  145
> 
> us...@o10gr2:SQL>set timing on
> us...@o10gr2:SQL>alter table TAB_FILHA_2 disable constraint TAB_FILHA_2_FK;
> 
> Tabela alterada.
> 
> Decorrido: 00:00:00.06
> us...@o10gr2:SQL>alter table TAB_PAI_2 disable constraint TAB_PAI_2_PK;
> 
> Tabela alterada.
> 
> Decorrido: 00:00:00.17
> us...@o10gr2:SQL>alter table TAB_FILHA_2 drop constraint TAB_FILHA_2_FK;
> 
> Tabela alterada.
> 
> Decorrido: 00:00:00.07
> us...@o10gr2:SQL>alter table TAB_PAI_2 drop constraint TAB_PAI_2_PK;
> 
> Tabela alterada.
> 
> Decorrido: 00:00:00.10
> us...@o10gr2:SQL>drop table TAB_PAI_2 purge;
> 
> Tabela eliminada.
> 
> Decorrido: 00:00:00.14
> us...@o10gr2:SQL>drop table TAB_FILHA_2 purge;
> 
> Tabela eliminada.
> 
> Decorrido: 00:00:00.12
> us...@o10gr2:SQL>
> 
> ==> veja por enquanto que a sessão gerou um tanto menos de undo/redo, ** MAS 
> ** confira (somando os TIMINGs) que demorou um pouco menos :
> 
> s...@o10gr2:SQL>select name,a.value
>   2  from v$sesstat a, v$sysstat b
>   3  where b.statistic#=a.statistic#
>   4  and (b.name ='redo size' or b.name = 'undo change vector size')
>   5  and sid = 145;
> 
> NAME                                                                          
> VALUE
> ---------------------------------------------------------------- 
> ------------------
> redo size                                                                    
> 171848
> undo change vector size                                                       
> 45832
> 
> ==> vamos desconectar, conectar com outro usuário e ver quanto demora e gera 
> de undo/redo o drop sem objeto nenhum :
> 
> Decorrido: 00:00:00.12
> us...@o10gr2:SQL>disc;
> Desconectado de Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 
> Production
> 
> 
> sys...@o10gr2:SQL>disc;
> Desconectado de Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 
> Production
> With the Partitioning, Oracle Label Security, OLAP, Data Mining Scoring Engine
> and Real Application Testing options
> sys...@o10gr2:SQL>disc;
> sys...@o10gr2:SQL>conn system/ora...@o10gr2
> Conectado.
> 
> Sessão alterada.
> 
> Decorrido: 00:00:00.04
> sys...@o10gr2:SQL>select sid from v$session  where 
> audsid=userenv('sessionid');
> 
>  SID
> ----
>  149
> 
> Decorrido: 00:00:00.07
> sys...@o10gr2:SQL>drop user user2 cascade;
> 
> Usuário eliminado.
> 
> Decorrido: 00:00:00.20
> 
> ==> agora sim, vamos medir o drop do schema vazio :
> 
> s...@o10gr2:SQL>l
>   1  select name,a.value
>   2  from v$sesstat a, v$sysstat b
>   3  where b.statistic#=a.statistic#
>   4  and (b.name ='redo size' or b.name = 'undo change vector size')
>   5* and sid = 149
> s...@o10gr2:SQL>/
> 
> NAME                                                                          
> VALUE
> ---------------------------------------------------------------- 
> ------------------
> redo size                                                                     
> 11436
> undo change vector size                                                       
>  4660
> 
> 
> =======>>> Resumo da história : de redo/undo o drop direto gerou 173228 e 
> 47420, enquanto o procedimento completo #2 gerou 171848 + 11436 = 183284 
> (pouco mais) e 45832 + 4660 = 50492 (também um pouco mais), MAS de tempo, o 
> drop direto demorou 00:00:07.61 , enquanto o procedimento completo #2 levou 
> 0.06 + 0.17 + 0.07 + 0.10 + 0.14 + 0.12 + 0.20 = 0.86, menos tempo...
> 
> []s
> 
>   Chiappa
> --- Em oracle_br@yahoogrupos.com.br, "Aleksandro Souza Azevedo" 
> <aleksandrosouza@> escreveu
> >
> > Também é isso, primeiro é pela velocidade, e segundo porque estava lotando o
> > undo. Eu diminui o tempo de retenção porém não melhorei a performance. Eu
> > dou meus pulos.
> > 
> >  
> > 
> >  
> > 
> > De: oracle_br@yahoogrupos.com.br [mailto:oracle...@yahoogrupos.com.br] Em
> > nome de Luiz Antonio Camargo
> > Enviada em: sexta-feira, 4 de setembro de 2009 05:51 PM
> > Para: oracle_br@yahoogrupos.com.br
> > Assunto: Re: [oracle_br] Re: É possivel dropar usuario sem gerar logs na
> > tabela de undo ?
> > 
> >  
> > 
> >   
> > 
> > Pelo que entendi, o que ele está querendo é para não "lotar" a TBS de undo.
> > Já passei apertado porisso (rs) e aprendi o PURGE.... primeiro dropa as
> > tabelas com purge depois o user... é isso?
> > 
> > flw
> > 
> > 2009/9/4 jlchiappa <jlchiappa@ <mailto:jlchiappa%40yahoo.com.br>
> > >
> > 
> > >
> > >
> > > Colega, pode consultar na documentação (que é grátis e está Online em
> > > http://tahiti.oracle.com ), que apenas algumas *** POUCAS *** operações
> > > (como INSERT APPEND, alguns CREATEs, etc) levam em conta o status de
> > > NOLOGGING, e o drop user ** Não É ** uma delas, o DROP USER vai sim **
> > > sempre ** gerar log ...
> > > Explique porém exatamente o porque de vc querer isso (é para acelerar um
> > > DROP que está demorando muito, talvez) , que a gente pode palpitar : Por
> > > exemplo, ao invés de DROP USER direto antes desligar ou dropar SEM VALIDAR
> > > as constraints, ter vários JOBs dropando - com PURGE !! - as tabelas em
> > > paralelo . pra depois fazer o DROP USER.... Mas digalá o que vc
> > quer/precisa
> > > que a gente pode palpitar ...
> > >
> > > []s
> > >
> > > Chiappa
> > >
> > > --- Em oracle_br@yahoogrupos.com.br
> > <mailto:oracle_br%40yahoogrupos.com.br>  <oracle_br%40yahoogrupos.com.br>,
> > > "aleksandrosouza" <aleksandrosouza@> escreveu
> > > >
> > > > Foi a primeira coisa que eu fiz, mas ele gera mesmo assim.
> > > >
> > > > --- Em oracle_br@yahoogrupos.com.br
> > <mailto:oracle_br%40yahoogrupos.com.br>  <oracle_br%40yahoogrupos.com.br>,
> > > "kurtnaxl" <thiagoecatia@> escreveu
> > > > >
> > > > > Não tenho Oracle disponível para testar, mas de repente o NOLOGGING
> > > também funcione para isso... DROP USER xxxxxx NOLOGGING;
> > > > >
> > > > > Tente e informe se funfa...
> > > > > abçs
> > > > >
> > > > > --- Em oracle_br@yahoogrupos.com.br
> > <mailto:oracle_br%40yahoogrupos.com.br>  <oracle_br%40yahoogrupos.com.br>,
> > > "aleksandrosouza" <aleksandrosouza@> escreveu
> > > > > >
> > > > > > Tenho a necessidade de dropar um usuário sem gerar lançamentos na
> > > tabels UNDOTBS. É possível eu fazer alguma configuração ?.
> > > > > > Meu oracle é 11g 11.2
> > > > > >
> > > > >
> > > >
> > >
> > > 
> > >
> > 
> > [As partes desta mensagem que não continham texto foram removidas]
> > 
> > 
> > 
> > 
> > 
> > [As partes desta mensagem que não continham texto foram removidas]
> >
>


Responder a