Restaurar banco de dados do arquivo de backup de versão / edição diferente

11

Li que é possível restaurar um banco de dados no SQL Server, desde que você esteja restaurando de uma versão mais antiga para outra, por motivos de compatibilidade com versões anteriores.

Alguém sabe de imediato se você pode restaurar um banco de dados a partir de um arquivo * .bak para diferentes edições do SQL Server? Estamos movendo um banco de dados muito grande via FTP que levará alguns dias, portanto, preferimos fazer isso apenas uma vez. Se ninguém responder no momento em que transferirmos o banco de dados via FTP, obviamente tentaremos isso e veremos se funciona testando e responderemos à nossa própria pergunta.

Abaixo está uma consulta para obter detalhes da versão do SQL Server. O productversionestá no formato {major revision}.{minor revision}.{release revision}.{build number}. No meu caso, o {release revision}valor tem 5500para a origem e 5512o destino. Então isso parece bem. No entanto, o editioné diferente.

Inquerir:

SELECT 
  SERVERPROPERTY('productversion'), 
  SERVERPROPERTY('productlevel'), 
  SERVERPROPERTY('edition')

Banco de dados de origem:

10.0.5500.0
SP3
Developer Edition (64-bit)

Banco de dados de destino:

10.0.5512.0
SP3
Enterprise Edition (64-bit)
MacGyver
fonte
Que tal restaurar um arquivo de backup do SQL Server 2012 Business Intelligence Edition para uma instância de desenvolvedor?
sdg320

Respostas:

15

De desenvolvedor para empresa, tudo bem, verifique se, se você estiver usando o licenciamento de processador, possui licenças no servidor de destino para cobrir todas as CPUs. E não basta apenas escondê-los do SQL; se eles estão fisicamente conectados à máquina, você é responsável por eles.

Além disso, quando você passa de uma versão inferior para uma versão superior, sua versão do banco de dados aumentará. Existem alguns cenários em que isso pode ser problemático - por exemplo, se você estiver usando o suporte de 15.000 partições em uma versão específica de 2008, não funcionará quando você atualizar para uma versão específica do 2008 R2. Você também pode confiar em otimizações (e existem soluções alternativas) que são realmente erros em uma versão mais antiga, mas que foram corrigidas na nova versão, e isso pode levar a um desempenho pior. Também é vital revisar todos os sinalizadores de rastreamento em uso na origem e determinar se eles também devem ser ativados no destino. Não importa trabalhos, logins etc.

Claro que você não pode voltar atrás. Eu nunca tentei um downgrade menor como 10.0.5512 -> 10.0.5500, mas definitivamente não é possível entrar no service pack ou na versão. Portanto, se você tiver um banco de dados de 2012 na sua instância do Developer Edition e quiser colocá-lo na sua instância de 2008 em produção, terá seu trabalho preparado para você (veja aqui e aqui ) - especialmente se você tiver usado os recursos de 2012 .


Mas, para cobrir outros casos que possam levar as pessoas a essa pergunta (por exemplo, alguém quer ir de Desenvolvedor -> Padrão ou Empresa -> Express ou o que você tem) ...

Existem outras edições -> atualizações de edição que não vão tão bem, por exemplo, do desenvolvedor -> Express, se você usou algum recurso que não é suportado no Express (e o mesmo vale para qualquer edição que não seja a Enterprise). Alguns exemplos de recursos que você não poderá usar em edições de nível inferior (nesse caso, a restauração desaparecerá no momento em que tentar colocar o banco de dados online):

  • Particionamento
  • Change Data Capture
  • Compressão de dados
  • Criptografia de dados transparente

Não sei se há uma maneira de dizer isso diretamente do arquivo .BAK (tenho certeza de que há alguma mágica que pode ser extraída dos cabeçalhos de página em algum lugar ou se você tem um fim de semana para gravar com um editor hexadecimal) , mas enquanto o banco de dados ainda estiver intacto na instância de origem, você sempre poderá fazer o seguinte para verificar se está usando algum recurso disponível por causa do SKU em que está:

SELECT feature_name FROM sys.dm_db_persisted_sku_features;

