Pular para o conteúdo
Visualizando 11 posts - 1 até 11 (de 11 do total)
  • Autor
    Posts
  • #92211
    Anônimo

      Olá pessoal to tentando popular uma coluna com valores em sequencia, tipo tenho uma coluna PK em uma tabela com mais de 5milhoes de linhas e queria que essa coluna PK que se encontra com valores null que seja populada com numeros sequenciais.
      Meu problema é fazer isso da forma mais rápida possível se alguém puder ajudar obrigado.

      #92216
      VitorLeandro
      Participante

        Amigo, se você quiser popular rapidamente a tabela, eu sugiro que você a recrie, ao invés de fazer update…

        Exemplo:

        select rownum seq, (restante dos campos) from tabela
        Dessa forma, será acrescentado um numero seqüencial a esta tabela, ou se preferir, crie um sequence, e faça o select sobre ele (zerar o sequence após o teste).

        select seq.nexval, (restante dos campos) from tabela.

        Em seguida, crie uma outra tabela com esta definição e estes dados:

        create table dw_temp.teste2 nologging, parallel as
        select rownum seq, (restante dos campos) from tabela…

        Parallel é pra criar em paralelo e nologging é pra gerar com o mínimo de redo (faça um export depois).

        #92218
        burga
        Participante

          Se for utilizar sequence, você pode criar ela com um cache grande.

          #92220
          VitorLeandro
          Participante

            Esqueci de postar, depois que você criar a tabela nova, faça um rename:

            ALTER TABLE TABELA RENAME TO TABELA_BKP;
            ALTER TABLE TABELA_NOVA RENAME TO TABELA;

            Se for utilizar essa tabela definitivamente, utilize sequence.

            Não se esqueça de alterar a tabela para LOGGING (ALTER TABLE TABLE_NAME LOGGING;) para que gere redo e archive. Isso vai ajudar muito caso você precise fazer uma recuperação!

            #92222
            Anônimo

              VitorLeandro essa tabela tem mais de 15gb e eu só estou querendo colocar uma coluna nova e popular com números sequênciais pois para usar o package DBMS_REDEFINITION mas se tiver uma outra forma de eu criar uma partição nesta tabela de 15gb sem ter que mudar sua estrutura me diz.
              Eu to fazendo assim:
              Crio uma tabela clone da original apenas a estrutura e faço logo o particionamento e depois é que uso o DBMS_REDEFINITION mas sempre tenho problema com PK pois essa tabela de 15gb não tem PK.
              Tem alguma maneira de eu criar essa partição na tabela de 15gb sem ter que criar uma coluna e popular para ficar como chave primária e só assim usar o package DBMS_REDEFINITION?

              #92225
              VitorLeandro
              Participante

                Há intendi…Você tá querendo particionar essa tabela não é?
                A maneira mais rápida na minha opinião continua sendo CTAS…

                create table tempo nologging, parallel
                PARTITION BY RANGE(DATINI)
                (
                PARTITION VALUES LESS THAN (to_date(‘4/6/2013′,’dd/mm/yyyy’)),
                PARTITION VALUES LESS THAN (to_date(’31/12/2051′,’dd/mm/yyyy’)),
                PARTITION VALUES LESS THAN (MAXVALUE)) as select * from tempo_old

                alter table tempo logging;

                Dessa forma, as nomes de partições serão geradas automaticamente…

                Lembrando que em tabelas gigantes, é interessante você colocar uma Primary key!

                É isso mesmo que você quer?

                #92226
                Anônimo

                  Isso mesmo

                  #92228
                  Anônimo

                    VitorLeandro Obrigado!
                    Mas tenho outra questão é sobre o nologging isso não é muito arriscado pois com essa opção ativa se der algum erro ou problema não vai deixar de registrar ou por exemplo pode parar no meio da criação da tabela e isso não teria problemas em eu saber quais os dados estão corretos e como eu poderia recuperar?

                    #92230
                    VitorLeandro
                    Participante

                      Você pode retirar o nologging, mas pode demorar um pouco mais! É prática utilizar o CTAS com nologging juntos, para agilizar o procedimento.

                      Se a tabela for criada com suscesso, não haverá problemas de recuperação, pois todas as linhas no select estaram na tabela final e sua tabela já fou gravada no datafile.. O problema é se o datafile falhar ou corromper, se não tiver realizado um backup, não haverão redo e conseguentemente archivelog suficiente para a recuperação desta…

                      Para garantir isso, basta não dropar a tabela original, e quando o backup full do seu banco terminar, você dropa ela pois já existirá ela no backupset e os logs continuaram a ser gravados normalmente, depois do alter table acima.

                      #92231
                      Anônimo

                        ok obrigado irei fazer assim mesmo com nologging acho que não terei problemas com isso.

                        #92232
                        fsitja
                        Participante

                          A vantagem de usar nologging é justamente essa do desempenho. Como a operação de create table as select é atômica, se der “pau” no meio do procedimento você vai ter que rodar o comando de novo. Working as intended.

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