none
Alterar campo IMAGE para varbinary(max) RRS feed

  • Pergunta

  • E ai pessoal...tudo certo???

    Gostaria de compartilhar um "problema" com vocês...

    Tenho uma tabela com um campo IMAGE e gostaria de alterar para varbinay(max) por motivos que já sabemos...

    O problema é que essa tabela tem 90GB de dados (considerando somente a coluna image) e 3839584  linhas.

    Imagino eu, que na hora de realizar o alter table o impacto não será tão traumático...visto que é uma conversão implicita...

    O que vcs acham? será que demoraria muita? corre o risco de estourar o tlog do meu database? Existe a possibilidade de perder os dados na conversão??

    Desde já agradeço!

    Daniel


    Daniel

    quarta-feira, 22 de fevereiro de 2012 16:42

Respostas

  • Daniel,

        Concordo com você que a conversão implícita facilita as coisas no momento de mudar a tabela, entretanto, algumas coisas devem ser levadas em consideração:

        Dê uma olhada no tópico: Data Type Convertions (Database Engine) no BOL que trás algumas informações adicionais referente ao truncamento de valores de tamanhos diferentes. No seu caso, não creio que seja um problema já que image é menor que varbinary(max), mas, enfim, acho importante validar todos os pontos necessários.

        O ponto importante a analisar no caso de uma conversão é a quantidade de dados que você possui com imagens, isso por si só poderia gastar um bom tempo, devido à sua quantidade de registros... De qualquer forma, estourar o Tlog é meio improvável (desde que ele não tenha um tamanho fixo), mas estourar o seu espaço em disco pode acontecer, basta que você tenha pouco espaço disponível. Você pode ainda apagar os índices desta tabela para garantir mais espaço na sua base e recriá-los depois de ter mudado.

        Quanto à perda de dados, acho improvável, já que o SQL Server trabalha por default no modo Autocommit para o controle de transações, ou seja, se o comando foi executado com sucesso, o commit será feito e se alguma coisa acontecer, o rollback será executado. Claro que ainda pode acontecer que o rollback ainda precise de espaço em disco, que talvez você nao tenha. NEste caso o SQL irá emitir um erro 1105 e exigirá sua ação em liberar espaço em disco para a transação. Via de regra, eu nunca iniciaria essa alteração se eu nao tivesse (com o exemplo do seu caso real) no mínimo mais 90Gb disponível para a mudança.


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    • Marcado como Resposta Daniel Zaitz sexta-feira, 24 de fevereiro de 2012 21:50
    quinta-feira, 23 de fevereiro de 2012 05:52
    Moderador