Não tenho certeza se a Auditoria do SQL Server deve estar nessa lista - a exclusividade de edição desse recurso foi alterada, portanto, provavelmente depende do que você está fazendo com ele. Há outras coisas que você pode estar usando, mas não aparece na DMV (algumas porque estão no seu código, que a DMV não analisa) e outras porque seu banco de dados depende de coisas externas, como o SQL Server Agent , Service Broker, etc.):

  • espelhamento
  • certas formas de replicação
  • log de envio
  • instantâneos de banco de dados
  • indexação online
  • visualizações particionadas distribuídas atualizáveis
  • compressão de backup
  • gerenciamento baseado em políticas
  • guias de plano
  • correio do banco de dados
  • planos de manutenção
  • pesquisa de texto completo

Também há casos em que você não poderá ir do Developer para o Express devido às limitações de tamanho do arquivo (os bancos de dados do Express estão limitados a 10 GB no tamanho total do arquivo de dados).

É claro que pode haver outras dicas sobre as quais você não será avisado - elas não impedirão a migração, mas podem levar a um desempenho muito diferente no destino. Exemplos:

  1. Limitações diferentes de memória / CPU na edição de destino (ou mesmo o sistema operacional subjacente no destino). Isso afetou muitas pessoas que passaram do 2008 R2 Enterprise para o 2012 Enterprise (CAL), onde o serviço é artificialmente limitado aos 20 primeiros núcleos). Isso pode levar a diferenças diretas de desempenho (memória insuficiente para satisfazer uma consulta, por exemplo, ou desempenho de consultas paralelas muito mais lentas); os mais sutis incluem escolhas de planos feitas devido aos diferentes hardwares subjacentes.
  2. A dependência de recursos como correspondência de exibição indexada na fonte não será automaticamente respeitada no destino sem alterar o código-fonte a ser usado NOEXPAND. E você pode nem estar ciente de que esse recurso é o motivo pelo qual suas consultas diminuem de repente.
  3. O mesmo vale para operações de índice paralelo e, provavelmente, uma série de outras otimizações que não vêm à mente neste momento (felizmente, trabalho quase exclusivamente no espaço Enterprise, por isso não preciso me preocupar com as limitações das edições mais baixas na maioria dos casos. )

ATUALIZAÇÃO com base nesta duplicata :

Pode haver casos em que você tenta restaurar um banco de dados de uma determinada edição para uma edição menor (mesmo na mesma versão) e obtém erros que são menos que úteis :

Falha na restauração do servidor 'server \ instance'.
RESTORE não pôde iniciar o banco de dados 'nome do banco de dados'.

Isso não é muito intuitivo. No entanto, se você olhar mais profundamente nos logs de eventos do SQL Server, verá erros mais úteis (apenas um exemplo):

O banco de dados 'nome do banco de dados' não pode ser iniciado porque parte da funcionalidade do banco de dados não está disponível na edição atual do SQL Server.
O banco de dados 'nome do banco de dados' não pode ser iniciado nesta edição do SQL Server porque contém uma função de partição '_dta_pf__9987'. Somente a edição Enterprise do SQL Server oferece suporte a funções de partição.

Agora, isso não é bem verdade - você também pode restaurar a Evaluation Edition ou Developer Edition, mas isso não vem ao caso. Para restaurar esse banco de dados, você basicamente tem duas opções:

  1. Restaure para uma edição apropriada do SQL Server - o que significa localizar ou instalar uma nova instância.
  2. Restaure o backup no servidor de origem como um novo banco de dados com um nome diferente, remova todo e qualquer recurso da Empresa, faça backup do banco de dados novamente e restaure-o na edição menor. (Nesse caso específico, deixei o nome da função de partição na mensagem de erro, porque, de qualquer maneira, isso parece descartável - ela foi criada pelo Orientador de Otimização do Mecanismo de Banco de Dados e pode ter sido feita por alguém que não conseguiu sabem o que estavam fazendo. Isso nem sempre é o caso.)

Uma variação em (2) seria apenas remover o particionamento e outros recursos no banco de dados de origem e fazer outro backup. Mas se não está quebrado ...

Aaron Bertrand
fonte
3

Developer e Enterprise são o mesmo software, apenas com contratos de licenciamento diferentes.

Você deve ficar bem ao restaurar esse banco de dados ao seu destino.

Mark Henderson
fonte