Atualizar um banco de dados usando desanexação e anexação (Transact-SQL)Upgrade a database using detach and attach (Transact-SQL)

APLICA-SE A: simSQL Server nãoBanco de Dados SQL do Azure nãoAzure Synapse Analytics (SQL DW) nãoParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Este tópico descreve como usar operações de desanexação e anexação para atualizar um banco de dados do SQL ServerSQL Server.This topic describes how to use detach and attach operations to upgrade a database in SQL ServerSQL Server. Depois de ser anexado ao SQL ServerSQL Server, o banco de dados estará disponível imediatamente e, em seguida, será atualizado.After being attached to SQL ServerSQL Server, the database is available immediately and is automatically upgraded. Isso impede que o banco de dados seja usado com uma versão anterior da Mecanismo de Banco de DadosDatabase Engine.This prevents the database from being used with an older version of the Mecanismo de Banco de DadosDatabase Engine. No entanto, a atualização de metadados não afeta a configuração de nível de compatibilidade do banco de dados de um banco de dados.However, metadata upgrade does not affect the database compatibility level setting of a database. Veja mais informações em Nível de compatibilidade do banco de dados após a atualização mais adiante neste tópico.See more information in Database Compatibility Level After Upgrade later in this topic.

Neste tópicoIn this topic

Antes de começarBefore You Begin

Limitações e restriçõesLimitations and Restrictions

  • Os bancos de dados de sistema não podem ser anexados.The system databases cannot be attached.

  • Anexe e desanexe a desabilitação do encadeamento de propriedades de bancos de dados ao definir sua opção encadeamento de propriedades de bancos de dados como 0.Attach and detach disable cross-database ownership chaining for the database by setting its cross db ownership chaining option to 0. Para obter informações sobre como habilitar o encadeamento, veja Opção cross db ownership chaining de configuração de servidor.For information about enabling chaining, see cross db ownership chaining Server Configuration Option.

  • Quando anexar um banco de dados replicado que foi copiado em vez de desanexado:When attaching a replicated database that was copied instead of detached:

    • Se você anexar o banco de dados a uma versão atualizada da mesma instância do servidor, será necessário executar sp_vupgrade_replication para atualizar a replicação após a conclusão da operação de anexação.If you attach the database to an upgraded version of the same server instance, you must execute sp_vupgrade_replication to upgrade replication after the attach operation finishes. Para obter mais informações, veja sp_vupgrade_replication (Transact-SQL).For more information, see 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.If you attach the database to a different server instance (regardless of version), you must execute sp_removedbreplication to remove replication after the attach operation finishes. Para obter mais informações, veja sp_removedbreplication (Transact-SQL).For more information, see sp_removedbreplication (Transact-SQL).

RecomendaçõesRecommendations

Não é recomendável anexar ou restaurar bancos de dados de origem desconhecida ou não confiável.We recommend that you do not attach or restore databases from unknown or untrusted sources. Esses bancos de dados podem conter um código mal-intencionado que pode executar um código Transact-SQLTransact-SQL inesperado ou provocar erros modificando o esquema ou a estrutura física do banco de dados.Such databases could contain malicious code that might execute unintended Transact-SQLTransact-SQL code or cause errors by modifying the schema or the physical database structure. Antes de usar um banco de dados de origem desconhecida ou não confiável, execute DBCC CHECKDB no banco de dados, em um servidor que não seja de produção. Além disso, examine o código, como procedimentos armazenados ou outro código definido pelo usuário, no banco de dados.Before you use a database from an unknown or untrusted source, run DBCC CHECKDB on the database on a nonproduction server and also examine the code, such as stored procedures or other user-defined code, in the database.

Para atualizar um banco de dados usando desanexar e anexarTo Upgrade a Database by Using Detach and Attach

  1. Desanexe o banco de dados.Detach the database. Para obter mais informações, veja Desanexar um banco de dados.For more information, see Detach a Database.

  2. Opcionalmente, mova o arquivo ou arquivos de banco de dados desanexados e o arquivo ou arquivos de log.Optionally, move the detached database file or files and the log file or files.

    Você deverá mover os arquivos de log junto com os arquivos de dados, mesmo se pretender criar novos arquivos de log.You should move the log files along with the data files, even if you intend to create new log files. Em alguns casos, reanexar um banco de dados exige seus arquivos de log existentes.In some cases, reattaching a database requires its existing log files. Portanto, mantenha todos os arquivos de log desanexados até que o banco de dados seja anexado com êxito sem eles.Therefore, always keep all the detached log files until the database has been successfully attached without them.

    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.If you try to attach the database without specifying the log file, the attach operation will look for the log file in its original location. Se ainda existir uma cópia original do log nesse local, essa cópia será anexada.If the original copy of the log still exists in that location, that copy is attached. Para evitar a utilização 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á-la para o novo local).To avoid using the original log file, either specify the path of the new log file or remove the original copy of the log file (after copying it to the new location).

  3. Anexe os arquivos copiados à instância do SQL ServerSQL Server.Attach the copied files to the instance of SQL ServerSQL Server. Para obter mais informações, consulte Attach a Database.For more information, see Attach a Database.

