Re: [oracle_br] Re: Problema para gerar código ANO + Sequencial

2014-10-22 Por tôpico Aroldo Rique aro...@gmail.com [oracle_br]
Opa, Alessandro, achei esse comando. Primeiro o usuário SYSTEM tem que dar
o GRANT para o usuário que estamos usando.

Simulamos aqui a sua sugestão.

DECLARE
P_ANO NUMBER(4);
P_CONTADOR NUMBER(11);
P_CODIGO NUMBER(11);

BEGIN

--recupera o ano da data do cadastro da manifestação
P_ANO := to_number(to_char(:NEW.DT_CADASTRO_MANIFESTACAO,''));

--recupera o valor do contador
SELECT contador
INTO P_CONTADOR
FROM ouvidoria.geracao_codigo WHERE ANO = P_ANO FOR UPDATE;

--incrementa o contador
P_CONTADOR := P_CONTADOR + 1;

UPDATE ouvidoria.geracao_codigo
SET CONTADOR = P_CONTADOR
WHERE ANO = P_ANO;

P_CODIGO := TO_NUMBER(P_ANO || LPAD(P_CONTADOR,7,0));
--DBMS_LOCK.SLEEP(10);
:NEW.CODIGO := P_CODIGO;

END;

Para simular, primeiramente descomentamos a linha --DBMS_LOCK.SLEEP(10), para
que desse tempo da primeira transação tivesse um valor atribuído à variável
P_CODIGO e aguardasse 10 segundos para o fim da trigger, fazendo com que as
outras transações ficassem na fila.

Fiz um insert e pedi para os demais colegas (3) da sala também fazerem o
mesmo. O resultado foi a geração de 4 P_CODIGOs diferentes, que é o que a
gente espera.

Depois repetimos o teste, tirando o FOR UPDATE e o resultado foi a geração
de 4 P_CODIGOs iguais, o que prova que o FOR UPDATE realmente funciona.

A sua solução funcionou 100%, mas o pessoal ainda vai decidir se não irá
utilizar a solução do Chiappa.

Muito obrigado a todos que colaboraram.

Att,

Aroldo Rique

Em 22 de outubro de 2014 17:05, Alessandro Lúcio Cordeiro da Silva
alecordeirosi...@yahoo.com.br [oracle_br] 
escreveu:

>
>
>
>
> Olá Aroldo, só agora que vi a discussão; Não sei se ainda vai querer vai o
> Sleep no banco, mas caso queira o comando é este abaixo:
>
> begin
>   dbms_lock.sleep(10); -- 10 segundos.
> end;
>
> Todavia, se você for por sequencia como discutido, creio ser melhor, pois
> é nativo do Oracle, já esta pronto e acima de tudo, você consegue ter
> controle sobre usar cache nas sequencia algo que você não tem como a sua
> solução.
>
> Alessandro Lúcio Cordeiro da Silva
> Analista de Sistema
> þ http://alecordeirosilva.blogspot.com/
> Porque esta é a vontade de Deus, a saber, a vossa
> santificação: que vos abstenhais da prostituição.
> (1º Tessalonicenses 4:3)
>
>
>
>   Em Quarta-feira, 22 de Outubro de 2014 14:21, "Aroldo Rique
> aro...@gmail.com [oracle_br]"  escreveu:
>
>
>
>  Blz, valeu pelas dicas. Vou passar pro pessoal aqui.
>
> Att,
>
> Aroldo Rique
>
> Em 22 de outubro de 2014 15:05, jlchia...@yahoo.com.br [oracle_br] <
> oracle_br@yahoogrupos.com.br> escreveu:
>
>
>  Vc até poderia dropar & recriar : é a opção mais direta mas muita gente
> não gosta disso, especialmente por causa de consequências como invalidar
> objetos dependentes da sequence.
>   Assim, embora o drop & create seja possível, se preferir optar por não o
> fazer é SIM totalmente POSSÍVEL se obter o mesmo efeito sem drop : o  que
> ocorre é que, muito embora não haja um comando específico para se alterar o
> valor corrente da sequence, é ** SIM ** possível se fazer outros tipos de
> alteração na sequence que dão o mesmo efeito...
>  Aqui mesmo no fórum já demos alguns exemplos em threads anteriores, dá
> uma pesquisada mas basicamente é temporariamente alterar a sequence para
> ter um valor máximo E zerar quando esse valor é atingido, além de também
> alterar o incremento para um valor bem alto : com isso feito, vc faz alguns
> select nextval para ultrapassar o valor máximo que aí a sequence volta pra
> zero Zerada a sequence, aí vc volta os settings dela para como estavam
> antes...
>
>   []s
>
>Chiappa
>
>
>
>
>
>


Re: [oracle_br] Re: Problema para gerar código ANO + Sequencial

2014-10-22 Por tôpico ederson200...@yahoo.com.br [oracle_br]
Aroldo,

Como disse o Chiappa, a Oracle teve uma boa razão para criar o mecanismo das 
sequences ... Vai de sequence concatenando o ano de sysdate, que vc será feliz.

Vc pode alterar o valor da sequence no job da virada do ano assim, sem dropar e 
recriar (assim não perde as permissões e nem invalida objetos dependentes):


-- Altera a sequence
alter sequence seq_protocolo  minvalue 1 maxvalue 999;

-- Modifica o ultimo numero
-- incremento do restante (calcule e substitua abaixo):   X := 1 - 
seq_protocolo.nextval;
alter sequence seq_protocolo increment by -85545412 nocache;-- (por exemplo)
select seq_protocolo.nextval from dual;
alter sequence seq_protocolo increment by 1 nocache;


Ederson Elias 
DBA Oracle - http://br.linkedin.com/pub/ederson-elias/24/8b/8b0
 Labor improbus omnia vincit

Re: [oracle_br] Re: EM 11g

2014-10-22 Por tôpico Vitor Junior vitorj...@gmail.com [oracle_br]
Feito pessoal. Consegui o software com um amigo. Obrigado. :)



Att,/Regards,


Vitor Jr.
Infraestrutura / Infrastructure Team
Oracle 11g DBA Certified Professional - OCP
Oracle Certified Expert, Oracle Real Application Clusters 11g and Grid
Infrastructure Administrator - OCE
Oracle Database 11g Performance Tuning Certified Expert - OCE
Oracle Exadata 11g Certified Implementation Specialist
Oracle Certified Associate, MySQL 5
mail, gtalk e msn: vitorj...@gmail.com
http://certificacaobd.com.br/
skype: vjunior1981
https://mybizcard.co/vitor.jr.385628

Em 22 de outubro de 2014 16:09, Vitor Junior  escreveu:

> Já fui nas vm's também Chiappa. Lembrei das developers day e afins, mas
> nenhuma tem. As vm's com EM já estão no 12c também. Vamos ver se alguém que
> já tenha implementado tenha a mídia pra disponibilizar. :)
>
>
>
> Att,/Regards,
>
>
> Vitor Jr.
> Infraestrutura / Infrastructure Team
> Oracle 11g DBA Certified Professional - OCP
> Oracle Certified Expert, Oracle Real Application Clusters 11g and Grid
> Infrastructure Administrator - OCE
> Oracle Database 11g Performance Tuning Certified Expert - OCE
> Oracle Exadata 11g Certified Implementation Specialist
> Oracle Certified Associate, MySQL 5
> mail, gtalk e msn: vitorj...@gmail.com
> http://certificacaobd.com.br/
> skype: vjunior1981
> https://mybizcard.co/vitor.jr.385628
>
> Em 22 de outubro de 2014 16:03, jlchia...@yahoo.com.br [oracle_br] <
> oracle_br@yahoogrupos.com.br> escreveu:
>
>>
>>
>>  Yep, a Oracle normalmente deixa só as últimas duas ou três versões do
>> software disponíveis publicamente para download,o que no caso do OEM 12c
>> que está no R4, provavelmente implicaria em ter no site OEM 12c R4, OEM 12c
>> R3 e talvez OEM 12cR1, sim...
>>   Enquanto vc espera pra ver se ** casualmente ** alguém eventualmente
>> tem isso e pode postar nalgum site de download (enviar seria complicado,
>> dado o grande tamanho), uma alternativa talvez seja vc ver se acha uma
>> imagem vm que ainda tenha esse componente : dá uma pescoçada nas VMs de
>> https://edelivery.oracle.com/linux , nas em
>> http://www.oracle.com/technetwork/community/developer-vm/index.html ,
>> quem sabe vc acha ainda alguma com esse componente...
>>
>>   Aí, caso ninguém tenha isso, nenhum dos DBAs dos seus clientes consiga
>> te emprestar uma mídia/gerar uma imagem de vm, e nenhuma das vms acima
>> sirva, aí não tem jeito, é mesmo seguir a nota metalink citada e executar o
>> procedimento para solicitar mídias de produtos arquivados, mesmo
>>
>>[]s
>>
>>  Chiappa
>>  
>>
>
>


Re: [oracle_br] Re: Problema para gerar código ANO + Sequencial

2014-10-22 Por tôpico Alessandro Lúcio Cordeiro da Silva alecordeirosi...@yahoo.com.br [oracle_br]


 
Olá Aroldo, só agora que vi a discussão; Não sei se ainda vai querer vai o 
Sleep no banco, mas caso queira o comando é este abaixo:

begin
  dbms_lock.sleep(10); -- 10 segundos.
end; 

Todavia, se você for por sequencia como discutido, creio ser melhor, pois é 
nativo do Oracle, já esta pronto e acima de tudo, você consegue ter controle 
sobre usar cache nas sequencia algo que você não tem como a sua solução.

Alessandro Lúcio Cordeiro da Silva 
Analista de Sistema

þ http://alecordeirosilva.blogspot.com/

Porque esta é a vontade de Deus, a saber, a vossa 
santificação: que vos abstenhais da prostituição.
(1º Tessalonicenses 4:3)



Em Quarta-feira, 22 de Outubro de 2014 14:21, "Aroldo Rique aro...@gmail.com 
[oracle_br]"  escreveu:
 


  
Blz, valeu pelas dicas. Vou passar pro pessoal aqui.

Att,

Aroldo Rique


Em 22 de outubro de 2014 15:05, jlchia...@yahoo.com.br [oracle_br] 
 escreveu:

 
>  
>Vc até poderia dropar & recriar : é a opção mais direta mas muita gente não 
>gosta disso, especialmente por causa de consequências como invalidar objetos 
>dependentes da sequence. 
>  Assim, embora o drop & create seja possível, se preferir optar por não o 
> fazer é SIM totalmente POSSÍVEL se obter o mesmo efeito sem drop : o  que 
> ocorre é que, muito embora não haja um comando específico para se alterar o 
> valor corrente da sequence, é ** SIM ** possível se fazer outros tipos de 
> alteração na sequence que dão o mesmo efeito...
> Aqui mesmo no fórum já demos alguns exemplos em threads anteriores, dá uma 
> pesquisada mas basicamente é temporariamente alterar a sequence para ter um 
> valor máximo E zerar quando esse valor é atingido, além de também alterar o 
> incremento para um valor bem alto : com isso feito, vc faz alguns select 
> nextval para ultrapassar o valor máximo que aí a sequence volta pra zero 
> Zerada a sequence, aí vc volta os settings dela para como estavam antes...
>
>  []s
>
>   Chiappa



[oracle_br] Re: Importação IMPDP leva extends das tabelas, como evitar isso ?

2014-10-22 Por tôpico germanopac...@gmail.com [oracle_br]
Chiappa, 

 Realmente ocorre o que vc informa aqui
 

  Outra possibilidade é que vc tenha na origem segmentos sem dados e/ou com 
poucos dados ** MAS ** com tamanho de extent muito grande, aí mesmo o extent 
inicial vazio que o CREATE cria quando do import/impdp acaba sendo 
seginificativo...

 

 Fiz da forma como orientou, extraindo as instruções DDL e depois importando os 
dados, e meu banco importado ficou com os 3GB de cadastros mesmos.
 

 Obrigado a todos.
 



Re: [oracle_br] Importação IMPDP leva extends das tabelas, como evitar isso ?

2014-10-22 Por tôpico germanopac...@gmail.com [oracle_br]
Opa, fiz apenas do schema 

 expdp system/SENHA schemas=user1 directory=DATA_PUMP_DIR dumpfile=arquivo1.dmp 
logfile=arquivo1.log

 

 impdp system/senha remap_schema=user1:user2directory=DATA_PUMP_DIR 
dumpfile=arquivo1.dmp logfile=NOME_LOG.log

 



Re: [oracle_br] Re: EM 11g

2014-10-22 Por tôpico Vitor Junior vitorj...@gmail.com [oracle_br]
Já fui nas vm's também Chiappa. Lembrei das developers day e afins, mas
nenhuma tem. As vm's com EM já estão no 12c também. Vamos ver se alguém que
já tenha implementado tenha a mídia pra disponibilizar. :)



Att,/Regards,


Vitor Jr.
Infraestrutura / Infrastructure Team
Oracle 11g DBA Certified Professional - OCP
Oracle Certified Expert, Oracle Real Application Clusters 11g and Grid
Infrastructure Administrator - OCE
Oracle Database 11g Performance Tuning Certified Expert - OCE
Oracle Exadata 11g Certified Implementation Specialist
Oracle Certified Associate, MySQL 5
mail, gtalk e msn: vitorj...@gmail.com
http://certificacaobd.com.br/
skype: vjunior1981
https://mybizcard.co/vitor.jr.385628

