none
Comando Alter Table ADD RRS feed

  • Pergunta

  • Bom dia caros colegas,

     

    Tenho uma tabela com mais de 10milhões de registros e precisei acrescentar mais 12 colunas,

    preparei este script para rodar no servidor, porem o comando esta rodando a mais de 36horas e não termina.

    Tb coloquei para cancelar a query q estava rodando. Gostaria de Saber se eu reininciar o servidor por ter risco de corromper o BANCO de dados.

    Obrigado.

     

     

    Segue abaixo o script.

    ALTER TABLE MDADOS.DBO.ENTSAI ADD ENTCODFIS         DECIMAL(4)     DEFAULT '0' NOT NULL

    ALTER TABLE MDADOS.DBO.ENTSAI ADD ENTTOTAL          DECIMAL(11,2)  DEFAULT '0' NOT NULL

    ALTER TABLE MDADOS.DBO.ENTSAI ADD ENTBASEICM        DECIMAL(11,2)  DEFAULT '0' NOT NULL

    ALTER TABLE MDADOS.DBO.ENTSAI ADD ENTVLRICM         DECIMAL(11,2)  DEFAULT '0' NOT NULL

    ALTER TABLE MDADOS.DBO.ENTSAI ADD ENTNBM            DECIMAL(8)     DEFAULT '0' NOT NULL

    ALTER TABLE MDADOS.DBO.ENTSAI ADD ENTCSTPIS         DECIMAL(3)     DEFAULT '0' NOT NULL

    ALTER TABLE MDADOS.DBO.ENTSAI ADD ENTALIQPIS        DECIMAL(7,4)   DEFAULT '0' NOT NULL

    ALTER TABLE MDADOS.DBO.ENTSAI ADD ENTALIQCOFINS     DECIMAL(7,4)   DEFAULT '0' NOT NULL

    ALTER TABLE MDADOS.DBO.ENTSAI ADD ENTVLRPIS         DECIMAL(10,2)  DEFAULT '0' NOT NULL

    ALTER TABLE MDADOS.DBO.ENTSAI ADD ENTVLRCOFINS      DECIMAL(10,2)  DEFAULT '0' NOT NULL

    ALTER TABLE MDADOS.DBO.ENTSAI ADD ENTVLRISENTO      DECIMAL(10,2)  DEFAULT '0' NOT NULL

    ALTER TABLE MDADOS.DBO.ENTSAI ADD ENTVLROUTRAS      DECIMAL(10,2)  DEFAULT '0' NOT NULL

    • Movido Gustavo Maia Aguiar terça-feira, 10 de janeiro de 2012 12:46 (De:SQL Server - Desenvolvimento Geral)
    terça-feira, 10 de janeiro de 2012 10:27

Todas as Respostas

  • Amigo, você não precisa reiniciar o servidor, basta você da um kill no processo. Agora seria bom você ter um backup do banco antes de fazer este tipo de operação

    na parte inferior da janela aonde você digitou a consulta, deverá constar o ID de sessão entre parênteses ao lado do nome do banco de dados. anote este número

    abra uma nova janela e digite sp_who2 e veja se para aquele SPID, se o processo não está bloqueado. 

    se for o caso, digite KILL e o número de sessão, isso irá matar o processo.


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Twitter @Olavooneto
    Se for útil marque como resposta e faça um Developer feliz :)
    terça-feira, 10 de janeiro de 2012 12:32
  • Bom Dia,

    Toda vez que você adiciona uma nova coluna NOT NULL com um valor DEFAULT, o SQL Server (e os bancos de dados em geral), terão de adicionar a coluna nos metadados, ler todos os dados e recriar todas as páginas contemplando o valor da nova coluna. Como a tabela foi praticamente recriada, é esperado um aumento significativo no log de transações.

    Analisando o seu script e o fato de que você está fazendo isso 12 vezes, o mesmo processo será executado 12 vezes incorrendo em uso intenso de CPU, Memória e I/O. Cancelar o script normalmente não é uma boa idéia, pois, o banco terá de fazer rollback de tudo e aí você pode gastar muitos recursos além do que é um risco em potencial (se o log de transações estourar durante um rollback desses você pode ter sérios problemas).

    O que eu recomendaria era o seguinte:

    - Crie uma tabela vazia com todas as colunas
    - Renomeie a tabela antiga para impedir o acesso
    - Migre os dados da tabela antiga para a nova
    - Certifique-se de ter criado todos os índices, triggers e relacionamentos necessários
    - Renomeie a nova para o nome que a aplicação requer

    Adicionalmente, colunas do tipo DECIMAL não precisam de aspas para especificar valores. O correto seria DEFAULT 0 e não DEFAULT '0'

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos: http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível
    terça-feira, 10 de janeiro de 2012 12:33
  • Obrigado pelas instruções Olavo.

    executei o sp_who2 esta assim o registro daquela sessão.

    54   SUSPENDED                     adminsql L01-BD        .   MDADOS KILLED/ROLLBACK 26678968 209444634 01/08 14:56:23 Microsoft SQL Server Management Studio Express - Query 54   0    

     

    sera q pode fechar a query pois ela esta cancelando ainda?

    terça-feira, 10 de janeiro de 2012 13:09
  • Obrigado pelas dicas Gustavo...

    Teria algum jeito de fazer esses campos para criar de uma vez os 12 campos ?

    terça-feira, 10 de janeiro de 2012 13:10