Pular para o conteúdo
  • Este tópico contém 3 respostas, 3 vozes e foi atualizado pela última vez 16 anos, 10 meses atrás por David Siqueira.
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #86916
    thianolima
    Participante

      Ola galera olha eu enchendo o saco novamente…rs
      Estou tentando criar um campo em uma tabelo um pouco grande que ja possui 30 campos com 30 milhoes de registros, rodando a seguinte query


      ALTER TABLE LIGACAO ADD LIG_RAMAL_SERVICO DEFAULT 'N'
      CONSTRAINT CKN_LIGACAO_LIG_RAMAL NOT NULL
      CONSTRAINT CK_LIGACAO_LIG_RAMAL CHECK(IN('S','N'))

      Tentei criar um campo igual a este e demorou mais de 4 hrs para conseguir. Dai me disseram q existe uma forma de criar o campo com as constraints passando para o oracle nao se importar com os dados existentes na tabela e qria saber como consigo fazer esse tipo de coisa?

      #86917
      Ishii
      Participante

        Olá,

        Basta colocar a opção NOVALIDATE na criação da constraint…

        []s Ishii

        #86923
        thianolima
        Participante

          Fiz da sequinte maneira abaixo e continua lento a criacao


          ALTER TABLE LIGACAO ADD LIG_TELEFONE CHAR(1) DEFAULT 'N'
          CONSTRAINT CKN_LIGACAO_LIG_TELEFONE NOT NULL NOVALIDATE
          CONSTRAINT CK_LIGACAO_LIG_LIG_TELEFONE CHECK(LIG_TELEFONE IN ('S','N')) NOVALIDATE

          faz meia hora q o trem ta rodando e ainda nao acabou…rs

          #86924
          David Siqueira
          Participante

            Cara uma vez eu fui criar uma constraint em uma tabela e demorava demais, como você esta alterando uma tabela enorme ,
            pode ser que isso leve um tempo mesmo, mas no meu caso na época era falta de espaço na SYSTEM , pois quando você altera algo o Oracle dispara vários triggers internos que atualizam as tabelas do dicioário de dados, e como eu não tinha espaço suficiente pra ser realocado ficava lento até dar um erro de “unable to extent on tablespace SYSTEM”, estou apenas especulando, não sei se é esse seu caso.
            Outra opção é você forçar um paralelismo desse processo de adição de coluna, colocando antes do comando um “alter session force parallel”, com isso vc cria pequenos threads de processos no banco que farão sua requisição um pouco mais rápida.

            Abraço
            David.

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