Perguntas que não são do DBA: como copiar / mover indevidamente uma instância do SQL Server para outro servidor por meio de backup / restauração?

11

Acabamos de ter um novo servidor, por isso preciso copiar a instância existente do SQL Server 2008 da antiga caixa de banco de dados.

Normalmente, faço isso copiando arquivos .mdf e de log e anexando-os, mas não consigo tirar o dbs do modo offline, pois eles são usados ​​24/7, por isso fiz backup dos bancos de dados e os restaurei no novo máquina. No entanto, acabei com alguns problemas, um deles relacionado a usuários órfãos . Então, o que estou procurando é um processo à prova de falhas para mover tudo com o mínimo de confusão / incômodo / dor de cabeça. Eu sou um desenvolvedor .Net com uma quantidade razoável de SQL, mas o funcionamento interno do SQL Server é um grande mistério para mim e acho a documentação do MS difícil de rastrear.

Por favor ajude.

5arx
fonte
1
Você pode encontrar algumas idéias nesta pergunta anterior . Mas as respostas anteriores são bastante explicativas. Eu acho que a melhor idéia seria estabelecer um espelhamento e interromper depois ou um envio de log (pode ser feito apenas do assistente) para todos os dbs e apenas restaurar ainda mais os backups de log necessários, mas se você diz que não é um DBA , provavelmente o método de backups é melhor.
Marian

Respostas:

10

Se você não pode colocar os bancos de dados offline, é necessário fazer backup / restauração. Eu sugeriria o seguinte:

  1. Instale o SQL 2008 na nova caixa, usando a mesma estrutura de arquivo da caixa antiga para arquivos MDF e LDF.
  2. Faça backups de todos os bancos de dados na caixa antiga.
  3. Restaure o mestre da caixa antiga para a nova caixa com o SQL iniciado no modo de usuário único. Restaurar método mestre
  4. Restaure cada banco de dados da caixa antiga para a nova caixa com a opção NORECOVERY para poder aplicar backups futuros de Diff ou T-log futuros.
  5. Restaure o msdb da caixa antiga para a nova caixa.

Se você criar e configurar a nova caixa para se parecer exatamente com a antiga, terá um mínimo de barulho.

Não tenho idéia do tamanho dos bancos de dados, portanto esse método pode demorar muito. A coisa mais fácil a fazer seria desligar a caixa antiga e copiar os arquivos MDF e LDF e, depois de restaurar o mestre, você só precisaria reiniciar o SQL para ter seus bancos de dados online. Mas você declarou que não é uma opção, pois os bancos de dados não podem ficar offline.

SQLRockstar
fonte
3
Não se esqueça de copiar quaisquer alterações de dados feitas depois de fazer os backups. Você pode fazer um backup diff ou tlog e aplicá-los ao novo servidor após a instalação, mas antes de mudar.
Eric Humphrey - lotsahelp
bom ponto, esqueci de mencionar isso também. talvez eu deva incluir uma configuração de espelho db, que poderia ser quebrada depois?
SQLRockstar
1
Eu imagino que alguém já tenha um artigo extenso sobre as diferentes maneiras de migrar servidores. Além disso, aqui está um artigo sobre a transferência de logins para um novo servidor: support.microsoft.com/kb/246133
Eric Humphrey - lotsahelp
8

Você menciona a operação 24 horas por dia, 7 dias por semana, portanto, a melhor maneira de fazer isso é criar um espelho de banco de dados no novo sistema, basta alternar com o mínimo - talvez zero, dependendo da estrutura do aplicativo - tempo de inatividade usando um cliente- redirecionamento lateral. Os passos básicos são:

  1. Verifique se o banco de dados principal está em execução no modo de recuperação COMPLETO .
  2. Faça backup do primário e restaure-o no espelho WITH NORECOVERY
  3. Crie "terminais" nos dois servidores e garanta a conectividade (por exemplo, regras de firewall), configurando a porta e o endereço IP corretamente), por exemplo:

    CREATE ENDPOINT endpoint1
    STATE=STARTED AS TCP(LISTENER_PORT = 5222, LISTENER_IP = 192.168.1.5) 
    FOR DATA_MIRRORING(ROLE = PARTNER, AUTHENTICATION = WINDOWS NEGOTIATE, ENCRYPTION = REQUIRED ALGORITHM RC4)
    
  4. Configure o espelhamento no espelho, apontando para o principal:

    ALTER DATABASE GaiusMirrorDB SET PARTNER = 'TCP://192.168.1.5:5222'
    go
    EXEC sys.sp_dbmmonitoraddmonitoring
    go
    
  5. E, principalmente, apontando para o espelho (apenas um nome de banco de dados e endereço IP diferentes.

  6. Então, quando chegar a hora, basta passar o primário para o espelho:

    ALTER DATABASE GaiusDB SET PARTNER FAILOVER
    GO
    

Nota: Estou assumindo que esses dois servidores estejam na mesma rede, portanto, não há problema em operar no modo síncrono. Se este for um link WAN, use o modo assíncrono.

Gaius
fonte