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" 
<aleksandroso...@...> 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 <jlchia...@... <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