Em 22 de outubro de 2014 16:03, jlchia...@yahoo.com.br [oracle_br] <
oracle_br@yahoogrupos.com.br> escreveu:

>
>
>  Yep, a Oracle normalmente deixa só as últimas duas ou três versões do
> software disponíveis publicamente para download,o que no caso do OEM 12c
> que está no R4, provavelmente implicaria em ter no site OEM 12c R4, OEM 12c
> R3 e talvez OEM 12cR1, sim...
>   Enquanto vc espera pra ver se ** casualmente ** alguém eventualmente tem
> isso e pode postar nalgum site de download (enviar seria complicado, dado o
> grande tamanho), uma alternativa talvez seja vc ver se acha uma imagem vm
> que ainda tenha esse componente : dá uma pescoçada nas VMs de
> https://edelivery.oracle.com/linux , nas em
> http://www.oracle.com/technetwork/community/developer-vm/index.html ,
> quem sabe vc acha ainda alguma com esse componente...
>
>   Aí, caso ninguém tenha isso, nenhum dos DBAs dos seus clientes consiga
> te emprestar uma mídia/gerar uma imagem de vm, e nenhuma das vms acima
> sirva, aí não tem jeito, é mesmo seguir a nota metalink citada e executar o
> procedimento para solicitar mídias de produtos arquivados, mesmo
>
>[]s
>
>  Chiappa
>  
>


[oracle_br] Re: EM 11g

2014-10-22 Por tôpico jlchia...@yahoo.com.br [oracle_br]
 Yep, a Oracle normalmente deixa só as últimas duas ou três versões do software 
disponíveis publicamente para download,o que no caso do OEM 12c que está no R4, 
provavelmente implicaria em ter no site OEM 12c R4, OEM 12c R3 e talvez OEM 
12cR1, sim...
  Enquanto vc espera pra ver se ** casualmente ** alguém eventualmente tem isso 
e pode postar nalgum site de download (enviar seria complicado, dado o grande 
tamanho), uma alternativa talvez seja vc ver se acha uma imagem vm que ainda 
tenha esse componente : dá uma pescoçada nas VMs de 
https://edelivery.oracle.com/linux , nas em 
http://www.oracle.com/technetwork/community/developer-vm/index.html , quem sabe 
vc acha ainda alguma com esse componente...
  
  Aí, caso ninguém tenha isso, nenhum dos DBAs dos seus clientes consiga te 
emprestar uma mídia/gerar uma imagem de vm, e nenhuma das vms acima sirva, aí 
não tem jeito, é mesmo seguir a nota metalink citada e executar o procedimento 
para solicitar mídias de produtos arquivados, mesmo 
  
   []s
   
 Chiappa

[oracle_br] Re: Performance pacotes dbms ????

2014-10-22 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Bom, primeiro observo que o seu títyulo foi Bem ruinzinho : performance pacote 
dbms parece indicar que é um problerma de performance na execução de algum 
pacote DBMS, o que não é o caso...
 Mas de qquer maneira : primeiro coisa, ** ao invés ** de sair disparando feito 
um louco pra todo o lado, coletando estatísticas, alterando armazenamento 
físico e n outras coisas de uma vez só como vc fez, o que se recomenda num 
processo de tuning é primeiro tentar IDENTIFICAR o problema (via trace, 
debug/instrumentação, detecção de alteração nos planos de execução, consulta de 
WAITS - de repente não é NADA disso o seu problema, pode ser talvez wait for 
locks, sei lá), e só DEPOIS de identificado , aí sim tentar fazer UMA COISA por 
vez, e sempre comprovando que essa uma única coisa foi efetiva (obtendo os 
planos, as métricas de I/O, o que for) de ANTES e de DEPOIS da alteração... Sim 
??? Senão acontece que nem no seu caso, será que foi a coleta de estatísticas 
OU foi o SHRINK que tinha melhorado a performance ??? Vc Não segui a 
metodologia, então QUEM SABE ? Sacou ???

 Segundo ponto : supondo que mudança de planos de execução/estatísticas ruins 
fossem o problema (a gente não sabe, mas supondo que) absolutamente não entendi 
o que vc fez com as estatísticas, pois SE vc já tinha coletado as estatísticas 
das tabelas via DBMS_STATS.GATHER_TABLE_STATS, por que RAIOS vc ainda por cima 
executou um DBMS_STATS.GATHER_SCHEMA_STATS  Fez 2x a mesma coisa ??? Não 
entendi

 Adicionalmente, SE vc obtiver alguma prova de que é o armazenamento físico o 
culpado :

  a. analise e descubra a EXATA e REAL causa do problema : ao invés de usar a 
palavra guarda-chuva FRAGMENTAÇÃO, que engloba tudo mas não diz nada, plz 
Descubra se o problema é por causa de extent size enormemente grande e vazio, 
espaço na HWM não sendo reaproveitado por causa de INSERT /*+ APPEND */, 
white-space (ie, espaço não reaproveitado no momento) dentro do bloco (seja por 
cláusulas de storage inapropriadas ou o que for) , enfim, o REAL aí

  b. saiba que SHRINK serve para ** temporariamente **, neste exato momento 
apenas, desalocar armazenamento que está alocado para um segmento : ele *** NÃO 
 garante que poucas horas depois da sua execução já houveram mais cargas de 
dados que (por uma das causas que vc detectou em a), acima) fizeram o sgmento 
ficar com um armazenamento "ruim", yep ??

  ==> Então a minha Resposta é essa : plz vc (ou alguém Habilitado, se vc não 
tiver o conhecimento para tal) deve Analisar, levantar exatamente os números da 
"lentidão", Descobrir exatamente qual a Causa para aí sim poder Atuar sem ser 
via chute, via DPTLEVSACF 
(disparar-para-todo-lado-e-ver-se-alguma-coisa-funciona )...

  []s

   Chiappa

Re: [oracle_br] Re: Problema para gerar código ANO + Sequencial

2014-10-22 Por tôpico Aroldo Rique aro...@gmail.com [oracle_br]
Blz, valeu pelas dicas. Vou passar pro pessoal aqui.

Att,

Aroldo Rique

Em 22 de outubro de 2014 15:05, jlchia...@yahoo.com.br [oracle_br] <
oracle_br@yahoogrupos.com.br> escreveu:

>
>
> Vc até poderia dropar & recriar : é a opção mais direta mas muita gente
> não gosta disso, especialmente por causa de consequências como invalidar
> objetos dependentes da sequence.
>   Assim, embora o drop & create seja possível, se preferir optar por não o
> fazer é SIM totalmente POSSÍVEL se obter o mesmo efeito sem drop : o  que
> ocorre é que, muito embora não haja um comando específico para se alterar o
> valor corrente da sequence, é ** SIM ** possível se fazer outros tipos de
> alteração na sequence que dão o mesmo efeito...
>  Aqui mesmo no fórum já demos alguns exemplos em threads anteriores, dá
> uma pesquisada mas basicamente é temporariamente alterar a sequence para
> ter um valor máximo E zerar quando esse valor é atingido, além de também
> alterar o incremento para um valor bem alto : com isso feito, vc faz alguns
> select nextval para ultrapassar o valor máximo que aí a sequence volta pra
> zero Zerada a sequence, aí vc volta os settings dela para como estavam
> antes...
>
>   []s
>
>Chiappa
>  
>


Re: [oracle_br] Re: Problema para gerar código ANO + Sequencial

2014-10-22 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Vc até poderia dropar & recriar : é a opção mais direta mas muita gente não 
gosta disso, especialmente por causa de consequências como invalidar objetos 
dependentes da sequence. 
  Assim, embora o drop & create seja possível, se preferir optar por não o 
fazer é SIM totalmente POSSÍVEL se obter o mesmo efeito sem drop : o  que 
ocorre é que, muito embora não haja um comando específico para se alterar o 
valor corrente da sequence, é ** SIM ** possível se fazer outros tipos de 
alteração na sequence que dão o mesmo efeito...
 Aqui mesmo no fórum já demos alguns exemplos em threads anteriores, dá uma 
pesquisada mas basicamente é temporariamente alterar a sequence para ter um 
valor máximo E zerar quando esse valor é atingido, além de também alterar o 
incremento para um valor bem alto : com isso feito, vc faz alguns select 
nextval para ultrapassar o valor máximo que aí a sequence volta pra zero 
Zerada a sequence, aí vc volta os settings dela para como estavam antes...

  []s

   Chiappa

[oracle_br] EM 11g

2014-10-22 Por tôpico Vitor Junior vitorj...@gmail.com [oracle_br]
Pessoal, como parte do meu planejamento para OCM, preciso estudar
(praticar!) no EM 11g, conforme informado na página do exame:

http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=5001&get_params=p_exam_id:11GOCM

Exam Environment

Oracle Linux Release 5.4 (32-bit)
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 (32-bit)
Oracle Enterprise Manager 11g Grid Control Release 1 (11.1.0.1.0)  (32-bit)


E como de praxe, a versão 11g do EM não está mais disponível para download.
Tenho contas do metalink, de vários clientes, mas fica chato seguir a nota,
conforme abaixo, pra solicitar em nome do cliente... hehehe


 Enterprise Manager 11g Grid Control Release 1 (11.1.0.1.0)

Enterprise Manager Grid Control 11g is no longer available for download.
The software is available as a media request for those customers who own a
valid Enterprise Manager product license purchased prior to September 30,
2012. To request access to the media, follow Note.1071023.1 from My Oracle
Support

Então, minha pergunta, é se alguém da lista que já tenha baixado e
instalado, não tem por acaso as mídias pra disponibilizar (pode ser FTP,
dropbox, etc...), para fins de estudo. O importante é ser 11g. Pode ser
11.x e indiferente pra fins de estudo se é 32bit ou 64bit.

Qualquer dúvida estou a disposição.


Att,/Regards,


Vitor Jr.
Infraestrutura / Infrastructure Team
Oracle 11g DBA Certified Professional - OCP
Oracle Certified Expert, Oracle Real Application Clusters 11g and Grid
Infrastructure Administrator - OCE
Oracle Database 11g Performance Tuning Certified Expert - OCE
Oracle Exadata 11g Certified Implementation Specialist
Oracle Certified Associate, MySQL 5
mail, gtalk e msn: vitorj...@gmail.com
http://certificacaobd.com.br/
skype: vjunior1981
https://mybizcard.co/vitor.jr.385628


[oracle_br] Performance pacotes dbms ????

2014-10-22 Por tôpico Gustavo gust.goul...@yahoo.com.br [oracle_br]
Senhores, boa tarde!Estou enfrentando um problema de performance e em conversas 
com amigos e um professor, tive a seguinte sugestão:
Na aplicação que uso, a mesma tem uma pauta de compromisso que é montada assim 
que o usuário logo no sistema, essa pauta é montada com base em 2 tabelas, 
essas tabelas recebem diariamente uma quantidade grande de UPDATE, INSERT e 
DELETE. 

A sugestão dada foi desfragmentar as tabelas e verificar os otimizadores ... 
Então fiz o seguinte:
exec dbms_stats.gather_table_stats(ownname=>'usuario',tabname=>'ANDAMENTO', 
estimate_percent=>dbms_stats.auto_sample_size,cascade=>TRUE,DEGREE=>dbms_stats.auto_degree);
Esse de cima executei para cada tabela envolvida.

exec dbms_stats.gather_schema_stats(ownname => 'schema',estimate_percent => 
dbms_stats.auto_sample_size,method_opt => 'FOR ALL COLUMNS', degree => 4);
Para desfragmentar usei os comandos abaixo para cada tabela envolvida:
ALTER TABLE tabela  ENABLE row movement;
ALTER TABLE tabela shrink space compact;
ALTER TABLE tabela shrink space;
Resultado, minha aplicação voltou a ficar como antes, tudo funcionando 
perfeitamente. 
Isso foi executado ontem, hoje quando cheguei aqui o sistema estava novamente 
apresentando uma lentidão absurda.

Ta faltando alguma coisa, executei os comando corretamente é isso mesmo 
?
Agradeço ajudas.

 



Re: [oracle_br] Re: Problema para gerar código ANO + Sequencial

2014-10-22 Por tôpico Aroldo Rique aro...@gmail.com [oracle_br]
Chiappa, pelo que eu pesquisei, não é possível muda o valor de uma
sequence, então eu teria que recriá-la a cada virada de ano, não é?

Att,

Aroldo Rique

Em 22 de outubro de 2014 14:12, Aroldo Rique  escreveu:

> Chiappa, o ano vem de um new Date() do Java. Não sei porque preferiram a
> aplicação, e não o banco de dados, tratar a data do cadastro.
>
> Mas acho que isso não trará problemas.
>
> Att,
>
> Aroldo Rique
>
> Em 22 de outubro de 2014 13:49, jlchia...@yahoo.com.br [oracle_br] <
> oracle_br@yahoogrupos.com.br> escreveu:
>
>
>>
>> O meu medo era só no sentido de que o ANO viesse de um input do usuário :
>> aí estaríamos com problemas E a minha solução ficaria INVIABILIZADA, pois o
>> usuário tanto poderia informar 2014 ou 2013 ou 2015 ou sabe-se lá qual ano,
>> aí como é que saberíamos para ** quando ** ter o job que zera a sequence
>> ??? Não saberíamos Só se realmente o ANO for sempre o ano corrente aí
>> fica fácil programar o job que reseta para rodar no dia 31 de dezembro de
>> qquer ano às 23:59:59 que nem eu propus...
>>
>>   []s
>>
>>Chiappa
>>  
>>
>
>


Re: [oracle_br] Re: Problema para gerar código ANO + Sequencial

2014-10-22 Por tôpico Aroldo Rique aro...@gmail.com [oracle_br]
Chiappa, o ano vem de um new Date() do Java. Não sei porque preferiram a
aplicação, e não o banco de dados, tratar a data do cadastro.

Mas acho que isso não trará problemas.

Att,

Aroldo Rique

Em 22 de outubro de 2014 13:49, jlchia...@yahoo.com.br [oracle_br] <
oracle_br@yahoogrupos.com.br> escreveu:

>
>
> O meu medo era só no sentido de que o ANO viesse de um input do usuário :
> aí estaríamos com problemas E a minha solução ficaria INVIABILIZADA, pois o
> usuário tanto poderia informar 2014 ou 2013 ou 2015 ou sabe-se lá qual ano,
> aí como é que saberíamos para ** quando ** ter o job que zera a sequence
> ??? Não saberíamos Só se realmente o ANO for sempre o ano corrente aí
> fica fácil programar o job que reseta para rodar no dia 31 de dezembro de
> qquer ano às 23:59:59 que nem eu propus...
>
>   []s
>
>Chiappa
>  
>


Re: [oracle_br] Re: Problema para gerar código ANO + Sequencial

2014-10-22 Por tôpico jlchia...@yahoo.com.br [oracle_br]
O meu medo era só no sentido de que o ANO viesse de um input do usuário : aí 
estaríamos com problemas E a minha solução ficaria INVIABILIZADA, pois o 
usuário tanto poderia informar 2014 ou 2013 ou 2015 ou sabe-se lá qual ano, aí 
como é que saberíamos para ** quando ** ter o job que zera a sequence ??? Não 
saberíamos Só se realmente o ANO for sempre o ano corrente aí fica fácil 
programar o job que reseta para rodar no dia 31 de dezembro de qquer ano às 
23:59:59 que nem eu propus...

  []s

   Chiappa

Re: [oracle_br] Re: Problema para gerar código ANO + Sequencial

2014-10-22 Por tôpico Aroldo Rique aro...@gmail.com [oracle_br]
É que eu já recebo o valor da data da aplicação, mas acho que não faria
nenhuma diferença pegar pelo sysdate também.

As 2 soluções que vocês propuseram aqui são muito boas. Agradeço muito pela
ajuda.

Att,

Aroldo Rique

Em 22 de outubro de 2014 13:39, jlchia...@yahoo.com.br [oracle_br] <
oracle_br@yahoogrupos.com.br> escreveu:

>
>
> Yep : porém, eu achava que o componente ANO seria o ano corrente do
> calendário, que se extrai do SYSDATE... Não sendo isso sim, vc teria que o
> extrair seja lá de onde for, e concatenar com a SEQUENCE, sim, e o
> resultado final todo vc bota na coluna-chave, que passaria a ser uma
> STRING, sim Apenas no caso eu recomendo ser Explícito em relação aos
> datatypes, usando um TO_CHAR(SEQ_CODIGO.nextval, 'FM009') ao invés de
> confiar na conversão impícita do LPAD, E realmente não esquecer de criar o
> jobzinho que resete/recrie com o valor zero a SEQUENCE na virada do ano,
> isso mesmo...
>
>  Como eu disse, além de muito provavelmente ficar mais curta e mais
> simples (facilitando manutenção), essa Solução muito provavelmente deve ser
> mais performática/escalável, já que não demanda criar segmento físico
> nenhum E NEM demanda LOCKs de qquer tipo...
>
>  []s
>
>Chiappa
>  
>


Re: [oracle_br] Re: Problema para gerar código ANO + Sequencial

2014-10-22 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Yep : porém, eu achava que o componente ANO seria o ano corrente do calendário, 
que se extrai do SYSDATE... Não sendo isso sim, vc teria que o extrair seja lá 
de onde for, e concatenar com a SEQUENCE, sim, e o resultado final todo vc bota 
na coluna-chave, que passaria a ser uma STRING, sim Apenas no caso eu 
recomendo ser Explícito em relação aos datatypes, usando um 
TO_CHAR(SEQ_CODIGO.nextval, 'FM009') ao invés de confiar na conversão 
impícita do LPAD, E realmente não esquecer de criar o jobzinho que 
resete/recrie com o valor zero a SEQUENCE na virada do ano, isso mesmo...

 Como eu disse, além de muito provavelmente ficar mais curta e mais simples 
(facilitando manutenção), essa Solução muito provavelmente deve ser mais 
performática/escalável, já que não demanda criar segmento físico nenhum E NEM 
demanda LOCKs de qquer tipo...

 []s
 
   Chiappa

Re: [oracle_br] Re: Problema para gerar código ANO + Sequencial

2014-10-22 Por tôpico Aroldo Rique aro...@gmail.com [oracle_br]
Sua solução também é tentadora. rs!.

Eu já possuo uma sequence que gera a chave primária da tabela. Eu criaria,
então, uma outra sequence que serviria apenas para ajudar na geração desse
código. Vamos chamar essa nova sequence de SEQ_CODIGO.

O código da minha trigger, então, ficaria assim:

   1.
   2. CREATE OR REPLACE TRIGGER TRIGGER_GERA_CODIGO BEFORE INSERT ON
   ouvidoria.manifestacao
   3. FOR EACH ROW
   4. DECLARE
   5. P_ANO NUMBER(4);
   6. P_CODIGO NUMBER(11);
   7. BEGIN
   8.
   9. --recupera o ano da data do cadastro da manifestação
   10. P_ANO :=
   to_number(to_char(:NEW.DT_CADASTRO_MANIFESTACAO,''));
   11.
   12. --gera o código
   13. P_CODIGO := to_char(P_ANO || LPAD(SEQ_CODIGO.nextval,7,0));
   14.
   15. --atribui o código ao campo CODIGO da tabela
   16. :NEW.CODIGO := P_CODIGO;
   17.
   18. END;
   19.
   20.



Fora isso, teria que criar o job para zerar a sequence ao final de cada
ano, não é?

Att,

Aroldo Rique



Em 22 de outubro de 2014 12:34, jlchia...@yahoo.com.br [oracle_br] <
oracle_br@yahoogrupos.com.br> escreveu:

>
>
> Então : LOCk é LOCK, vc ** VAI ** estar forçando as n outras sessões que
> desejem receber o valor e assim sendo executarem a trigger a ESPERAR o lock
> ser liberado, vc VAI estar serializando o acesso - repito, isso NÃO É o
> meio mais performático de jeito nenhum, AlÉM de deixar EXPONENCIALMENTE
> mais complexa a rotina ... Se vc não acredita , compara as 4 ou 5 linhas da
> minha solução com as 26 da tua...
>
>  EU com certeza nem analisarei esse código.. Blz ? Então se vc quiser
> reinventar a roda, estará por conta, yep ?? Será sua atribuição não só
> criar como MANTER DEPOIS o código, que vai SIM ficar um tantinho complexo...
>
>  []s
>
>   Chiappa
>  
>


Re: [oracle_br] Problema para gerar código ANO + Se quencial

2014-10-22 Por tôpico jlchia...@yahoo.com.br [oracle_br]
TODO o problema de vc deixar validação, população e controle de dados na 
Aplicação é que vc está ENGESSANDO o database : se amanhã os dados tiverem que 
ser acessados/manipulados por outeras Aplicações (o que é ROTINA no ambiente de 
negócio moderno, longe vai o tempo que uma só Aplicação satisfaz todas as 
necessidades cada vez mais complexas da Empresa) , vc vai ter um provável KAPUT 
em mãos
 Por isso a minha Recomendação sempre, sempre mas SEMPRE MESMO é que se use o 
database para o que ele foi criado, ie, não só armazenar e pesquisar como 
VALIDAR e CONTROLAR os dados...

 []s

   Chiappa

Re: [oracle_br] Re: Problema para gerar código ANO + Sequencial

2014-10-22 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Então : LOCk é LOCK, vc ** VAI ** estar forçando as n outras sessões que 
desejem receber o valor e assim sendo executarem a trigger a ESPERAR o lock ser 
liberado, vc VAI estar serializando o acesso - repito, isso NÃO É o meio mais 
performático de jeito nenhum, AlÉM de deixar EXPONENCIALMENTE mais complexa a 
rotina ... Se vc não acredita , compara as 4 ou 5 linhas da minha solução com 
as 26 da tua...
 
 EU com certeza nem analisarei esse código.. Blz ? Então se vc quiser 
reinventar a roda, estará por conta, yep ?? Será sua atribuição não só criar 
como MANTER DEPOIS o código, que vai SIM ficar um tantinho complexo...

 []s

  Chiappa

Re: [oracle_br] Problema para gerar código ANO + Sequencial

2014-10-22 Por tôpico Eduardo Perdomo panc...@gmail.com [oracle_br]
Leigo que sou, deixaria a geração dessa "sequence" na aplicação, pois, se o
que entendi é apenas um campo a mais para o usuário efetuar a pesquisa,
gravaria apenas mais esse campo, e disponibilizaria o mesmo para o usuário
pesquisar, bem simples mesmo.

Em 22 de outubro de 2014 12:17, Aroldo Rique aro...@gmail.com [oracle_br] <
oracle_br@yahoogrupos.com.br> escreveu:

>
>
> Alessandro, tem como eu testar na prática?
>
> O Oracle tem alguma função de "wait" ou "sleep" para que eu use dentro da
> trigger apenas para eu testar esse trecho de código?
>
> Queria colocar uma pausa de uns 10 segundos antes das linhas:
>
> P_CODIGO := TO_NUMBER(P_ANO || LPAD(P_CONTADOR,7,0));
> :NEW.CODIGO := P_CODIGO;
>
> e pedir para que os colegas daqui da sala tentassem incluir manifestações
> ao mesmo tempo. Como o Select... FOR UPDATE está lá em cima da trigger,
> teoricamente, apenas a primeira transação passaria por esse primeiro trecho
> de código primeiro, os demais teriam que esperar o commit da primeira
> transação. Com o wait antes das linhas finais, eu teria certeza que a
> primeira transação não acabou antes das demais.
>
> Att,
>
> Aroldo Rique
>
>
>
> Em 22 de outubro de 2014 09:10, Alessandro Lúcio Cordeiro da Silva
> alecordeirosi...@yahoo.com.br [oracle_br] 
> escreveu:
>
>
>>
>>
>>
>> Aroldo, o FOR UPDATE lock a tabela para alterações, mas não ficará
>> bloqueado para Leitura.::: MAS ::.. outras leituras com for update sim,
>> isso significa que select com FOR UPDATE serão serializados. Ou seja sempre
>> uma trigger somente irar realizar a consulta com o termino da transação da
>> primeira trigger, assim sempre pegando o próximo valor.
>>
>> Sobre não usar o Pragma, se imediatamente apos o insert na tabela
>> MANIFESTACAO você já der o commit, OK, não irar precisar do Pragma, pois o
>> tempo de contenção será muito pouco; todavia se você for realizar uma
>> serie de operações e somente depois X tempo terminar a transação, saiba que
>> ninguem conseguirar incluir registro na tabela manifestação enquanto a
>> transação não terminar.
>>
>> Alessandro Lúcio Cordeiro da Silva
>> Analista de Sistema
>> þ http://alecordeirosilva.blogspot.com/
>> Porque esta é a vontade de Deus, a saber, a vossa
>> santificação: que vos abstenhais da prostituição.
>> (1º Tessalonicenses 4:3)
>>
>>
>>
>>   Em Quarta-feira, 22 de Outubro de 2014 7:55, "Aroldo Rique
>> aro...@gmail.com [oracle_br]"  escreveu:
>>
>>
>>
>>  Olá, Alessandro, bom dia e obrigado pela ajuda.
>> Se eu implementar apenas a sua segunda sugestão:
>> 2º Coloque um LOCK no seu select com FOR UPDATE, ficando assim:
>> select nvl(contador + 1,1)
>>into p_contador
>>   from geracao_codigo
>> where ano = pano
>> FOR UPDATE;
>> O meu problema já não estará resolvido. Esse FOR UPDATE impedirá que
>> outra transação atribua o mesmo valor à variável p_contador? A tabela
>> geracao_codigo ficará locada inclusive para leitura?
>> Essa tabela geracao_codigo só é usada nesse momento(inclusão de um
>> registro na tabela MANIFESTACAO).
>> Antecipadamente agradeço a resposta.
>> Att,
>> Aroldo Rique
>>
>>
>> Em 22/10/2014 08:37, "Alessandro Lúcio Cordeiro da Silva
>> alecordeirosi...@yahoo.com.br [oracle_br]" 
>> escreveu:
>>
>>
>>
>>
>> Olá Aroldo,
>>
>> Para garantir consistência e evitar a contenção você preisa alterar dois
>> pontos da sua trigger:
>>
>> 1º Altere a trigger para ser uma Transação Autônoma usando o pragma
>> autonomous_transaction. Isto irar fazer que a trigger não participa da
>> transação principal e irar permitir de outras transações consulte os novos
>> dados (update incrementado) após o termino da trigger com um COMMIT
>> independente se a transação principal terminou ou não.
>>
>> 2º Coloque um LOCK no seu select com FOR UPDATE, ficando assim:
>>
>> select nvl(contador + 1,1)
>>into p_contador
>>   from geracao_codigo
>> where ano = pano
>> FOR UPDATE;
>>
>> Assim, se uma trigger for disparada, mas já existir uma primeira trigger
>> ainda em execução, a 2º trigger aguardará o termino da primeira triiger e
>> só assim consultará o novo valor. O LOCK será relativamente rapido, pois o
>> LOCK ocorre somente durante a execução da Trigger r não da transação toda;
>>
>>
>> Alessandro Lúcio Cordeiro da Silva
>> Analista de Sistema
>> þ http://alecordeirosilva.blogspot.com/
>> Porque esta é a vontade de Deus, a saber, a vossa
>> santificação: que vos abstenhais da prostituição.
>> (1º Tessalonicenses 4:3)
>>
>>
>>
>>   Em Terça-feira, 21 de Outubro de 2014 23:06, "Aroldo Rique
>> aro...@gmail.com [oracle_br]"  escreveu:
>>
>>
>>
>>  Prezados, estamos com uma dúvida aqui no meu trabalho com relação a
>> geração de um código. É um sistema WEB desenvolvido em JAVA e com vários
>> atendentes o utilizando no Brasil inteiro. O Banco de dados é Oracle. Todos
>> as classes Services estão com a annotation @Transactional do Spring.
>>
>> Temos uma tabela chamada MANIFESTACAO, que possui uma sequence como chave
>> primária (campo ID_MANIFESTACAO). Es