ExemploExample

O exemplo a seguir atualiza uma cópia de um banco de dados de uma versão anterior do SQL Server.The following example upgrades a copy of a database from an earlier version of SQL Server. As instruções Transact-SQLTransact-SQL são executadas em uma janela do Editor de Consultas conectada à instância do servidor à qual está anexado.The Transact-SQLTransact-SQL statements are executed in a Query Editor window that is connected to the server instance to which is attached.

  1. Desanexe o banco de dados executando as seguintes instruções Transact-SQLTransact-SQL :Detach the database by executing the following Transact-SQLTransact-SQL statements:

    USE master;  
    GO  
    EXEC sp_detach_db @dbname = N'MyDatabase';  
    GO  
    
  2. Usando o método de sua escolha, copie os arquivos de dados e log no novo local.Using the method of your choice, copy the data and log files to the new location.

    Importante

    Para um banco de dados de produção, preferencialmente coloque o banco de dados e o log de transações em discos separados.For a production database, preferably place the database and transaction log on separate disks. Isso leva a diferentes requisitos de crescimento de arquivo e E/S e é considerado uma melhor prática mantê-los separados.These drive different I/O and file growth requirements and it is considered a best practice to keep them separate.

    Para copiar arquivos pela rede para um disco ou um computador remoto, utilize o nome UNC (Convenção Universal de Nomenclatura) do local remoto.To copy files over the network to a disk on a remote computer, use the universal naming convention (UNC) name of the remote location. Um nome UNC assume a forma \\Servername\Sharename\Path\Filename.A UNC name takes the form \\Servername\Sharename\Path\Filename. Assim como ocorre com a gravação de arquivos no disco rígido local, deverão ser concedidas, à conta do usuário utilizada pela instância do SQL ServerSQL Server, as permissões apropriadas exigidas para ler ou gravar em um arquivo no disco remoto.As with writing files to the local hard disk, the appropriate permissions that are required to read or write to a file on the remote disk must be granted to the user account used by the instance of SQL ServerSQL Server.

  3. Anexe o banco de dados movido e, opcionalmente, seu log executando a seguinte instrução Transact-SQLTransact-SQL :Attach the moved database and, optionally, its log by executing the following Transact-SQLTransact-SQL statement:

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

    No SQL Server Management StudioSQL Server Management Studio, um banco de dados anexado recentemente não fica imediatamente visível no Pesquisador de Objetos.In SQL Server Management StudioSQL Server Management Studio, a newly attached database is not immediately visible in Object Explorer. Para exibir o banco de dados, no Pesquisador de Objetos, clique em Exibir e depois em Atualizar.To view the database, in Object Explorer, click View, and then Refresh. Quando o nó Bancos de Dados for expandido no Pesquisador de Objetos, o banco de dados recentemente anexado será exibido na lista de bancos de dados.When the Databases node is expanded in Object Explorer, the newly attached database now appears in the list of databases.

Acompanhamento: Depois de atualizar um banco de dados do SQL ServerFollow Up: After Upgrading a SQL Server Database

Se o banco de dados tiver índices de texto completo, o processo de atualização importará, redefinirá ou recriará esses índices, dependendo da configuração da propriedade de servidor upgrade_option .If the database has full-text indexes, the upgrade process either imports, resets, or rebuilds them, depending on the setting of the upgrade_option server property. Se a opção de atualização for definida como importar (upgrade_option = 2) ou recriar (upgrade_option = 0), os índices de texto completo permanecerão indisponíveis durante a atualização.If the upgrade option is set to import (upgrade_option = 2) or rebuild (upgrade_option = 0), the full-text indexes will be unavailable during the upgrade. Dependendo da quantidade de dados a serem indexados, a importação pode levar várias horas, e a recriação pode ser até dez vezes mais demorada.Depending the amount of data being indexed, importing can take several hours, and rebuilding can take up to ten times longer. Lembre-se também de que, quando a opção de atualização estiver definida para importar, os índices de texto completo associados serão recriados se um catálogo de texto completo não estiver disponível.Note also that when the upgrade option is set to import, the associated full-text indexes are rebuilt if a full-text catalog is not available. Para alterar a configuração da propriedade de servidor upgrade_option , use sp_fulltext_service.To change the setting of the upgrade_option server property, use sp_fulltext_service.

