Partilhar via


Atualizar um banco de dados usando desanexar e anexar (Transact-SQL)

Aplica-se a:SQL Server

Este tópico descreve como usar operações de desanexação e anexação para atualizar um banco de dados no SQL Server. Depois de ser anexado ao SQL Server, o banco de dados fica disponível imediatamente e é atualizado automaticamente. Isso impede que o banco de dados seja usado com uma versão mais antiga do Mecanismo de Banco de Dados. No entanto, a atualização de metadados não afeta o nível de compatibilidade do banco de dados. Consulte mais informações em Nível de compatibilidade de banco de dados após a atualização mais adiante neste tópico.

Neste tópico

Antes de começar

Limitações e Restrições

  • Os bancos de dados do sistema não podem ser anexados.

  • Anexar e desanexar desabilite o encadeamento de propriedade entre bancos de dados para o banco de dados definindo sua opção de encadeamento de propriedade entre bancos de dados como 0. Para obter informações sobre como habilitar o encadeamento, consulte opção de configuração do servidor de encadeamento de propriedade entre bancos de dados.

  • Ao anexar um banco de dados replicado que foi copiado em vez de desanexado:

    • Se você anexar o banco de dados a uma versão atualizada da mesma instância do servidor, deverá executar sp_vupgrade_replication para atualizar a replicação após a conclusão da operação de anexação. Para obter mais informações, consulte sp_vupgrade_replication (Transact-SQL).

    • Se você anexar o banco de dados a uma instância de servidor diferente (independentemente da versão), deverá executar sp_removedbreplication para remover a replicação após a conclusão da operação de anexação. Para obter mais informações, consulte sp_removedbreplication (Transact-SQL).

Recomendações

Recomendamos que você não anexe ou restaure bancos de dados de fontes desconhecidas ou não confiáveis. Esses bancos de dados podem conter código mal-intencionado que pode executar código Transact-SQL não intencional ou causar erros modificando o esquema ou a estrutura física do banco de dados. Antes de usar um banco de dados de uma fonte desconhecida ou não confiável, execute DBCC CHECKDB no banco de dados em um servidor que não seja de produção e também examine o código, como procedimentos armazenados ou outro código definido pelo usuário, no banco de dados.

Para atualizar um banco de dados usando Desanexar e Anexar

  1. Desanexe o banco de dados. Para obter mais informações, consulte Desanexar um banco de dados.

  2. Opcionalmente, mova o arquivo ou arquivos de banco de dados desanexados e o(s) arquivo(s) de log.

    Você deve mover os arquivos de log junto com os arquivos de dados, mesmo que pretenda criar novos arquivos de log. Em alguns casos, reanexar um banco de dados requer seus arquivos de log existentes. Portanto, sempre mantenha todos os arquivos de log desanexados até que o banco de dados tenha sido anexado com êxito sem eles.

    Observação

    Se você tentar anexar o banco de dados sem especificar o arquivo de log, a operação de anexação procurará o arquivo de log em seu local original. Se a cópia original do log ainda existir nesse local, essa cópia será anexada. Para evitar o uso do arquivo de log original, especifique o caminho do novo arquivo de log ou remova a cópia original do arquivo de log (depois de copiá-lo para o novo local).

  3. Anexe os arquivos copiados à instância do SQL Server. Para obter mais informações, consulte Anexar um Banco de Dados.

Exemplo

O exemplo a seguir atualiza uma cópia de um banco de dados de uma versão anterior do SQL Server. As instruções Transact-SQL são executadas em uma janela do Editor de Consultas conectada à instância do servidor à qual está anexada.

  1. Desanexe o banco de dados executando as seguintes instruções Transact-SQL:

    USE master;  
    GO  
    EXEC sp_detach_db @dbname = N'MyDatabase';  
    GO  
    
  2. Usando o método de sua escolha, copie os dados e arquivos de log para o novo local.

    Importante

    Para um banco de dados de produção, de preferência coloque o banco de dados e o log de transações em discos separados. Eles geram diferentes requisitos de E/S e crescimento de arquivos e é considerado uma prática recomendada mantê-los separados.

    Para copiar arquivos pela rede para um disco em um computador remoto, use o nome UNC (convenção universal de nomenclatura) do local remoto. Um nome UNC assume a forma \\Servername\Sharename\Path\Filename. Assim como acontece com a gravação de arquivos no disco rígido local, as permissões apropriadas necessárias para ler ou gravar em um arquivo no disco remoto devem ser concedidas à conta de usuário usada pela instância do SQL Server.

  3. Anexe o banco de dados movido e, opcionalmente, seu log executando a seguinte instrução Transact-SQL:

    USE master;  
    GO  
    CREATE DATABASE MyDatabase   
        ON (FILENAME = 'C:\MySQLServer\MyDatabase.mdf'),  
        (FILENAME = 'C:\MySQLServer\Database.ldf')  
        FOR ATTACH;  
    GO  
    

    No SQL Server Management Studio, um banco de dados recém-anexado não é imediatamente visível no Pesquisador de Objetos. Para exibir o banco de dados, no Explorador de Objetos, clique em Exibir, e, em seguida, Atualizar. Quando o nó Bancos de Dados é expandido no Explorador de Objetos, o banco de dados recém-anexado agora aparece na lista de bancos de dados.