Re: [oracle_br] Problema para gerar código ANO + Sequencial

2014-10-22 Por tôpico Aroldo Rique aro...@gmail.com [oracle_br]
Alessandro, tem como eu testar na prática?

O Oracle tem alguma função de "wait" ou "sleep" para que eu use dentro da
trigger apenas para eu testar esse trecho de código?

Queria colocar uma pausa de uns 10 segundos antes das linhas:

P_CODIGO := TO_NUMBER(P_ANO || LPAD(P_CONTADOR,7,0));
:NEW.CODIGO := P_CODIGO;

e pedir para que os colegas daqui da sala tentassem incluir manifestações
ao mesmo tempo. Como o Select... FOR UPDATE está lá em cima da trigger,
teoricamente, apenas a primeira transação passaria por esse primeiro trecho
de código primeiro, os demais teriam que esperar o commit da primeira
transação. Com o wait antes das linhas finais, eu teria certeza que a
primeira transação não acabou antes das demais.

Att,

Aroldo Rique



Em 22 de outubro de 2014 09:10, Alessandro Lúcio Cordeiro da Silva
alecordeirosi...@yahoo.com.br [oracle_br] 
escreveu:

>
>
>
>
> Aroldo, o FOR UPDATE lock a tabela para alterações, mas não ficará
> bloqueado para Leitura.::: MAS ::.. outras leituras com for update sim,
> isso significa que select com FOR UPDATE serão serializados. Ou seja sempre
> uma trigger somente irar realizar a consulta com o termino da transação da
> primeira trigger, assim sempre pegando o próximo valor.
>
> Sobre não usar o Pragma, se imediatamente apos o insert na tabela
> MANIFESTACAO você já der o commit, OK, não irar precisar do Pragma, pois o
> tempo de contenção será muito pouco; todavia se você for realizar uma
> serie de operações e somente depois X tempo terminar a transação, saiba que
> ninguem conseguirar incluir registro na tabela manifestação enquanto a
> transação não terminar.
>
> Alessandro Lúcio Cordeiro da Silva
> Analista de Sistema
> þ http://alecordeirosilva.blogspot.com/
> Porque esta é a vontade de Deus, a saber, a vossa
> santificação: que vos abstenhais da prostituição.
> (1º Tessalonicenses 4:3)
>
>
>
>   Em Quarta-feira, 22 de Outubro de 2014 7:55, "Aroldo Rique
> aro...@gmail.com [oracle_br]"  escreveu:
>
>
>
>  Olá, Alessandro, bom dia e obrigado pela ajuda.
> Se eu implementar apenas a sua segunda sugestão:
> 2º Coloque um LOCK no seu select com FOR UPDATE, ficando assim:
> select nvl(contador + 1,1)
>into p_contador
>   from geracao_codigo
> where ano = pano
> FOR UPDATE;
> O meu problema já não estará resolvido. Esse FOR UPDATE impedirá que outra
> transação atribua o mesmo valor à variável p_contador? A tabela
> geracao_codigo ficará locada inclusive para leitura?
> Essa tabela geracao_codigo só é usada nesse momento(inclusão de um
> registro na tabela MANIFESTACAO).
> Antecipadamente agradeço a resposta.
> Att,
> Aroldo Rique
>
>
> Em 22/10/2014 08:37, "Alessandro Lúcio Cordeiro da Silva
> alecordeirosi...@yahoo.com.br [oracle_br]" 
> escreveu:
>
>
>
>
> Olá Aroldo,
>
> Para garantir consistência e evitar a contenção você preisa alterar dois
> pontos da sua trigger:
>
> 1º Altere a trigger para ser uma Transação Autônoma usando o pragma
> autonomous_transaction. Isto irar fazer que a trigger não participa da
> transação principal e irar permitir de outras transações consulte os novos
> dados (update incrementado) após o termino da trigger com um COMMIT
> independente se a transação principal terminou ou não.
>
> 2º Coloque um LOCK no seu select com FOR UPDATE, ficando assim:
>
> select nvl(contador + 1,1)
>into p_contador
>   from geracao_codigo
> where ano = pano
> FOR UPDATE;
>
> Assim, se uma trigger for disparada, mas já existir uma primeira trigger
> ainda em execução, a 2º trigger aguardará o termino da primeira triiger e
> só assim consultará o novo valor. O LOCK será relativamente rapido, pois o
> LOCK ocorre somente durante a execução da Trigger r não da transação toda;
>
>
> Alessandro Lúcio Cordeiro da Silva
> Analista de Sistema
> þ http://alecordeirosilva.blogspot.com/
> Porque esta é a vontade de Deus, a saber, a vossa
> santificação: que vos abstenhais da prostituição.
> (1º Tessalonicenses 4:3)
>
>
>
>   Em Terça-feira, 21 de Outubro de 2014 23:06, "Aroldo Rique
> aro...@gmail.com [oracle_br]"  escreveu:
>
>
>
>  Prezados, estamos com uma dúvida aqui no meu trabalho com relação a
> geração de um código. É um sistema WEB desenvolvido em JAVA e com vários
> atendentes o utilizando no Brasil inteiro. O Banco de dados é Oracle. Todos
> as classes Services estão com a annotation @Transactional do Spring.
>
> Temos uma tabela chamada MANIFESTACAO, que possui uma sequence como chave
> primária (campo ID_MANIFESTACAO). Essa tabela também possui vários outros
> campos. Até agora, toda consulta para identificar cada manifestação é
> realizada através do campo ID_MANIFESTACAO.
>
> Nosso cliente quer, agora, que a consulta seja feita através de outro
> código, que seja mais legível. Sugeriu, então, que cada manifestação, daqui
> por diante, ganhe um novo código que irá identificá-la. Esse código deve
> ser no formato NNN, onde o  é o ano corrente e os NNN é uma
> sequencia de números. Na virada de ano, a sequencia de nú

Re: [oracle_br] Re: Problema para gerar código ANO + Sequencial

2014-10-22 Por tôpico Aroldo Rique aro...@gmail.com [oracle_br]
Chiappa, obrigado também pela ajuda.

Eu criei uma outra tabela GERACAO_CODIGO justamente para não ter que lockar
a tabela MANIFESTACAO, que é a principal tabela do sistema. A tabela
GERACAO_CODIGO existe exclusivamente para ajudar a gerar o código.

Se a instrução (fiz uma pequena alteração nela) abaixo ganhar o FOR UPDATE
no final dela (como está abaixo), será que não está resolvido o problema
dos locks?



   1. SELECT CONTADOR
   2. INTO P_CONTADOR
   3. FROM GERACAO_CODIGO WHERE ANO = P_ANO FOR UPDATE;


O código completo da minha trigger ficou assim:


CREATE OR REPLACE TRIGGER TRIGGER_GERA_CODIGO BEFORE INSERT ON
ouvidoria.manifestacao

   1. FOR EACH ROW
   2. DECLARE
   3. P_ANO NUMBER(4);
   4. P_CONTADOR NUMBER(11);
   5. P_CODIGO NUMBER(11);
   6. BEGIN
   7.
   8. --recupera o ano da data do cadastro da manifestação
   9. P_ANO := to_number(to_char(:NEW.DT_CADASTRO_MANIFESTACAO,''));
   10.
   11. --recupera o valor do contador
   12. SELECT contador
   13. INTO P_CONTADOR
   14. FROM ouvidoria.geracao_codigo WHERE ANO = P_ANO FOR UPDATE;
   15.
   16. --incrementa o contador
   17. P_CONTADOR := P_CONTADOR + 1;
   18.
   19. UPDATE ouvidoria.geracao_codigo
   20. SET CONTADOR = P_CONTADOR
   21. WHERE ANO = P_ANO;
   22.
   23. P_CODIGO := TO_NUMBER(P_ANO || LPAD(P_CONTADOR,7,0));
   24. :NEW.CODIGO := P_CODIGO;
   25.
   26. END;


Reparem que eu tive que alterar a instrução, abaixo, porque, quando não há
contador para o ano correspondente, a função NVL estava gerando um erro:

view plain
copy
to clipboard

print

?


   1. SELECT NVL(CONTADOR + 1,1)
   2. INTO P_CONTADOR
   3. FROM GERACAO_CODIGO WHERE ANO = PANO;


A minha tabela GERACAO_CODIGO, de início, conterá os seguintes valores:

ANO CONTADOR
2014 0
2016 0
2015   0
2017 0

Att,

Aroldo Rique

Em 22 de outubro de 2014 11:34, jlchia...@yahoo.com.br [oracle_br] <
oracle_br@yahoogrupos.com.br> escreveu:

>
>
> Aroldo, veja lá : ** antes de tudo **, há razões CLARAS para que a Oracle
> tenha inventado as sequences : uma delas é que triggers ** não são **
> consistentes com transações, podem SIM ocorrer disparos simultâneos em
> sessões diferentes Então, não queira reinventar a roda e recriar as
> sequences com código seu, POIS pra fazer isso direito vc VAI ter que
> escrever pacas E vai ter que BLOQUEAR n-1 das sessões interessadas em obter
> o valor, provavelmente com LOCK numa tabela que vai conter os números
> Isso é horroroso para performance E para manutenção, PLEASE faça o arroz
> com feijão BÁSICO, ie :
>
>   a. como vc quer que o valor-chave seja o ano CONCATENADO com um
> sequencial, a coluna VAI ter que passar a ser STRING, óbvio : não se
> concatena números mas sim strings.. Só se vc fizesse uma expressão mais
> complexa no código que alimenta a chave, transformando o ano num número
> fixo que seria somado ao valor sequencial, mas pra mim isso já começa a
> ficar complexo, eu não faria isso
>
>   b. crie uma sequence X , numérica, comum
>
>   c. na trigger/no código que popula a tabela com o valor da sequence,
> onde hoje vc tem X.NEXTVAL, tenha to_char(sysdate,'') || X.nextval;
>
>   d. e o principal : crie um JOB DE BANCO que dispara às 11:59:59 do dia
> 31 de dezembro e resete a sequence...
>
>   taí, uma solução NATURALMENTE multi-usuário, que NÂO vai levar a waits
> por LOCKS, e simples... Utilizemos o princípio KISS, sempre...
>
>   []s
>
>Chiappa
>  
>


[oracle_br] Re: Problema para gerar código ANO + Sequencial

2014-10-22 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Aroldo, veja lá : ** antes de tudo **, há razões CLARAS para que a Oracle tenha 
inventado as sequences : uma delas é que triggers ** não são ** consistentes 
com transações, podem SIM ocorrer disparos simultâneos em sessões 
diferentes Então, não queira reinventar a roda e recriar as sequences com 
código seu, POIS pra fazer isso direito vc VAI ter que escrever pacas E vai ter 
que BLOQUEAR n-1 das sessões interessadas em obter o valor, provavelmente com 
LOCK numa tabela que vai conter os números Isso é horroroso para 
performance E para manutenção, PLEASE faça o arroz com feijão BÁSICO, ie :

  a. como vc quer que o valor-chave seja o ano CONCATENADO com um sequencial, a 