Nível de compatibilidade do banco de dados após a atualizaçãoDatabase Compatibility Level After Upgrade

Se o nível de compatibilidade de um banco de dados de usuário for 100 ou mais alto antes da atualização, ele permanecerá o mesmo depois da atualização.If the compatibility level of a user database is 100 or higher before upgrade, it remains the same after upgrade. Se o nível de compatibilidade for 90 ou inferior antes da atualização, no banco de dados atualizado, o nível de compatibilidade será definido como 100, que é o nível de compatibilidade mais baixo com suporte no SQL ServerSQL Server.If the compatibility level is 90 before upgrade in the upgraded database, the compatibility level is set to 100, which is the lowest supported compatibility level in SQL ServerSQL Server. Para obter mais informações, veja Nível de compatibilidade de ALTER DATABASE (Transact-SQL).For more information, see ALTER DATABASE Compatibility Level (Transact-SQL).

Gerenciando metadados na instância do servidor atualizadoManaging Metadata on the Upgraded Server Instance

Quando você anexa um banco de dados à outra instância do servidor, para oferecer uma utilização consistente aos usuários e aplicativos, pode ser necessário recriar alguns, ou todos os metadados, para o banco de dados, como logons, trabalhos e permissões, na outra instância do servidor.When you attach a database onto another server instance, to provide a consistent experience to users and applications, you might have to re-create some or all of the metadata for the database, such as logins, jobs, and permissions, on the other server instance. Para obter mais informações, consulte Gerenciar metadados ao disponibilizar um banco de dados em outra instância do servidor (SQL Server).For more information, see Manage Metadata When Making a Database Available on Another Server Instance (SQL Server).

A Chave mestra de serviço e a Criptografia de Chave Mestra de Banco de dados é alterada de 3DES para AESService Master Key and Database Master Key Encryption changes from 3DES to AES

SQL Server 2012 (11.x)SQL Server 2012 (11.x) e versões posteriores usam o algoritmo de criptografia AES para proteger a SMK (chave mestra de serviço) e a DMK (chave mestra de banco de dados).and higher versions uses the AES encryption algorithm to protect the service master key (SMK) and the database master key (DMK). O AES é um algoritmo de criptografia mais novo que o 3DES usado em versões anteriores.AES is a newer encryption algorithm than 3DES used in earlier versions. Quando um banco de dados é anexado ou restaurado pela primeira vez a uma nova instância do SQL ServerSQL Server, uma cópia da chave mestra de banco de dados (criptografada pela chave mestra de serviço) ainda não está armazenada no servidor.When a database is first attached or restored to a new instance of SQL ServerSQL Server, a copy of the database master key (encrypted by the service master key) is not yet stored in the server. Você deve usar a instrução OPEN MASTER KEY para descriptografar a chave mestra do banco de dados (DMK).You must use the OPEN MASTER KEY statement to decrypt the database master key (DMK). Uma vez que a DMK foi descriptografada, você tem a opção de permitir a descriptografia automática futuramente usando a instrução ALTER MASTER KEY REGENERATE para fornecer ao servidor uma cópia da DMK criptografada com a SMK.Once the DMK has been decrypted, you have the option of enabling automatic decryption in the future by using the ALTER MASTER KEY REGENERATE statement to provision the server with a copy of the DMK, encrypted with the service master key (SMK). Quando um banco de dados for atualizado de uma versão anterior, a DMK deverá ser regenerada para usar o algoritmo AES mais recente.When a database has been upgraded from an earlier version, the DMK should be regenerated to use the newer AES algorithm. Para obter mais informações sobre como regenerar a DMK, veja ALTER MASTER KEY (Transact-SQL).For more information about regenerating the DMK, see ALTER MASTER KEY (Transact-SQL). O tempo necessário para regenerar a chave DMK para atualizar o AES depende do número de objetos protegidos pela DMK.The time required to regenerate the DMK key to upgrade to AES depends upon the number of objects protected by the DMK. É necessário regenerar a chave DMK para atualizar o AES somente uma vez, isso não tem impacto sobre regenerações futuras como parte de uma estratégia de rotação de chave.Regenerating the DMK key to upgrade to AES is only necessary once, and has no impact on future regenerations as part of a key rotation strategy.