Pular para o conteúdo
  • Este tópico contém 17 respostas, 5 vozes e foi atualizado pela última vez 16 anos, 11 meses atrás por David Siqueira.
Visualizando 15 posts - 1 até 15 (de 18 do total)
  • Autor
    Posts
  • #84884
    jspaulonci
    Participante

      Moç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

      #84885
      David Siqueira
      Participante

        Qual a versão do Banco Jõao???

        #84886
        jspaulonci
        Participante

          Aqui é RAC 10.2.0.3.0 com ASM

          #84887
          vieri
          Participante

            How 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.
            rsrs

            para checar a sintaxe:
            http://www.ss64.com/ora/table_c.html

            []s
            Daniel Vidal
            DBA

            #84889
            jspaulonci
            Participante

              Obrigado Daniel, achei que tivessemos algum recurso disponível para tal

              Abraços

              #84890
              jspaulonci
              Participante

                Pessoal alguem tem alguma documentação sobre particionamento de indices no Oracle ?

                Obrigado

                Spaulonci

                #84892
                vieri
                Participante

                  Paulo 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.

                  #84893
                  vieri
                  Participante

                    Quando finalizar, poste ai o sucesso e o tempo do import(curiosidade)…

                    #84894
                    Rodrigo Almeida
                    Participante

                      Cara,

                      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 Almeida

                      #84902
                      David Siqueira
                      Participante

                        Joã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

                        #84907
                        vieri
                        Participante

                          Blz 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..

                          #84909
                          Rodrigo Almeida
                          Participante

                            Olá,

                            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

                            #84911
                            vieri
                            Participante

                              Excelente 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

                              #84912
                              Rodrigo Almeida
                              Participante

                                Exatamente 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 Almeida

                                #84942
                                jspaulonci
                                Participante

                                  Bom 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 redefinition

                                  Obrigado

                                Visualizando 15 posts - 1 até 15 (de 18 do total)
                                • Você deve fazer login para responder a este tópico.