coluna VAI ter que passar a ser STRING, óbvio : não se concatena números mas 
sim strings.. Só se vc fizesse uma expressão mais complexa no código que 
alimenta a chave, transformando o ano num número fixo que seria somado ao valor 
sequencial, mas pra mim isso já começa a ficar complexo, eu não faria isso

  b. crie uma sequence X , numérica, comum

  c. na trigger/no código que popula a tabela com o valor da sequence, onde 
hoje vc tem X.NEXTVAL, tenha to_char(sysdate,'') || X.nextval;

  d. e o principal : crie um JOB DE BANCO que dispara às 11:59:59 do dia 31 de 
dezembro e resete a sequence... 

  taí, uma solução NATURALMENTE multi-usuário, que NÂO vai levar a waits por 
LOCKS, e simples... Utilizemos o princípio KISS, sempre... 

  []s

   Chiappa

Re: [oracle_br] Tablespace

2014-10-22 Por tôpico mdbo...@ig.com.br [oracle_br]
 

sim, claro o colega tem toda a razão a minha resposta, foi baseada no
problema apresentado, por padrão, são criadas algumas tablespaces no
oracle, podem me corrigir a vontade se eu estiver errado ou esquecer de
alguma, mas são : TEMP, USERS, SYSTEM, UNDO, e é claro que o
administrador da base dados (DBA) deverá criar tablespaces de dados e
indices, ou outra TEMPORARIA etc, de acordo com as suas necessidades, e
sim também quanto a evitar o uso o usuário SYS, deve ser criado um
usuário com poderes de DBA para manipular a base de dados, no demais
acredito ter explicado a minha humilde opinião. 

obrigado 

MArcos 

Em 22/10/2014 10:00, angelo angelolis...@gmail.com [oracle_br] escreveu:


> Um detalhe importante... system é tablespace do sistema 
> A boa pratica recomenda não trabalhar com a conta sys e nem com os tablespace 
> do sistema.. o melhor seria criar sua propria conta, e seu proprio tablespace 
> dentro do seu schema direitinho 
> 
> On 22 October 2014 09:40, mdbo...@ig.com.br [oracle_br] 
>  wrote:
> 
> bom dia, provavelment e a tua tablespace de index precisará ter um tamanho 
> maior. 
> 
> senão me engano a lógica para você aumentá-la é 
> 
> ALTER TABLESPACE  ADD DATAFILE  
> SIZE 50MB; 
> 
> OK 
> 
> ESPERO TER AJUDADO 
> 
> MARCOS 
> 
> Em 21/10/2014 19:18, Emerson Moreira Rocha tkz...@yahoo.com.br [oracle_br] 
> escreveu: 
> 
> Debora, 
> 
> Verifique o tablespace de indice do tablespace system que esta precisando 
> aumentar. 
> 
> ATT, 
> _ _ 
> 
> -
> 
> _EMERSON M. ROCHA_ 
> 
> Mobile:(11) 5054-8368 [1] 
> E-Mail: tkz...@yahoo.com.br

-

 Em Terça-feira, 21 de Outubro de 2014 18:13, "Débora Acácio
debby_ora...@yahoo.com.br [oracle_br]" 
escreveu:

Boa tarde gente

Me tirem uma dúvida estou tentando criar uma procedure e deu a seguinte
mensagem 

ORA-00604: error occurred at recursive SQL level 1 
ORA-01654: unable to extend index SYS.I_IDL_UB21 by 8 in tablespace
SYSTEM 

Como faço para "consertar" isso ??

Grata

Debby :) 

 

Links:
--
[1] tel:%2811%29%205054-8368
[2]
https://br.groups.yahoo.com/neo/groups/oracle_br/conversations/messages/117854;_ylc=X3oDMTJyOG9nODdzBF9TAzk3NDkwNDM3BGdycElkAzE2ODI4OTYEZ3Jwc3BJZAMyMTM3MTE0Njg5BG1zZ0lkAzExNzg1NARzZWMDZnRyBHNsawNycGx5BHN0aW1lAzE0MTM5NzkyNDI-?act=reply&messageNum=117854
[3]
https://br.groups.yahoo.com/neo/groups/oracle_br/conversations/newtopic;_ylc=X3oDMTJlbXA3bGwzBF9TAzk3NDkwNDM3BGdycElkAzE2ODI4OTYEZ3Jwc3BJZAMyMTM3MTE0Njg5BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTQxMzk3OTI0Mg--
[4]
https://br.groups.yahoo.com/neo/groups/oracle_br/conversations/topics/5861;_ylc=X3oDMTM2c3ZyMm9mBF9TAzk3NDkwNDM3BGdycElkAzE2ODI4OTYEZ3Jwc3BJZAMyMTM3MTE0Njg5BG1zZ0lkAzExNzg1NARzZWMDZnRyBHNsawN2dHBjBHN0aW1lAzE0MTM5NzkyNDIEdHBjSWQDNTg2MQ--
[5] http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
[6]
https://br.groups.yahoo.com/neo/groups/oracle_br/conversations/messages
[7]
https://br.groups.yahoo.com/neo/groups/oracle_br/info;_ylc=X3oDMTJlODlncWVnBF9TAzk3NDkwNDM3BGdycElkAzE2ODI4OTYEZ3Jwc3BJZAMyMTM3MTE0Njg5BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTQxMzk3OTI0Mg--
[8]
https://br.groups.yahoo.com/neo/groups/oracle_br/members/all;_ylc=X3oDMTJmMnU0MHBlBF9TAzk3NDkwNDM3BGdycElkAzE2ODI4OTYEZ3Jwc3BJZAMyMTM3MTE0Njg5BHNlYwN2dGwEc2xrA3ZtYnJzBHN0aW1lAzE0MTM5NzkyNDI-
[9]
https://br.groups.yahoo.com/neo;_ylc=X3oDMTJkajU4dmVvBF9TAzk3NDkwNDM1BGdycElkAzE2ODI4OTYEZ3Jwc3BJZAMyMTM3MTE0Njg5BHNlYwNmdHIEc2xrA2dmcARzdGltZQMxNDEzOTc5MjQy
[10] https://info.yahoo.com/privacy/br/yahoo/groups/details.html
[11] https://info.yahoo.com/legal/br/yahoo/utos/terms/


Re: [oracle_br] Importação IMPDP leva extends das tabelas, como evitar isso ?

2014-10-22 Por tôpico Regis Bavaresco regisbavare...@yahoo.com.br [oracle_br]
Bom dia,
Primeiro vc faz o expdp, drope o usuario e diminua o tamanho dos 
datafiles.alter database datafile '' resize 10M;Após vc faz o impdp com o 
parametro transform=storage:n
Ele irá recriar as tabelas sem aumentas os extents.
Abraços.
Regis. 

 Em Quarta-feira, 22 de Outubro de 2014 10:29, "Sebastião Carlos Santos 
scarlosan...@gmail.com [oracle_br]"  escreveu:
   

 #yiv9934220409 #yiv9934220409 -- #yiv9934220409 
.yiv9934220409ygrp-photo-title{clear:both;font-size:smaller;height:15px;overflow:hidden;text-align:center;width:75px;}#yiv9934220409
 
div.yiv9934220409ygrp-photo{background-position:center;background-repeat:no-repeat;background-color:white;border:1px
 solid black;height:62px;width:62px;}#yiv9934220409 
div.yiv9934220409photo-title a, #yiv9934220409 div.yiv9934220409photo-title 
a:active, #yiv9934220409 div.yiv9934220409photo-title a:hover, #yiv9934220409 
div.yiv9934220409photo-title a:visited {text-decoration:none;}#yiv9934220409 
div.yiv9934220409attach-table div.yiv9934220409attach-row 
{clear:both;}#yiv9934220409 div.yiv9934220409attach-table 
div.yiv9934220409attach-row div {float:left;}#yiv9934220409 p 
{clear:both;padding:15px 0 3px 0;overflow:hidden;}#yiv9934220409 
div.yiv9934220409ygrp-file {width:30px;}#yiv9934220409 
div.yiv9934220409attach-table div.yiv9934220409attach-row div div a 
{text-decoration:none;}#yiv9934220409 div.yiv9934220409attach-table 
div.yiv9934220409attach-row div div span {font-weight:normal;}#yiv9934220409 
div.yiv9934220409ygrp-file-title {font-weight:bold;}#yiv9934220409 
#yiv9934220409 #yiv9934220409 #yiv9934220409 --#yiv9934220409ygrp-mkp 
{border:1px solid #d8d8d8;font-family:Arial;margin:10px 0;padding:0 
10px;}#yiv9934220409 #yiv9934220409ygrp-mkp hr {border:1px solid 
#d8d8d8;}#yiv9934220409 #yiv9934220409ygrp-mkp #yiv9934220409hd 
{color:#628c2a;font-size:85%;font-weight:700;line-height:122%;margin:10px 
0;}#yiv9934220409 #yiv9934220409ygrp-mkp #yiv9934220409ads 
{margin-bottom:10px;}#yiv9934220409 #yiv9934220409ygrp-mkp .yiv9934220409ad 
{padding:0 0;}#yiv9934220409 #yiv9934220409ygrp-mkp .yiv9934220409ad p 
{margin:0;}#yiv9934220409 #yiv9934220409ygrp-mkp .yiv9934220409ad a 
{color:#ff;text-decoration:none;}#yiv9934220409 

No expdp eu desconheço algum parâmetro que faça isso.
No impdp temos o parâmetro TRANSFORM
impdp help=y

TRANSFORMMetadata transform to apply to applicable objects.Valid keywords are: 
OID, PCTSPACE, SEGMENT_ATTRIBUTES and STORAGE.
Maiores detalhes em
http://docs.oracle.com/cd/B14117_01/server.101/b10825/dp_import.htm#sthref359

2014-10-22 10:22 GMT-02:00 Andre Santos andre.psantos...@gmail.com [oracle_br] 
:

 base e um impdp no outro servid









   

[oracle_br] Re: Importação IMPDP leva extends das tabelas, como evitar isso ?

2014-10-22 Por tôpico jlchia...@yahoo.com.br [oracle_br]
   Opa, então : se fosse o exp e o imp tradicional, eu apontaria como culpado o 
parâmetro COMPRESS, que no exp por default se não for informado vale Y e força 
o import a criar um único extentzão pra tudo, mas vc já disse claramente que 
está usando o datapump (ie, expdp e impdp), então isso não se aplica.
   ** SE ** vc está fazendo um expdp e um impdp FULL (o que vc Não Diz, então 
não sabemos se é aplicável) , algo que deve estar acontecendo aí é que 
simplesmente vc tem grande qtdade de whitespace/espaço não usado na tablespace, 
E o expdp/impdp criam os DDLs pra replicar a tablespace EXATAMENTE do mesmo 
tamanho que estava na origem, Não Importando se todo o espaço está sendo usado 
ou não... O busílis é que o SHRINK  não  diminui o tamanho da 
tablespace, yep ?? Para isso vc teria que efetivamente pedir um RESIZE nos 
datafiles, o que MUITO PROVAVELMENTE em produção não seria o caso, já que o 
espaço rapidamente vai ser consumido mesmo de qquer forma, visto que em PROD os 
INSERTs e UPDATEs são frequentes, imagino...
   
   Outra possibilidade é que vc tenha na origem segmentos sem dados e/ou com 
poucos dados ** MAS ** com tamanho de extent muito grande, aí mesmo o extent 
inicial vazio que o CREATE cria quando do import/impdp acaba sendo 
seginificativo...
   
   O que vc deve fazer é : extrair os DDLs (ie, o CREATE TABLESPACE, os CREATE 
TABLES, CREATE INDEXES, etc, etc, etc) do banco PROD , alterá-los para que 
criem as tablespaces com o menor tamanho possível em que caibam os dados E que 
criem com extent size pequeno (ou até melhor, com extent size automático), 
executá-los no banco destino e só depois importar os dados apenas Atente 
que :
   
   a. SE for desejado que esses dados ocupem o menor dos menores espaços 
possíveis, pode ser recomendado que vc altere as cláusulas de storage (ie, 
pctfree/pctused) para não deixar quase nada reservado nos blocos para futuros 
UPDATEs

   b. essa operação de criar os segmentos e as tablespaces com extent size e 
tamanhos diferentes da origem afaik pode ser feita pelo datapump mesmo (via 
parãmetros TRANSFORM) mas imho é mais fácil se extrair os DDLs (via 
DBMS_METADATA, talvez) e os executar na mão, mesmo

 []s
 
   Chiappa

Re: [oracle_br] Importação IMPDP leva extends das tabelas, como evitar isso ?

2014-10-22 Por tôpico Sebastião Carlos Santos scarlosan...@gmail.com [oracle_br]
No expdp eu desconheço algum parâmetro que faça isso.

No impdp temos o parâmetro TRANSFORM

impdp help=y



TRANSFORM
Metadata transform to apply to applicable objects.
Valid keywords are: OID, PCTSPACE, SEGMENT_ATTRIBUTES and STORAGE.

Maiores detalhes em

http://docs.oracle.com/cd/B14117_01/server.101/b10825/dp_import.htm#sthref359

2014-10-22 10:22 GMT-02:00 Andre Santos andre.psantos...@gmail.com
[oracle_br] :

> base e um impdp no outro servid


Re: [oracle_br] Importação IMPDP leva extends das tabelas, como evitar isso ?

2014-10-22 Por tôpico Andre Santos andre.psantos...@gmail.com [oracle_br]
Germano

Você fez um export (expdp) só do schema? Que opções usou no expdp e impdp?

[ ]

André


Em 22 de outubro de 2014 08:34, germanopac...@gmail.com [oracle_br] <
oracle_br@yahoogrupos.com.br> escreveu:

>
>
> Tenho uma base de dados que utilizada 200GB. O cliente precisou migrar os
> dados para outra empresa e queria levar apenas os dados basicos (alguns
> cadastros). Fiz um import no mesmo banco para um usuário teste e deletei os
> dados desnecessários. Fiz um SHRINK nas tabelas.
>
> Após isso, rodei o script para verificar os tamanhos dos dados, indices,
> etc e totalizam 4GB de dados. Olhando o tamanho alocado na tablespace para
> essa base teste, também vejo que totaliza 4GB.
>
> Tudo ótimo. Faço um expdp dessa base e um impdp no outro servidor. Quando
> faço isso, vejo que ele PRECISA dos 200GB da tablespace origem para fazer o
> import. Acredito que ele esteja levando os extends das tabelas da base
> origem, pois como mencionei, não tenho tudo isso de dados acima.
>
> No EXPDP existe uma maneira dele não levar os "extends" ? Ou estou fazendo
> alguma confusão ?
>
>  
>


Re: [oracle_br] Tablespace

2014-10-22 Por tôpico Andre Santos andre.psantos...@gmail.com [oracle_br]
Débora

Um ponto de atenção é que esse problema não ocorreu com uma tablespace
qualquer... é com a SYSTEM ! (na qual está o dicionário de dados do Oracle).
Ou ela está muito pequena para a necessidade atual (e não está como
"autoextend") ou há segmentos de usuários alocados na SYSTEM indevidamente.

[ ]

André


2014-10-22 9:40 GMT-02:00 mdbo...@ig.com.br [oracle_br] <
oracle_br@yahoogrupos.com.br>:

>
>
>  bom dia, provavelment e a tua tablespace de index precisará ter um
> tamanho maior.
>
> senão me engano a lógica para você aumentá-la é
>
> ALTER TABLESPACE  ADD DATAFILE  DATAFILE> SIZE 50MB;
>
> OK
>
> ESPERO TER AJUDADO
>
> MARCOS
>
>
>
>
>
>
> Em 21/10/2014 19:18, Emerson Moreira Rocha tkz...@yahoo.com.br
> [oracle_br] escreveu:
>
>
>
>
>  Debora,
>
> Verifique o tablespace de indice do tablespace system que esta precisando
> aumentar.
>
>
>  *Att,*
>
>
> --
>
>
> *Emerson M. Rocha*
>
>
>
> Mobile:(11) 5054-8368
> E-Mail: tkz...@yahoo.com.br
>
>
>
> --
>
>
>
>
>
>
>
>
>   Em Terça-feira, 21 de Outubro de 2014 18:13, "Débora Acácio
> debby_ora...@yahoo.com.br [oracle_br]" 
> escreveu:
>
>
>
>
>
> Boa tarde gente
>
> Me tirem uma dúvida estou tentando criar uma procedure e deu a seguinte
> mensagem
>
>  ORA-00604: error occurred at recursive SQL level 1
> ORA-01654: unable to extend index SYS.I_IDL_UB21 by 8 in tablespace SYSTEM
>
>
> Como faço para "consertar" isso ??
>
> Grata
>
> Debby :)
>
>
>
>
>  
>


