none
Alteração de tipo de campo em tabela grande RRS feed

  • Pergunta

  • Olá caros colegas.

    Estou precisando alterar um campo de numeric(15,2) para numeric(15,4) da maior tabela (com 33% do tamanho da base) de um banco de dados de mais de 400gb de tamanho. O banco tem mirroring e o recovery model é full. Quando tentei fazer a alteração, o log cresceu tanto que não deixou espaço nos discos onde estão os arquivos de log, travando o banco de dados.

    Tem alguma forma de contornar isso?

    Desde já agradeço a ajuda.


    SMRBKP

    sexta-feira, 21 de setembro de 2012 17:40

Todas as Respostas

  • SmrBKP,

    Cara se você não estivesse utilizando Mirroring, bastaria alterar o Recovery Model para Simple, mas neste caso, o mais indicado seria você parar o Mirroring, fazer as alterações e depois voltar o Mirroring.

    Mas por outro lado a sobrecarga de processamento será muito grande para o servidor que vai receber os dados espelhados.

    Talvez uma possibilidade seria criar uma nova tabela com a estrutura correta, e movimentar os registros de uma tabela para outro de forma controlada, definindo intervalos de dados para serem movimentados, após isso excluir a tabela antiga.

    Outro cenário copiar esta tabela para uma outra base de dados com Recovery Model Simple e sem Database Mirroring ativo, realizar todos os procedimentos, para o Mirroring, mudar o recovery Model, excluir a tabela na base de origem e copiar esta nova tabela para esta base.

    Ou então parar somente o Mirroring, excluir a table e copiar a outra.

    Mas vale ressaltar mais uma vez, você terá sobrecarga de processamento no momento em que o Mirror foi sincronizado.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    sexta-feira, 21 de setembro de 2012 17:49
    Moderador
  • Junior, obrigado pela resposta.

    Sobre a criação das tabelas, como está em produção, não vejo isso como viável. Para alterar o modo para simple, eu teria que excluir o mirroring não é isso?

    Tem outra coisa que eu esqueci de citar. São dois servidores. O servidor que tem a base principal tem 500gb na partição do log. O do mirror tem 298gb. No mirror eu tenho uma base de treino restaurada a a partir do back up full da base de produção. Eu fiz o teste nele.

    Será que se eu executar no de produção (quem tem bem mais espaço na partição do log) ele vai crescer do mesmo jeito no servidor que tem o mirror?

    Não sei se a minha dúvida está sendo clara.


    SMRBKP

    sexta-feira, 21 de setembro de 2012 20:56