- Este tópico contém 17 respostas, 5 vozes e foi atualizado pela última vez 16 anos, 11 meses atrás por
David Siqueira.
-
AutorPosts
-
22 de janeiro de 2009 às 8:18 pm #84884
jspaulonci
ParticipanteMoçada boa tarde, alguem já pegou alguma tabela de 150gb ou coisa parecida e precisou particiona-la ? se sim , ela deverá ser particionada na unha ou tem alguma técnica ?
Abraços
Obrigado
Spaulonci
22 de janeiro de 2009 às 9:00 pm #84885David Siqueira
ParticipanteQual a versão do Banco Jõao???
22 de janeiro de 2009 às 9:05 pm #84886jspaulonci
ParticipanteAqui é RAC 10.2.0.3.0 com ASM
22 de janeiro de 2009 às 9:20 pm #84887vieri
ParticipanteHow to.
1°export da tabela
2°levantar privilégios,relacionamentos,sinônimos.. etc..
para recriar depois
3°truncate
4°Criar tabela particionada
5°import da tabela(index=n)
6°Criar indices particionados
7°Recriar depêndencias levantadas no item 2.
8ºRodar estatistica para tabela.obs:
Sugiro total preocupação com performance,
noa importação
como BUFFER , RECORDLENGTH , DIRECT, RESUMABLE(garantir que o processo espere caso ocorra erros como estoruro de tablespace)… etc…Pode ser que o processo leve mais de 10hrs,
agende para um domingo chuvoso.
rsrspara checar a sintaxe:
http://www.ss64.com/ora/table_c.html[]s
Daniel Vidal
DBA23 de janeiro de 2009 às 12:22 pm #84889jspaulonci
ParticipanteObrigado Daniel, achei que tivessemos algum recurso disponível para tal
Abraços
23 de janeiro de 2009 às 1:38 pm #84890jspaulonci
ParticipantePessoal alguem tem alguma documentação sobre particionamento de indices no Oracle ?
Obrigado
Spaulonci
23 de janeiro de 2009 às 6:39 pm #84892vieri
ParticipantePaulo segue exemplo de sintaxe,
não existe mistério.CREATE INDEX “DBO_DATAMART”.”IE1_VENDA_DIARIA_SKU_DAT_ALT_P” ON “DBO_DATAMART”.”TB_FAT_VENDA_DIARIA_SKU” (“DAT_ALT”)
PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING
STORAGE(
BUFFER_POOL DEFAULT)
TABLESPACE “TBS_INDX_DATAMART” LOCAL
(PARTITION “FAT_VENDA_DIARIA_SKU_4TRI2005”
PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE “TBS_INDX_DATAMART” ,
PARTITION “FAT_VENDA_DIARIA_SKU_1TRI2006”
PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE “TBS_INDX_DATAMART” ,
PARTITION “FAT_VENDA_DIARIA_SKU_2TRI2006”
PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE “TBS_INDX_DATAMART” ,
PARTITION “FAT_VENDA_DIARIA_SKU_3TRI2006”
PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE “TBS_INDX_DATAMART” ,
PARTITION “FAT_VENDA_DIARIA_SKU_4TRI2006”
PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE “TBS_INDX_DATAMART” ,
PARTITION “FAT_VENDA_DIARIA_SKU_1TRI2007”
PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE “TBS_INDX_DATAMART” ,
PARTITION “FAT_VENDA_DIARIA_SKU_2TRI2007”
PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE “TBS_INDX_DATAMART” ,
PARTITION “FAT_VENDA_DIARIA_SKU_3TRI2007”
PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE “TBS_INDX_DATAMART” ,
PARTITION “FAT_VENDA_DIARIA_SKU_4TRI2007”
PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE “TBS_INDX_DATAMART” ,
PARTITION “FAT_VENDA_DIARIA_SKU_1TRI2008”
PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE “TBS_INDX_DATAMART” ,
PARTITION “FAT_VENDA_DIARIA_SKU_2TRI2008”
PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE “TBS_INDX_DATAMART” ,
PARTITION “FAT_VENDA_DIARIA_SKU_3TRI2008”
PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING
STORAGE(INITIAL 81920 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE “TBS_INDX_DATAMART” ,
PARTITION “FAT_VENDA_DIARIA_SKU_4TRI2008”
PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING
STORAGE(INITIAL 81920 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE “TBS_INDX_DATAMART”
PARTITION “FAT_VENDA_DIARIA_SKU_1TRI2009”
PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE “TBS_INDX_DATAMART” ,
PARTITION “FAT_VENDA_DIARIA_SKU_2TRI2009”
PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE “TBS_INDX_DATAMART” ,
PARTITION “FAT_VENDA_DIARIA_SKU_3TRI2009”
PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING
STORAGE(INITIAL 81920 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE “TBS_INDX_DATAMART” ,
PARTITION “FAT_VENDA_DIARIA_SKU_4TRI2009”
PCTFREE 10 INITRANS 2 MAXTRANS 255 NOLOGGING
STORAGE(INITIAL 81920 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE “TBS_INDX_DATAMART” ) ;Fique atento para incluir no índice a mesma quantidade
de partições que existem na tabela.23 de janeiro de 2009 às 9:19 pm #84893vieri
ParticipanteQuando finalizar, poste ai o sucesso e o tempo do import(curiosidade)…
24 de janeiro de 2009 às 1:55 am #84894Rodrigo Almeida
ParticipanteCara,
Tu poderá utilizar simplesmente o DBMS_REDEFINITION para passar uma tabela HEAP para uma Particionada.
Segue alguns exemplos:
http://www.psoug.org/reference/dbms_redefinition.html
E antes de mais nada, saiba algumas coisas, como:
- Qual será a melhor chave de particionamento da sua tabela.
- Qual tipo de particionamento deverei criar.
- Deverá existir subparticionamento?
- Qual será a melhor forma de distribuir entre as tablespaces.
- Qual poderá ser tamanho aproximado de cada partição.
- Usarei particionamento GLOBAL ou DOMAIN
Pense, se tenho tabela particionada = índice Particionado
- Tablespaces específicas para os índices particionados.
- Qual índice será o melhor, B*Tree ou Bitmap?
E tecnica para manipular os dados entre eles tem o monte. O vieri passou um dica, existe também o DBMS_REDEFINITION, e também existe a mais simples ainda.
SQL> select count(*) from ;
SQL> desc sua_tabela_elefante;
SQL> CREATE TABLE …
SQL > insert into values (select * from );
E bem-vindo ao particionamento!!!
Abraços,
Rodrigo Almeida26 de janeiro de 2009 às 2:00 pm #84902David Siqueira
ParticipanteJoão, se quiser se aventurar pelo mundo da DBMS_REDEFINITION, ai vai um exemplinho básico :
http://www.oracle-base.com/articles/mis … gTable.php
Boa Sorte!!!
Abcs.
David
26 de janeiro de 2009 às 6:02 pm #84907vieri
ParticipanteBlz Rodrigo?
SQL> CREATE TABLE …
SQL > insert into values (select * from );
essa é a técnica mais simples, em seguida o export/import
em seguida a redefinition que deve ser simples porém não mto difundida.no entanto a ténica acima precisária de 150Gb de espaço
de manobra na tablespace… pode ser impeditivo em
servidores com falta de espaço e também
baixa performance caso não inclua
o hint /* +append */ para não fazer o insert linha a linha.Básicamente o conceito da redefition e dizer o objeto origem e destino
que ele irá se encarregar de tranformar a estrutura interna do objeto
destino igual do objeto origem correto ?E se no caso a tabela antiga estiver com um projeto físico de
extents alocando de 128k em 128k e eu quiser alterar
para 1mb ou alterar qualquer parâmetro de storage.
como ela irá se comportar?abços..
26 de janeiro de 2009 às 8:29 pm #84909Rodrigo Almeida
ParticipanteOlá,
Vieri! Concordo contigo quando estamos falando em limitações de espaço em disco no servidor ou até mesmo a utilização do DBMS_REDEFINITION no banco de dados.
Para qualquer solução adotada, o DBA deverá analisar qual será a melhor técnica a ser aplicada.
O DBMS_REDEFINITION sim pode utilizar os mesmo default storages da sua tabela antiga, se etiver utilizando os valores padrões de gerenciamento LMT ou valores pré-determinados do seu gosto quando utilizado com DMT, terá os mesmos valores com o DBMS_REDEFINITION na nova estrutura, se trabalha com valores específicos à nível de tabela, o particionamento assumirá, porém, se tu verificar que não ficou bom o novo modelo, nada lhe impede de ALTER TABLE MODIFY PARTITION default storage ( … ); e BIMBA!!! Mudar somente o que precisa, seja na ALOCAÇÃO DE NOVOS EXTENS, PCTFREE, PCTUSED e etc..
O maior problema que vejo é sair da tabela HEAP e ir para uma particionada, pois, pelos padrões de armazenamento, deverá mudar em muito, pois não teremos mais uma LINGUIÇONA GIGANTE, e SIM, DIVERSOS FRAGMENTOS PEQUENOS DE PREFERÊNCIA. E isso mudar a forma de armazenamento, no particionamento. Esses parâmetros podem ser desde PCTUSED, PCTFREE, INITIAL e NEXT EXTENT, até mesmo uma outra configuração de BUFFER CACHE (RECYCLE ou KEEP) no segmento.
Enquanto a utilização do INSERT INTO … é uma técnica bem fácil mesmo, e deve sim utilizar com o hint /+ APPEND +/ para não ter que ficar vendo os blocos livres e realocando eles, o APPEND simplesmente pega blocos novos sem ter essa preocupação de realocação, por isso ele será sempre mais rápido…
Fora que para a Técnica de INSERT INTO ou EXP/IMP, dependerá sempre de SORT, PROCESSAMENTO, BUFFER CACHE e etc… fica mais a critério do cliente =D
O bom do export/import, tu pode realizar o EXPORT da tabela no formato antigo, e usar técnicas de performance como DIRECT, RECORDLENGTH, BUFFER, COMPRESS, que dependendo do hardware ode ser mais rápido e retira praticamente a fragmentação…
Mas varia muito Viere, depende da situação e quais recursos que tem em mãos. Eu geralmente uso DBMS_REDIFINITION, pq quando passo para o novo formato que preciso, toda a minha consistência lógica como PK e FK se transferem automaticamente e isso não faz invalidar meu modelo de dados.
Outras soluções são boas também, não existe técnica ruim, o bom que Bob Bryla quando estava fazendo o CORE lançou o ALTER TABLE que facilita a vida… heheheheheheh
Abraços,
Rodrigo Almeida
26 de janeiro de 2009 às 8:48 pm #84911vieri
ParticipanteExcelente resposta rodrigo, técnica e direta.
A questão da fragmentação foi um dos pontos no qual
escolhi o metodo exp/imp, e não escolhi o insert into
por limitação de espaço, conhecia a redefinition
mas preferi não estuda-lá nessa tarefa pois a tabela era
desnormalizada (sem relacionamentos) coisas de ETL
e também possuia toda a janela do fds para isso,
e tenho bom hardware, só nessa brincadeira aqui já citamos
5 critérios que precisam ser avaliados para decidir
qual estratêgia irá tomar.Paulo qdo finalizar o trab do particionamento
manda um resumo das atividades realizadas.
E qual estrâtegia se enquadrou no seu cenârio.[]s
26 de janeiro de 2009 às 8:54 pm #84912Rodrigo Almeida
ParticipanteExatamente Vieri,
Por isso que gosto de fóruns, podemos discutir soluções, e veja que em apenas 4 post, conseguimos encontrar diversas técnicas e diversos pontos de vista. E para cada, como dito, tem o seu ponto fraco e forte. Muito bom mesmo… =D
É que DBMS_REDEFINITION para ambientes de DW é complicado mesmo, já tive tabelas de fato de 2TB e sei que é administrar isso… um parto só!!!
Mas, João, se tiver mais dúvidas e críticas, posta aí para tentar ajudarmos na melhor maneira possível.
Abraços,
Rodrigo Almeida28 de janeiro de 2009 às 3:56 pm #84942jspaulonci
ParticipanteBom dia Moçada…mais uma vez muito obrigado pessoal, na verdade, postei esta necessidade como exemplo, no meu ambiente atual temos tabelas particionadas, mas no trabalho anterior nós tinhamos tabelas de 150gb que não eram particionadas, por isso eu postei este case.
Eu tinha pensado em insert as select, exp e imp, mas essa do REDEFINITION eu não me lembrava, considerando que tivemos janela apropriada pela tarefa eu escolheria um exp com imp, e boa….porem sem janela técnia, eu utilizaria um redefinitionObrigado
-
AutorPosts
- Você deve fazer login para responder a este tópico.