Re: [oracle_br] Tablespace

2014-10-22 Por tôpico angelo angelolis...@gmail.com [oracle_br]
Um detalhe importante... system é tablespace do sistema
A boa pratica recomenda não trabalhar com a conta sys e nem com os
tablespace do sistema.. o melhor seria criar sua propria conta, e seu
proprio tablespace dentro do seu schema direitinho



On 22 October 2014 09:40, mdbo...@ig.com.br [oracle_br] <
oracle_br@yahoogrupos.com.br> wrote:

>
>
>  bom dia, provavelment e a tua tablespace de index precisará ter um
> tamanho maior.
>
> senão me engano a lógica para você aumentá-la é
>
> ALTER TABLESPACE  ADD DATAFILE  DATAFILE> SIZE 50MB;
>
> OK
>
> ESPERO TER AJUDADO
>
> MARCOS
>
>
>
>
>
>
> Em 21/10/2014 19:18, Emerson Moreira Rocha tkz...@yahoo.com.br
> [oracle_br] escreveu:
>
>
>
>
>  Debora,
>
> Verifique o tablespace de indice do tablespace system que esta precisando
> aumentar.
>
>
>  *Att,*
>
>
> --
>
>
> *Emerson M. Rocha*
>
>
>
> Mobile:(11) 5054-8368
> E-Mail: tkz...@yahoo.com.br
>
>
>
> --
>
>
>
>
>
>
>
>
>   Em Terça-feira, 21 de Outubro de 2014 18:13, "Débora Acácio
> debby_ora...@yahoo.com.br [oracle_br]" 
> escreveu:
>
>
>
>
>
> Boa tarde gente
>
> Me tirem uma dúvida estou tentando criar uma procedure e deu a seguinte
> mensagem
>
>  ORA-00604: error occurred at recursive SQL level 1
> ORA-01654: unable to extend index SYS.I_IDL_UB21 by 8 in tablespace SYSTEM
>
>
> Como faço para "consertar" isso ??
>
> Grata
>
> Debby :)
>
>
>
>
>  
>


Re: [oracle_br] Tablespace

2014-10-22 Por tôpico mdbo...@ig.com.br [oracle_br]
 

bom dia, provavelment e a tua tablespace de index precisará ter um
tamanho maior. 

senão me engano a lógica para você aumentá-la é 

ALTER TABLESPACE  ADD DATAFILE  SIZE 50MB; 

OK 

ESPERO TER AJUDADO 

MARCOS 

Em 21/10/2014 19:18, Emerson Moreira Rocha tkz...@yahoo.com.br
[oracle_br] escreveu: 

> Debora, 
> 
> Verifique o tablespace de indice do tablespace system que esta precisando 
> aumentar. 
> 
> ATT, 
> _ _ 
> 
> -
> 
> _EMERSON M. ROCHA_ 
> 
> Mobile:(11) 5054-8368 
> E-Mail: tkz...@yahoo.com.br

-

 Em Terça-feira, 21 de Outubro de 2014 18:13, "Débora Acácio
debby_ora...@yahoo.com.br [oracle_br]" 
escreveu:

Boa tarde gente

Me tirem uma dúvida estou tentando criar uma procedure e deu a seguinte
mensagem 

ORA-00604: error occurred at recursive SQL level 1 
ORA-01654: unable to extend index SYS.I_IDL_UB21 by 8 in tablespace
SYSTEM 

Como faço para "consertar" isso ??

Grata

Debby :) 

 

Links:
--
[1]
https://br.groups.yahoo.com/neo/groups/oracle_br/conversations/messages/117845;_ylc=X3oDMTJycGdycDY0BF9TAzk3NDkwNDM3BGdycElkAzE2ODI4OTYEZ3Jwc3BJZAMyMTM3MTE0Njg5BG1zZ0lkAzExNzg0NQRzZWMDZnRyBHNsawNycGx5BHN0aW1lAzE0MTM5MjYzMDQ-?act=reply&messageNum=117845
[2]
https://br.groups.yahoo.com/neo/groups/oracle_br/conversations/newtopic;_ylc=X3oDMTJlcmRtMmk5BF9TAzk3NDkwNDM3BGdycElkAzE2ODI4OTYEZ3Jwc3BJZAMyMTM3MTE0Njg5BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTQxMzkyNjMwNA--
[3]
https://br.groups.yahoo.com/neo/groups/oracle_br/conversations/topics/5861;_ylc=X3oDMTM2aGMzaGh0BF9TAzk3NDkwNDM3BGdycElkAzE2ODI4OTYEZ3Jwc3BJZAMyMTM3MTE0Njg5BG1zZ0lkAzExNzg0NQRzZWMDZnRyBHNsawN2dHBjBHN0aW1lAzE0MTM5MjYzMDQEdHBjSWQDNTg2MQ--
[4] http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
[5]
https://br.groups.yahoo.com/neo/groups/oracle_br/conversations/messages
[6]
https://br.groups.yahoo.com/neo/groups/oracle_br/info;_ylc=X3oDMTJlczFzZjEzBF9TAzk3NDkwNDM3BGdycElkAzE2ODI4OTYEZ3Jwc3BJZAMyMTM3MTE0Njg5BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTQxMzkyNjMwNA--
[7]
https://br.groups.yahoo.com/neo/groups/oracle_br/members/all;_ylc=X3oDMTJmZnI5azVsBF9TAzk3NDkwNDM3BGdycElkAzE2ODI4OTYEZ3Jwc3BJZAMyMTM3MTE0Njg5BHNlYwN2dGwEc2xrA3ZtYnJzBHN0aW1lAzE0MTM5MjYzMDQ-
[8]
https://br.groups.yahoo.com/neo;_ylc=X3oDMTJkNDRmZ3Q1BF9TAzk3NDkwNDM1BGdycElkAzE2ODI4OTYEZ3Jwc3BJZAMyMTM3MTE0Njg5BHNlYwNmdHIEc2xrA2dmcARzdGltZQMxNDEzOTI2MzA0
[9] https://info.yahoo.com/privacy/br/yahoo/groups/details.html
[10] https://info.yahoo.com/legal/br/yahoo/utos/terms/


Re: [oracle_br] Problema para gerar código ANO + Sequencial

2014-10-22 Por tôpico Alessandro Lúcio Cordeiro da Silva alecordeirosi...@yahoo.com.br [oracle_br]


 
Exato.

Alessandro Lúcio Cordeiro da Silva 
Analista de Sistema

þ http://alecordeirosilva.blogspot.com/

Porque esta é a vontade de Deus, a saber, a vossa 
santificação: que vos abstenhais da prostituição.
(1º Tessalonicenses 4:3)



Em Quarta-feira, 22 de Outubro de 2014 8:16, "Aroldo Rique aro...@gmail.com 
[oracle_br]"  escreveu:
 


  
Ok, Alessandro, o commit virá logo após o insert na tabela MANIFESTACAO.
O único momento que eu faço um SELECT na tabela GERACAO_ CODIGO é neste que eu 
descrevi. Então, pelo que eu entendi, quando a primeira transação passar por 
esse select, a próxima transação aguardará o término da transação anterior para 
prosseguir, não é mesmo?
Em 22/10/2014 09:10, "Alessandro Lúcio Cordeiro da Silva 
alecordeirosi...@yahoo.com.br [oracle_br]"  
escreveu:

 
>  
>
>
> 
>Aroldo, o FOR UPDATE lock a tabela para alterações, mas não ficará bloqueado 
>para Leitura.::: MAS ::.. outras leituras com for update sim, isso significa 
>que select com FOR UPDATE serão serializados. Ou seja sempre uma trigger 
>somente irar realizar a consulta com o termino da transação da primeira 
>trigger, assim sempre pegando o próximo valor.
>
>
>Sobre não usar o Pragma, se imediatamente apos o insert na tabela MANIFESTACAO 
>você já der o commit, OK, não irar precisar do Pragma, pois o tempo de 
>contenção será muito pouco; todavia se você for realizar uma serie de 
>operações e somente depois X tempo terminar a transação, saiba que ninguem 
>conseguirar incluir registro na tabela manifestação enquanto a transação não 
>terminar. 
>
>
>Alessandro Lúcio Cordeiro da Silva 
>Analista de Sistema
>
>þ http://alecordeirosilva.blogspot.com/
>
>Porque esta é a vontade de Deus, a saber, a vossa 
>santificação: que vos abstenhais da prostituição.
>(1º Tessalonicenses 4:3)
>
>
>
>
>Em Quarta-feira, 22 de Outubro de 2014 7:55, "Aroldo Rique aro...@gmail.com 
>[oracle_br]"  escreveu:
> 
>
>
>  
>Olá, Alessandro, bom dia e obrigado pela ajuda.
>Se eu implementar apenas a sua segunda sugestão:
>2º Coloque um LOCK no seu select com FOR UPDATE, ficando assim:
>
>select nvl(contador + 1,1)
>   into p_contador
>  from geracao_codigo
>where ano = pano
>FOR UPDATE;
>O meu problema já não estará resolvido. Esse FOR UPDATE impedirá que outra 
>transação atribua o mesmo valor à variável p_contador? A tabela geracao_codigo 
>ficará locada inclusive para leitura?
>Essa tabela geracao_codigo só é usada nesse momento(inclusão de um registro na 
>tabela MANIFESTACAO).
>Antecipadamente agradeço a resposta.
>Att,
>Aroldo Rique 
>
>
>
>Em 22/10/2014 08:37, "Alessandro Lúcio Cordeiro da Silva 
>alecordeirosi...@yahoo.com.br [oracle_br]"  
>escreveu:
>
> 
>>  
>>
>>
>> 
>>Olá Aroldo,
>>
>>
>>Para garantir consistência e evitar a contenção você preisa alterar dois 
>>pontos da sua trigger:
>>
>>
>>1º Altere a trigger para ser uma Transação Autônoma usando o pragma 
>>autonomous_transaction. Isto irar fazer que a trigger não participa da 
>>transação principal e irar permitir de outras transações consulte os novos 
>>dados (update incrementado) após o termino da trigger com um COMMIT 
>>independente se a transação principal terminou ou não.
>>
>>
>>2º Coloque um LOCK no seu select com FOR UPDATE, ficando assim:
>>
>>
>>select nvl(contador + 1,1)
>>   into p_contador
>>  from geracao_codigo
>>where ano = pano
>>FOR UPDATE;
>>
>>
>>Assim, se uma trigger for disparada, mas já existir uma primeira trigger 
>>ainda em execução, a 2º trigger aguardará o termino da primeira triiger e só 
>>assim consultará o novo valor. O LOCK será relativamente rapido, pois o LOCK 
>>ocorre somente durante a execução da Trigger r não da transação toda;
>>
>>
>>
>>
>>Alessandro Lúcio Cordeiro da Silva 
>>Analista de Sistema
>>
>>þ http://alecordeirosilva.blogspot.com/
>>
>>Porque esta é a vontade de Deus, a saber, a vossa 
>>santificação: que vos abstenhais da prostituição.
>>(1º Tessalonicenses 4:3)
>>
>>
>>
>>
>>Em Terça-feira, 21 de Outubro de 2014 23:06, "Aroldo Rique aro...@gmail.com 
>>[oracle_br]"  escreveu:
>> 
>>
>>
>>  
>>Prezados, estamos com uma dúvida aqui no meu trabalho com relação a geração 
>>de um código. É um sistema WEB desenvolvido em JAVA e com vários atendentes o 
>>utilizando no Brasil inteiro. O Banco de dados é Oracle. Todos as classes 
>>Services estão com a annotation @Transactional do Spring. 
>>
>>Temos uma tabela chamada MANIFESTACAO, que possui uma sequence como chave 
>>primária (campo ID_MANIFESTACAO). Essa tabela também possui vários outros 
>>campos. Até agora, toda consulta para identificar cada manifestação é 
>>realizada através do campo ID_MANIFESTACAO. 
>>
>>Nosso cliente quer, agora, que a consulta seja feita através de outro código, 
>>que seja mais legível. Sugeriu, então, que cada manifestação, daqui por 
>>diante, ganhe um novo código que irá identificá-la. Esse código deve ser no 
>>formato NNN, onde o  é o ano corrente e os NNN é uma 
>>sequencia de números. Na virada de 

