Erro de tempo limite expirado ao usar o assistente de cópia do banco de dados

8

A Microsoft me fez acreditar que o Assistente para Cópia de Banco de Dados do SQL Server 2012 é a maneira mais ideal de copiar um banco de dados do SQL Server 2000 para o SQL Server 2012. Depois de algumas horas, consegui superar alguns problemas e importar pequenos para bancos de dados SQL Server 2000 de tamanho médio no SQL Server 2012.

No entanto, o assistente falha constantemente em um banco de dados de 30 GB com estes erros:

Mensagem: Ocorreu um erro ao transferir dados. Consulte a exceção interna para obter detalhes.
StackTrace: em Microsoft.SqlServer.Management.Smo.Transfer.TransferData ()
em Microsoft.SqlServer.Dts.Tasks.TransferObjectsTask.TransferObjectsTask.TransferDatabasesUsingSMOTransfer ()
InnerException -> Tempo limite expirado. O período de tempo limite decorrido antes da conclusão da operação ou o servidor não está respondendo.
CREATE DATABASE falhou. Alguns nomes de arquivo listados não puderam ser criados. Verifique os erros relacionados.
StackTrace:
em System.Data.SqlClient.SqlConnection.OnError (exceção SqlException, Boolean breakConnection)
em System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning ()
em System.Data.SqlClient.TdsParser.Run (RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)

Eu verifiquei duas vezes, não é um caminho de arquivo, permissão ou problema de espaço em disco. Penso que o CREATE DATABASEpasso demora cerca de 2 minutos e o assistente assume que a operação expirou. Criei manualmente um banco de dados vazio com o mesmo caminho e tamanho de arquivo usando SQL, que funcionou. Curiosamente, uma cópia do banco de dados de 1 GB falhou com os mesmos erros e teve êxito na segunda tentativa.

Por favor ajude.

Salman A
fonte
Por favor, veja a resposta de Aarons. Essa é uma maneira muito mais eficiente para o seu banco de dados
Ali Razeghi 18/12/12

Respostas:

7

Um caminho muito mais eficiente do que mexer com esse assistente seria:

  1. Faça um backup completo do seu banco de dados 2000.
  2. Restaure-o para uma instância do SQL 2005, 2008 ou 2008 R2, todos com suporte para bancos de dados 2000. Ainda é possível obter a edição de avaliação do 2008 R2 aqui , se você não tiver nenhuma instância aplicável em vigor. Observe que o Express não funcionará, pois possui uma limitação de arquivo de dados de 4 GB / 10 GB, dependendo da versão.
  3. Altere o nível de compatibilidade para algo acima de 80 (90 ou 100, dependendo de você ter usado 2005 ou 2008/2008 R2) ALTER DATABASE.
  4. Faça um backup completo desse banco de dados depois que ele não estiver mais no modo de compatibilidade 80.
  5. Restaure esse novo backup na sua instância do SQL Server 2012.
  6. Altere o nível de compatibilidade para 110 e atualize as estatísticas.
  7. TESTE .
Aaron Bertrand
fonte
Eu tenho o SQL 2012 instalado, tudo bem se eu instalar o SQL 2008 R2 na mesma máquina? A ordem da instalação é importante?
Salman A
Sim, você pode instalar o 2008 R2 na mesma máquina, mas para simplificar, basta instalar o mecanismo de banco de dados, sem ferramentas de cliente e tudo mais. Você pode desinstalar a instância do 2008 R2 depois de remover todos os seus bancos de dados 2000.
Aaron Bertrand
11
Eu recomendaria não instalar versões que você não precisa nas máquinas de produção, mas não, isso não interfere, mas você pode receber alguns avisos sobre componentes compartilhados. Como regra geral, porém, nunca instale nada no prod que você não precise no prod. Aumenta a área de superfície de segurança para ataques, introduz bugs e aumenta o gerenciamento.
Ali Razeghi
11
@ Ali, como você sabe que a máquina de que Salman está falando é uma máquina de produção? Ou que não é a única máquina disponível?
Aaron Bertrand
É por isso que eu especifiquei 'on prod' em vez de apenas 'don't do it' e respondi 'mas não, isso não interfere'. No que diz respeito apenas à máquina disponível, você pode instalá-los em computadores de mesa e seu banco de dados tem 30 GB, conforme indicado. Computadores com 30 GB de armazenamento gratuito são bastante comuns, mas, novamente, foram apenas conselhos, não é difícil "esta é a única resposta". Eu olhei para o blog dele e ele é muito focado no desenvolvedor, o que significa que há uma grande probabilidade de ele não se envolver com as melhores práticas de operações, tanto quanto um cara de operações. Eu acho que é um bom conselho, estou surpreso com quantas pessoas desenvolvem prod quando não precisam.
Ali Razeghi