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] > > >