Re: [oracle_br] Problema para gerar código ANO + Sequencial

2014-10-22 Por tôpico Aroldo Rique aro...@gmail.com [oracle_br]
Ok, Alessandro, o commit virá logo após o insert na tabela MANIFESTACAO.

O único momento que eu faço um SELECT na tabela GERACAO_ CODIGO é neste que
eu descrevi. Então, pelo que eu entendi, quando a primeira transação passar
por esse select, a próxima transação aguardará o término da transação
anterior para prosseguir, não é mesmo?
Em 22/10/2014 09:10, "Alessandro Lúcio Cordeiro da Silva
alecordeirosi...@yahoo.com.br [oracle_br]" 
escreveu:

>
>
>
>
> Aroldo, o FOR UPDATE lock a tabela para alterações, mas não ficará
> bloqueado para Leitura.::: MAS ::.. outras leituras com for update sim,
> isso significa que select com FOR UPDATE serão serializados. Ou seja sempre
> uma trigger somente irar realizar a consulta com o termino da transação da
> primeira trigger, assim sempre pegando o próximo valor.
>
> Sobre não usar o Pragma, se imediatamente apos o insert na tabela
> MANIFESTACAO você já der o commit, OK, não irar precisar do Pragma, pois o
> tempo de contenção será muito pouco; todavia se você for realizar uma
> serie de operações e somente depois X tempo terminar a transação, saiba que
> ninguem conseguirar incluir registro na tabela manifestação enquanto a
> transação não terminar.
>
> Alessandro Lúcio Cordeiro da Silva
> Analista de Sistema
> þ http://alecordeirosilva.blogspot.com/
> Porque esta é a vontade de Deus, a saber, a vossa
> santificação: que vos abstenhais da prostituição.
> (1º Tessalonicenses 4:3)
>
>
>
>   Em Quarta-feira, 22 de Outubro de 2014 7:55, "Aroldo Rique
> aro...@gmail.com [oracle_br]"  escreveu:
>
>
>
>  Olá, Alessandro, bom dia e obrigado pela ajuda.
> Se eu implementar apenas a sua segunda sugestão:
> 2º Coloque um LOCK no seu select com FOR UPDATE, ficando assim:
> select nvl(contador + 1,1)
>into p_contador
>   from geracao_codigo
> where ano = pano
> FOR UPDATE;
> O meu problema já não estará resolvido. Esse FOR UPDATE impedirá que outra
> transação atribua o mesmo valor à variável p_contador? A tabela
> geracao_codigo ficará locada inclusive para leitura?
> Essa tabela geracao_codigo só é usada nesse momento(inclusão de um
> registro na tabela MANIFESTACAO).
> Antecipadamente agradeço a resposta.
> Att,
> Aroldo Rique
>
>
> Em 22/10/2014 08:37, "Alessandro Lúcio Cordeiro da Silva
> alecordeirosi...@yahoo.com.br [oracle_br]" 
> escreveu:
>
>
>
>
> Olá Aroldo,
>
> Para garantir consistência e evitar a contenção você preisa alterar dois
> pontos da sua trigger:
>
> 1º Altere a trigger para ser uma Transação Autônoma usando o pragma
> autonomous_transaction. Isto irar fazer que a trigger não participa da
> transação principal e irar permitir de outras transações consulte os novos
> dados (update incrementado) após o termino da trigger com um COMMIT
> independente se a transação principal terminou ou não.
>
> 2º Coloque um LOCK no seu select com FOR UPDATE, ficando assim:
>
> select nvl(contador + 1,1)
>into p_contador
>   from geracao_codigo
> where ano = pano
> FOR UPDATE;
>
> Assim, se uma trigger for disparada, mas já existir uma primeira trigger
> ainda em execução, a 2º trigger aguardará o termino da primeira triiger e
> só assim consultará o novo valor. O LOCK será relativamente rapido, pois o
> LOCK ocorre somente durante a execução da Trigger r não da transação toda;
>
>
> Alessandro Lúcio Cordeiro da Silva
> Analista de Sistema
> þ http://alecordeirosilva.blogspot.com/
> Porque esta é a vontade de Deus, a saber, a vossa
> santificação: que vos abstenhais da prostituição.
> (1º Tessalonicenses 4:3)
>
>
>
>   Em Terça-feira, 21 de Outubro de 2014 23:06, "Aroldo Rique
> aro...@gmail.com [oracle_br]"  escreveu:
>
>
>
>  Prezados, estamos com uma dúvida aqui no meu trabalho com relação a
> geração de um código. É um sistema WEB desenvolvido em JAVA e com vários
> atendentes o utilizando no Brasil inteiro. O Banco de dados é Oracle. Todos
> as classes Services estão com a annotation @Transactional do Spring.
>
> Temos uma tabela chamada MANIFESTACAO, que possui uma sequence como chave
> primária (campo ID_MANIFESTACAO). Essa tabela também possui vários outros
> campos. Até agora, toda consulta para identificar cada manifestação é
> realizada através do campo ID_MANIFESTACAO.
>
> Nosso cliente quer, agora, que a consulta seja feita através de outro
> código, que seja mais legível. Sugeriu, então, que cada manifestação, daqui
> por diante, ganhe um novo código que irá identificá-la. Esse código deve
> ser no formato NNN, onde o  é o ano corrente e os NNN é uma
> sequencia de números. Na virada de ano, a sequencia de números é zerada.
>
> Exemplos desse novo código:
> 2014001
> 2014002
> .
> .
> .
> 2014325
> .
> .
> .
> 2015001
> 2015002
>
> Para cada registro guardado na tabela manifestação, é gerado um código que
> é o incremento do código anterior, exceto na virada do ano.
>
> Precisamos criar um campo CODIGO (que será unique) na tabela MANIFESTACAO.
> Até aí, tudo bem. O problema que estou passando é justamen

Re: [oracle_br] Problema para gerar código ANO + Sequencial

2014-10-22 Por tôpico Alessandro Lúcio Cordeiro da Silva alecordeirosi...@yahoo.com.br [oracle_br]


 
Aroldo, o FOR UPDATE lock a tabela para alterações, mas não ficará bloqueado 
para Leitura.::: MAS ::.. outras leituras com for update sim, isso significa 
que select com FOR UPDATE serão serializados. Ou seja sempre uma trigger 
somente irar realizar a consulta com o termino da transação da primeira 
trigger, assim sempre pegando o próximo valor.

Sobre não usar o Pragma, se imediatamente apos o insert na tabela MANIFESTACAO 
você já der o commit, OK, não irar precisar do Pragma, pois o tempo de 
contenção será muito pouco; todavia se você for realizar uma serie de operações 
e somente depois X tempo terminar a transação, saiba que ninguem conseguirar 
incluir registro na tabela manifestação enquanto a transação não terminar. 

Alessandro Lúcio Cordeiro da Silva 
Analista de Sistema

þ http://alecordeirosilva.blogspot.com/

Porque esta é a vontade de Deus, a saber, a vossa 
santificação: que vos abstenhais da prostituição.
(1º Tessalonicenses 4:3)



Em Quarta-feira, 22 de Outubro de 2014 7:55, "Aroldo Rique aro...@gmail.com 
[oracle_br]"  escreveu:
 


  
Olá, Alessandro, bom dia e obrigado pela ajuda.
Se eu implementar apenas a sua segunda sugestão:
2º Coloque um LOCK no seu select com FOR UPDATE, ficando assim:

select nvl(contador + 1,1)
   into p_contador
  from geracao_codigo
where ano = pano
FOR UPDATE;
O meu problema já não estará resolvido. Esse FOR UPDATE impedirá que outra 
transação atribua o mesmo valor à variável p_contador? A tabela geracao_codigo 
ficará locada inclusive para leitura?
Essa tabela geracao_codigo só é usada nesse momento(inclusão de um registro na 
tabela MANIFESTACAO).
Antecipadamente agradeço a resposta.
Att,
Aroldo Rique 



Em 22/10/2014 08:37, "Alessandro Lúcio Cordeiro da Silva 
alecordeirosi...@yahoo.com.br [oracle_br]"  
escreveu:

 
>  
>
>
> 
>Olá Aroldo,
>
>
>Para garantir consistência e evitar a contenção você preisa alterar dois 
>pontos da sua trigger:
>
>
>1º Altere a trigger para ser uma Transação Autônoma usando o pragma 
>autonomous_transaction. Isto irar fazer que a trigger não participa da 
>transação principal e irar permitir de outras transações consulte os novos 
>dados (update incrementado) após o termino da trigger com um COMMIT 
>independente se a transação principal terminou ou não.
>
>
>2º Coloque um LOCK no seu select com FOR UPDATE, ficando assim:
>
>
>select nvl(contador + 1,1)
>   into p_contador
>  from geracao_codigo
>where ano = pano
>FOR UPDATE;
>
>
>Assim, se uma trigger for disparada, mas já existir uma primeira trigger ainda 
>em execução, a 2º trigger aguardará o termino da primeira triiger e só assim 
>consultará o novo valor. O LOCK será relativamente rapido, pois o LOCK ocorre 
>somente durante a execução da Trigger r não da transação toda;
>
>
>
>
>Alessandro Lúcio Cordeiro da Silva 
>Analista de Sistema
>
>þ http://alecordeirosilva.blogspot.com/
>
>Porque esta é a vontade de Deus, a saber, a vossa 
>santificação: que vos abstenhais da prostituição.
>(1º Tessalonicenses 4:3)
>
>
>
>
>Em Terça-feira, 21 de Outubro de 2014 23:06, "Aroldo Rique aro...@gmail.com 
>[oracle_br]"  escreveu:
> 
>
>
>  
>Prezados, estamos com uma dúvida aqui no meu trabalho com relação a geração de 
>um código. É um sistema WEB desenvolvido em JAVA e com vários atendentes o 
>utilizando no Brasil inteiro. O Banco de dados é Oracle. Todos as classes 
>Services estão com a annotation @Transactional do Spring. 
>
>Temos uma tabela chamada MANIFESTACAO, que possui uma sequence como chave 
>primária (campo ID_MANIFESTACAO). Essa tabela também possui vários outros 
>campos. Até agora, toda consulta para identificar cada manifestação é 
>realizada através do campo ID_MANIFESTACAO. 
>
>Nosso cliente quer, agora, que a consulta seja feita através de outro código, 
>que seja mais legível. Sugeriu, então, que cada manifestação, daqui por 
>diante, ganhe um novo código que irá identificá-la. Esse código deve ser no 
>formato NNN, onde o  é o ano corrente e os NNN é uma sequencia 
>de números. Na virada de ano, a sequencia de números é zerada. 
>
>Exemplos desse novo código: 
>2014001 
>2014002 
>. 
>. 
>. 
>2014325 
>. 
>. 
>. 
>2015001 
>2015002 
>
>Para cada registro guardado na tabela manifestação, é gerado um código que é o 
>incremento do código anterior, exceto na virada do ano. 
>
>Precisamos criar um campo CODIGO (que será unique) na tabela MANIFESTACAO. Até 
>aí, tudo bem. O problema que estou passando é justamente como gerar esse 
>código. 
>
>Criamos uma trigger para a geração automática desses códigos. Criamos também 
>uma tabela chamada GERACAO_CODIGO, que possui 2 campos, ANO e CONTADOR, para 
>ajudar na criação dos códigos. Não sabemos se a trigger é a melhor alternativa 
>
>Essa tabela GERACAO_CODIGO terá apenas 2 campos, o campo ANO e o campo 
>CONTADOR. Inicialmente, a tabela conterá apenas 1 registro (abaixo): 
>
>ANO CONTADOR 
>2014   0 
>
>Essa tabela servirá apenas para ajudar na geração do c