Acompanhamento: Após atualizar um banco de dados do SQL Server

Se o banco de dados tiver índices de texto completo, o processo de atualização os importará, redefinirá ou reconstruirá, dependendo da configuração da propriedade do servidor upgrade_option. Se a opção de atualização estiver definida para importar (upgrade_option = 2) ou reconstruir (upgrade_option = 0), os índices de texto completo não estarão disponíveis durante a atualização. Dependendo da quantidade de dados que estão sendo indexados, a importação pode levar várias horas e a reconstrução pode levar até dez vezes mais. Observe também que, quando a opção de atualização é definida para importar, os índices de texto completo associados são reconstruídos se um catálogo de texto completo não estiver disponível. Para alterar a configuração da propriedade do servidor upgrade_option, use sp_fulltext_service.

Nível de compatibilidade do banco de dados após a atualização

Após a atualização, o nível de compatibilidade do banco de dados permanece no nível de compatibilidade antes da atualização, a menos que o nível de compatibilidade anterior não seja suportado na nova versão. Nesse caso, o nível de compatibilidade do banco de dados atualizado é definido como o nível de compatibilidade suportado mais baixo.

Por exemplo, se você anexar um banco de dados que era de nível de compatibilidade 90 antes de anexá-lo a uma instância do SQL Server 2019 (15.x), após a atualização, o nível de compatibilidade será definido como 100, que é o nível de compatibilidade com suporte mais baixo no SQL Server 2019 (15.x). Para obter mais informações, consulte ALTER DATABASE Compatibility Level (Transact-SQL).

Gerenciando metadados na instância do servidor atualizado

Quando você anexa um banco de dados a outra instância do servidor, para fornecer uma experiência consistente aos usuários e aplicativos, talvez seja necessário recriar alguns ou todos os metadados do banco de dados, como logons, trabalhos e permissões, na outra instância do servidor. Para obter mais informações, consulte gerenciar metadados ao disponibilizar um banco de dados em outra instância do servidor (SQL Server).

A Chave Mestra de Serviço e a Criptografia de Chave Mestra de Banco de Dados mudam de 3DES para AES

O SQL Server 2012 (11.x) e versões superiores usam o algoritmo de criptografia AES para proteger a chave mestra de serviço (SMK) e a chave mestra de banco de dados (DMK). AES é um algoritmo de encriptação mais recente do que o 3DES usado em versões anteriores. Quando um banco de dados é anexado ou restaurado pela primeira vez em uma nova instância do SQL Server, uma cópia da chave mestra do banco de dados (criptografada pela chave mestra de serviço) ainda não é armazenada no servidor. Você deve usar a instrução OPEN MASTER KEY para descriptografar a chave mestra do banco de dados (DMK). Uma vez que o DMK tenha sido descriptografado, você tem a opção de habilitar a descriptografia automática no futuro usando a instrução ALTER MASTER KEY REGENERATE para provisionar o servidor com uma cópia do DMK, criptografada com a chave mestra de serviço (SMK). Quando um banco de dados foi atualizado de uma versão anterior, o DMK deve ser regenerado para usar o algoritmo AES mais recente. Para obter mais informações sobre como regenerar o DMK, consulte ALTER MASTER KEY (Transact-SQL). O tempo necessário para regenerar a chave DMK para atualizar para AES depende do número de objetos protegidos pelo DMK. Regenerar a chave DMK para atualizar para AES só é necessário uma vez e não tem impacto em futuras regenerações como parte de uma estratégia de rotação de chaves.