[oracle_br] Re: Duvida Partição

2014-08-01 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Bom, primeiro de tudo :  Não Existe  no RDBMS Oracle (e nem na maioria 
esmagadora dos RDBMSs) o conceito de se limitar o número de linhas numa tabela 
(ou partição, ou índice, enfim) - por definição, enquanto o número de linhas 
estiver abaixo dos limites máximos do RDBMS ** e ** houver espaço de 
armazenamento, vc Sempre Pode inserir mais linhas, yep ??? Confira no manual e 
no paper 
http://www.oracle.com/technetwork/database/bi-datawarehousing/twp-partitioning-11gr2-2010-10-189137.pdf
 os detalhes mas basicamente é isso aí...
 Assim, para atender a essa algo inusitada necessidade, vc tem as seguintes 
opções :

 a) se vc já tem uma chave artificial numérica e sequencial/single-increment, 
vc simplesmente particiona por RANGE, ie : os valores de 1 a 1999 ficam na 
partição P1, de 2000 a 3900 na partição 2, assim por diante... O ponto 
aqui é que se essa chave é mantida por SEQUENCE (normalmente é, por causa da 
performance) vc FACILMENTE pode ter (e mesmo VAI ter)  GAPs, então talvez vc 
possa terminar com uns poucos registros a menos que 20 milhões numa partição - 
se isso não te incomoda, blz

OU

 b) se vc não tem a situação a), aí VOCÊ vai ter que criar algum tipo de 
contador de registros , via trigger ou via views materializada : 
https://asktom.oracle.com/pls/apex/f?p=100:11:0P11_QUESTION_ID:42304816945767
 lista algumas possibilidades, mas fique CIENTE que necessariamente isso PODE 
INTERFERIR SERIAMENTE na performance, pois vc está colocando um Overhead para 
cada INSERT, é inescapável... E Óbvio, vc vai ter que ter algum código extra 
(talvez na Aplicação, talvez no banco via trigger)  para validar antes de cada 
insert através do contador se chegou nos 20 milhões ou não, isso é MAIS 
manutenção, MAIS partes móveis, MAIS overhead...

OU

 c) se o limite puder ser por tamanho E não for necessário ser tão precisamente 
especificado, vc poderia calcular mais ou menos quanto espaço em disco os 20 
milhões ocupam e ter a tablespace da partição pré-criada Exatamente com esse 
tamanho : aí vc somente terá que ter algum código (na Aplicação, talvez) que, 
quando o banco der erro no INSERT por espaço esgotado, re-execute o INSERT na 
próxima partição...

== No caso, o HASH *** Não Vai ** te atender, de forma alguma : o que ele faz 
é simplesmente tentar espalhar os registros em quantidades mais ou menos 
similares enter as partições, mas Não Há como vc limitar (em qtdade de linhas 
ou tamanho ou seja o que for) cada partição Sem código extra, yep ??

  []s

Chiappa

Re: [oracle_br] Re: Duvida Partição

2014-08-01 Por tôpico 'Bruno N. Barboza' bruno.n.barb...@gmail.com [oracle_br]
Chiappa, bom dia!

Muito obrigado pela resposta.
Vou estudar o melhor caso.



Att,
Bruno N. Barboza