Re: [oracle_br] Problema para gerar código ANO + Sequencial

2014-10-22 Por tôpico Aroldo Rique aro...@gmail.com [oracle_br]
Olá, Alessandro, bom dia e obrigado pela ajuda.

Se eu implementar apenas a sua segunda sugestão:

2º Coloque um LOCK no seu select com FOR UPDATE, ficando assim:

select nvl(contador + 1,1)

   into p_contador

  from geracao_codigo

where ano = pano

FOR UPDATE;

O meu problema já não estará resolvido. Esse FOR UPDATE impedirá que outra
transação atribua o mesmo valor à variável p_contador? A tabela
geracao_codigo ficará locada inclusive para leitura?

Essa tabela geracao_codigo só é usada nesse momento(inclusão de um registro
na tabela MANIFESTACAO).

Antecipadamente agradeço a resposta.

Att,

Aroldo Rique


Em 22/10/2014 08:37, "Alessandro Lúcio Cordeiro da Silva
alecordeirosi...@yahoo.com.br [oracle_br]" 
escreveu:

>
>
>
>
> Olá Aroldo,
>
> Para garantir consistência e evitar a contenção você preisa alterar dois
> pontos da sua trigger:
>
> 1º Altere a trigger para ser uma Transação Autônoma usando o pragma
> autonomous_transaction. Isto irar fazer que a trigger não participa da
> transação principal e irar permitir de outras transações consulte os novos
> dados (update incrementado) após o termino da trigger com um COMMIT
> independente se a transação principal terminou ou não.
>
> 2º Coloque um LOCK no seu select com FOR UPDATE, ficando assim:
>
> select nvl(contador + 1,1)
>into p_contador
>   from geracao_codigo
> where ano = pano
> FOR UPDATE;
>
> Assim, se uma trigger for disparada, mas já existir uma primeira trigger
> ainda em execução, a 2º trigger aguardará o termino da primeira triiger e
> só assim consultará o novo valor. O LOCK será relativamente rapido, pois o
> LOCK ocorre somente durante a execução da Trigger r não da transação toda;
>
>
> Alessandro Lúcio Cordeiro da Silva
> Analista de Sistema
> þ http://alecordeirosilva.blogspot.com/
> Porque esta é a vontade de Deus, a saber, a vossa
> santificação: que vos abstenhais da prostituição.
> (1º Tessalonicenses 4:3)
>
>
>
>   Em Terça-feira, 21 de Outubro de 2014 23:06, "Aroldo Rique
> aro...@gmail.com [oracle_br]"  escreveu:
>
>
>
>  Prezados, estamos com uma dúvida aqui no meu trabalho com relação a
> geração de um código. É um sistema WEB desenvolvido em JAVA e com vários
> atendentes o utilizando no Brasil inteiro. O Banco de dados é Oracle. Todos
> as classes Services estão com a annotation @Transactional do Spring.
>
> Temos uma tabela chamada MANIFESTACAO, que possui uma sequence como chave
> primária (campo ID_MANIFESTACAO). Essa tabela também possui vários outros
> campos. Até agora, toda consulta para identificar cada manifestação é
> realizada através do campo ID_MANIFESTACAO.
>
> Nosso cliente quer, agora, que a consulta seja feita através de outro
> código, que seja mais legível. Sugeriu, então, que cada manifestação, daqui
> por diante, ganhe um novo código que irá identificá-la. Esse código deve
> ser no formato NNN, onde o  é o ano corrente e os NNN é uma
> sequencia de números. Na virada de ano, a sequencia de números é zerada.
>
> Exemplos desse novo código:
> 2014001
> 2014002
> .
> .
> .
> 2014325
> .
> .
> .
> 2015001
> 2015002
>
> Para cada registro guardado na tabela manifestação, é gerado um código que
> é o incremento do código anterior, exceto na virada do ano.
>
> Precisamos criar um campo CODIGO (que será unique) na tabela MANIFESTACAO.
> Até aí, tudo bem. O problema que estou passando é justamente como gerar
> esse código.
>
> Criamos uma trigger para a geração automática desses códigos. Criamos
> também uma tabela chamada GERACAO_CODIGO, que possui 2 campos, ANO e
> CONTADOR, para ajudar na criação dos códigos. Não sabemos se a trigger é a
> melhor alternativa
>
> Essa tabela GERACAO_CODIGO terá apenas 2 campos, o campo ANO e o campo
> CONTADOR. Inicialmente, a tabela conterá apenas 1 registro (abaixo):
>
> ANO CONTADOR
> 2014 0
>
> Essa tabela servirá apenas para ajudar na geração do campo CODIGO da
> tabela MANIFESTACAO. O campo CODIGO será formado pelo ano corrente da data
> do cadastro da manifestação concatenado om o campo CONTADOR + 1 da tabela
> GERACAO_CODIGO.
>
> Então, após o primeiro insert na tabela MANIFESTACAO, o campo CODIGO
> receberá o valor 2014001 e a tabela GERACAO_CODIGO sofrerá um update,
> ficando assim:
>
> ANO CONTADOR
> 2014 1
>
> Com novas inserções na tabela MANIFESTACAO, novos códigos serão gerados e
> novos updates na tabela GERACAO_CODIGO serão relizados:
>
> ANO CONTADOR
> 2014 2
>
> ANO CONTADOR
> 2014 3
>
> .
> .
> .
>
> ANO CONTADOR
> 2014 1569
>
> *Para a geração do CODIGO, optamos por utilizar uma trigger BEFORE INSERT
> para a tabela MANIFESTACAO.*
>
> O código para essa trigger é o seguinte:
>
> view plain
> copy
> to clipboard
> 
> print
> 

Re: [oracle_br] Problema para gerar código ANO + Sequencial

2014-10-22 Por tôpico Alessandro Lúcio Cordeiro da Silva alecordeirosi...@yahoo.com.br [oracle_br]


 
Olá Aroldo,

Para garantir consistência e evitar a contenção você preisa alterar dois pontos 
da sua trigger:

1º Altere a trigger para ser uma Transação Autônoma usando o pragma 
autonomous_transaction. Isto irar fazer que a trigger não participa da 
transação principal e irar permitir de outras transações consulte os novos 
dados (update incrementado) após o termino da trigger com um COMMIT 
independente se a transação principal terminou ou não.

2º Coloque um LOCK no seu select com FOR UPDATE, ficando assim:

select nvl(contador + 1,1)
   into p_contador
  from geracao_codigo
where ano = pano
FOR UPDATE;

Assim, se uma trigger for disparada, mas já existir uma primeira trigger ainda 
em execução, a 2º trigger aguardará o termino da primeira triiger e só assim 
consultará o novo valor. O LOCK será relativamente rapido, pois o LOCK ocorre 
somente durante a execução da Trigger r não da transação toda;


Alessandro Lúcio Cordeiro da Silva 
Analista de Sistema

þ http://alecordeirosilva.blogspot.com/

Porque esta é a vontade de Deus, a saber, a vossa 
santificação: que vos abstenhais da prostituição.
(1º Tessalonicenses 4:3)



Em Terça-feira, 21 de Outubro de 2014 23:06, "Aroldo Rique aro...@gmail.com 
[oracle_br]"  escreveu:
 


  
Prezados, estamos com uma dúvida aqui no meu trabalho com relação a geração de 
um código. É um sistema WEB desenvolvido em JAVA e com vários atendentes o 
utilizando no Brasil inteiro. O Banco de dados é Oracle. Todos as classes 
Services estão com a annotation @Transactional do Spring. 

Temos uma tabela chamada MANIFESTACAO, que possui uma sequence como chave 
primária (campo ID_MANIFESTACAO). Essa tabela também possui vários outros 
campos. Até agora, toda consulta para identificar cada manifestação é realizada 
através do campo ID_MANIFESTACAO. 

Nosso cliente quer, agora, que a consulta seja feita através de outro código, 
que seja mais legível. Sugeriu, então, que cada manifestação, daqui por diante, 
ganhe um novo código que irá identificá-la. Esse código deve ser no formato 
NNN, onde o  é o ano corrente e os NNN é uma sequencia de 
números. Na virada de ano, a sequencia de números é zerada. 

Exemplos desse novo código: 
2014001 
2014002 
. 
. 
. 
2014325 
. 
. 
. 
2015001 
2015002 

Para cada registro guardado na tabela manifestação, é gerado um código que é o 
incremento do código anterior, exceto na virada do ano. 

Precisamos criar um campo CODIGO (que será unique) na tabela MANIFESTACAO. Até 
aí, tudo bem. O problema que estou passando é justamente como gerar esse 
código. 

Criamos uma trigger para a geração automática desses códigos. Criamos também 
uma tabela chamada GERACAO_CODIGO, que possui 2 campos, ANO e CONTADOR, para 
ajudar na criação dos códigos. Não sabemos se a trigger é a melhor alternativa 

Essa tabela GERACAO_CODIGO terá apenas 2 campos, o campo ANO e o campo 
CONTADOR. Inicialmente, a tabela conterá apenas 1 registro (abaixo): 

ANO CONTADOR 
20140 

Essa tabela servirá apenas para ajudar na geração do campo CODIGO da tabela 
MANIFESTACAO. O campo CODIGO será formado pelo ano corrente da data do cadastro 
da manifestação concatenado om o campo CONTADOR + 1 da tabela GERACAO_CODIGO. 

Então, após o primeiro insert na tabela MANIFESTACAO, o campo CODIGO receberá o 
valor 2014001 e a tabela GERACAO_CODIGO sofrerá um update, ficando assim: 

ANO CONTADOR 
20141 

Com novas inserções na tabela MANIFESTACAO, novos códigos serão gerados e novos 
updates na tabela GERACAO_CODIGO serão relizados: 

ANO CONTADOR 
20142 

ANO CONTADOR 
20143 

. 
. 
. 

ANO CONTADOR 
20141569 

Para a geração do CODIGO, optamos por utilizar uma trigger BEFORE INSERT para a 
tabela MANIFESTACAO. 

O código para essa trigger é o seguinte: 


view plaincopy to clipboardprint?
1. CREATE OR REPLACE TRIGGER TRIGGER_GERA_CODIGO BEFORE INSERT ON 
MANIFESTACAO  
2. FOR EACH ROW  
3. DECLARE  
4. P_ANO NUMBER(4);  
5. P_CONTADOR NUMBER(11);  
6. P_CODIGO NUMBER(11);  
7. BEGIN  
8.   
9. --recupera o ano da data do cadastro da manifestação  
10. P_ANO := 
to_number(tochar(:NEW.DT_CADASTRO_MANIFESTACAO,''));  
11.   
12. --recupera o valor do campo contador e coloca o resultado na 
variável P_CONTADOR, já incrementando o seu valor. A variável P_CONTADOR 
ajudará a formar o campo CODIGO  
13. SELECT NVL(CONTADOR + 1,1)   
14. INTO P_CONTADOR  
15. FROM GERACAO_CODIGO WHERE ANO = PANO;  
16.   
17. --atualiza a tabela GERACAO_CODIGO. Se a variável P_CONTADOR 
for maior que 1, devo apenas atualizar o campo CONTADOR do ano correspondente 
com o seu novo valor, já incrementado  
18. IF (P_CONTADOR > 1) THEN  
19. UPDATE GERACAO_CODIGO  
20. SET CONTADOR = P_CONTADOR  
21. W

[oracle_br] Importação IMPDP leva extends das tabelas, como evitar isso ?

2014-10-22 Por tôpico germanopac...@gmail.com [oracle_br]
Tenho uma base de dados que utilizada 200GB. O cliente precisou migrar os dados 
para outra empresa e queria levar apenas os dados basicos (alguns cadastros). 
Fiz um import no mesmo banco para um usuário teste e deletei os dados 
desnecessários. Fiz um SHRINK nas tabelas.
 Após isso, rodei o script para verificar os tamanhos dos dados, indices, etc e 
totalizam 4GB de dados. Olhando o tamanho alocado na tablespace para essa base 
teste, também vejo que totaliza 4GB. 
 Tudo ótimo. Faço um expdp dessa base e um impdp no outro servidor. Quando faço 
isso, vejo que ele PRECISA dos 200GB da tablespace origem para fazer o import. 
Acredito que ele esteja levando os extends das tabelas da base origem, pois 
como mencionei, não tenho tudo isso de dados acima.
 No EXPDP existe uma maneira dele não levar os "extends" ? Ou estou fazendo 
alguma confusão ?