Em 1 de agosto de 2014 11:23, jlchia...@yahoo.com.br [oracle_br] 
oracle_br@yahoogrupos.com.br escreveu:



 Bom, primeiro de tudo :  Não Existe  no RDBMS Oracle (e nem na
 maioria esmagadora dos RDBMSs) o conceito de se limitar o número de linhas
 numa tabela (ou partição, ou índice, enfim) - por definição, enquanto o
 número de linhas estiver abaixo dos limites máximos do RDBMS ** e ** houver
 espaço de armazenamento, vc Sempre Pode inserir mais linhas, yep ???
 Confira no manual e no paper
 http://www.oracle.com/technetwork/database/bi-datawarehousing/twp-partitioning-11gr2-2010-10-189137.pdf
 os detalhes mas basicamente é isso aí...
  Assim, para atender a essa algo inusitada necessidade, vc tem as
 seguintes opções :

  a) se vc já tem uma chave artificial numérica e
 sequencial/single-increment, vc simplesmente particiona por RANGE, ie : os
 valores de 1 a 1999 ficam na partição P1, de 2000 a 3900 na
 partição 2, assim por diante... O ponto aqui é que se essa chave é mantida
 por SEQUENCE (normalmente é, por causa da performance) vc FACILMENTE pode
 ter (e mesmo VAI ter)  GAPs, então talvez vc possa terminar com uns poucos
 registros a menos que 20 milhões numa partição - se isso não te incomoda,
 blz

 OU

  b) se vc não tem a situação a), aí VOCÊ vai ter que criar algum tipo de
 contador de registros , via trigger ou via views materializada :
 https://asktom.oracle.com/pls/apex/f?p=100:11:0P11_QUESTION_ID:42304816945767
 lista algumas possibilidades, mas fique CIENTE que necessariamente isso
 PODE INTERFERIR SERIAMENTE na performance, pois vc está colocando um
 Overhead para cada INSERT, é inescapável... E Óbvio, vc vai ter que ter
 algum código extra (talvez na Aplicação, talvez no banco via trigger)  para
 validar antes de cada insert através do contador se chegou nos 20 milhões
 ou não, isso é MAIS manutenção, MAIS partes móveis, MAIS overhead...

 OU

  c) se o limite puder ser por tamanho E não for necessário ser tão
 precisamente especificado, vc poderia calcular mais ou menos quanto espaço
 em disco os 20 milhões ocupam e ter a tablespace da partição pré-criada
 Exatamente com esse tamanho : aí vc somente terá que ter algum código (na
 Aplicação, talvez) que, quando o banco der erro no INSERT por espaço
 esgotado, re-execute o INSERT na próxima partição...

 == No caso, o HASH *** Não Vai ** te atender, de forma alguma : o que ele
 faz é simplesmente tentar espalhar os registros em quantidades mais ou
 menos similares enter as partições, mas Não Há como vc limitar (em qtdade
 de linhas ou tamanho ou seja o que for) cada partição Sem código extra, yep
 ??

   []s

 Chiappa
  



[oracle_br] Re: Duvida Partição

2014-08-01 Por tôpico ederson200...@yahoo.com.br [oracle_br]
Bruno, 

 Com 6 partições e 35 milhões de registros/mês, vc distribuirá 5,8 milhões de 
registros em cada partição e atingirá 20 milhões de registros em cada partição, 
em 3.4 meses e ao fim de 1 ano, haverá cerca de 70 milhões de registros em cada 
partição.
 

 Para dar o efeito de limitar quantidade de registros por partição, a dica é 
aumentar nova partição a cada 3.4 meses. Lembre-se que o processo de adicionar 
partição, faz um reball das atuais, redistribuindo os registros existentes, 
na nova partição para que todas fiquem balanceadas (número semelhante de 
registros) e isto demanda um certo tempo, apesar de poder ser feito com os 
usuários conectados e usando (apesar de não recomendado em termos de 
performance, a versão Enterpri$e permite isto).
 

 Leia o documento 
http://docs.oracle.com/cd/E11882_01/server.112/e25523/part_admin002.htm 
http://docs.oracle.com/cd/E11882_01/server.112/e25523/part_admin002.htm na 
sessão de Adding Partitions, especificamente em Adding a Partition to a 
Hash-Partitioned Table;
 


  
 

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


Re: [oracle_br] Re: Duvida Partição

2014-08-01 Por tôpico 'Milton Bastos Henriquis Jr.' miltonbas...@gmail.com [oracle_br]
Faça particionamento por data, e mande criar uma partição nova a cada 15
dias.






Att,










Em 1 de agosto de 2014 11:30, ederson200...@yahoo.com.br [oracle_br] 
oracle_br@yahoogrupos.com.br escreveu:




 Bruno,

 Com 6 partições e 35 milhões de registros/mês, vc distribuirá 5,8 milhões
 de registros em cada partição e atingirá 20 milhões de registros em cada
 partição, em 3.4 meses e ao fim de 1 ano, haverá cerca de 70 milhões de
 registros em cada partição.

 Para dar o efeito de limitar quantidade de registros por partição, a dica
 é aumentar nova partição a cada 3.4 meses. Lembre-se que o processo de
 adicionar partição, faz um reball das atuais, redistribuindo os registros
 existentes, na nova partição para que todas fiquem balanceadas (número
 semelhante de registros) e isto demanda um certo tempo, apesar de poder ser
 feito com os usuários conectados e usando (apesar de não recomendado em
 termos de performance, a versão Enterpri$e permite isto).

 Leia o documento
 http://docs.oracle.com/cd/E11882_01/server.112/e25523/part_admin002.htm na
 sessão de Adding Partitions, especificamente em Adding a Partition to
 a Hash-Partitioned Table;




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