sp_attach_db (Transact-SQL)sp_attach_db (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

Anexa um banco de dados a um servidor.Attaches a database to a server.

Importante

Este recurso está em modo de manutenção e talvez seja removido em uma versão futura do Microsoft SQL Server.This feature is in maintenance mode and may be removed in a future version of Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam.Avoid using this feature in new development work, and plan to modify applications that currently use this feature. recomendamos que você use criar database_name de banco de dados para anexar em vez disso.We recommend that you use CREATE DATABASE database_name FOR ATTACH instead. Para obter mais informações, consulte CREATE DATABASE (SQL Server Transact-SQL).For more information, see CREATE DATABASE (SQL Server Transact-SQL).

Observação

Para recompilar vários arquivos de log quando um ou mais têm um novo local, use CREATE DATABASE database_name for ATTACH_REBUILD_LOG.To rebuild multiple log files when one or more have a new location, use CREATE DATABASE database_name FOR ATTACH_REBUILD_LOG.

Importante

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.

SintaxeSyntax

  
sp_attach_db [ @dbname= ] 'dbname'  
    , [ @filename1= ] 'filename_n' [ ,...16 ]   

ArgumentosArguments

[ @dbname = ] 'dbnam_ ' é o nome do banco de dados a ser anexado ao servidor.[ @dbname = ] 'dbnam_ ' Is the name of the database to be attached to the server. O nome deve ser exclusivo.The name must be unique. dbname é sysname, com um padrão de NULL.dbname is sysname, with a default of NULL.

[ @filename1 = ] 'filename_n' é o nome físico, incluindo o caminho, de um arquivo de banco de dados.[ @filename1 = ] 'filename_n' Is the physical name, including path, of a database file. filename_n é nvarchar (260) , com um padrão de NULL.filename_n is nvarchar(260), with a default of NULL. Podem ser especificados até 16 nomes de arquivo.Up to 16 file names can be specified. Os nomes de parâmetro começam em @arquivo1 e incrementam para @filename16.The parameter names start at @filename1 and increment to @filename16. A lista de nomes de arquivo deve incluir, pelo menos, o arquivo primário.The file name list must include at least the primary file. O arquivo primário contém as tabelas de sistema que apontam para outros arquivos no banco de dados.The primary file contains the system tables that point to other files in the database. A lista também deve incluir quaisquer arquivos que tenham sido movidos depois que o banco de dados foi desanexado.The list must also include any files that were moved after the database was detached.

Observação

Este argumento mapeia para o parâmetro FILENAME da instrução CREATE DATABASE.This argument maps to the FILENAME parameter of the CREATE DATABASE statement. Para obter mais informações, consulte CREATE DATABASE (SQL Server Transact-SQL).For more information, see CREATE DATABASE (SQL Server Transact-SQL).

Quando você anexa um banco de dados do SQL Server 2005 (9.x)SQL Server 2005 (9.x) que contém arquivos de catálogo de texto completo a uma instância de servidor do SQL Server 2019 (15.x)SQL Server 2019 (15.x) , os arquivos de catálogo são anexados de seus locais anteriores junto com os outros arquivos de banco de dados, assim como ocorre no SQL Server 2005 (9.x)SQL Server 2005 (9.x).When you attach a SQL Server 2005 (9.x)SQL Server 2005 (9.x) database that contains full-text catalog files onto a SQL Server 2019 (15.x)SQL Server 2019 (15.x) server instance, the catalog files are attached from their previous location along with the other database files, the same as in SQL Server 2005 (9.x)SQL Server 2005 (9.x). Para obter mais informações, veja Atualizar pesquisa de texto completo.For more information, see Upgrade Full-Text Search.

Valores do código de retornoReturn Code Values

0 (êxito) ou 1 (falha)0 (success) or 1 (failure)

Conjuntos de resultadosResult Sets

Nenhum.None

RemarksRemarks

O procedimento armazenado sp_attach_db só deve ser executado em bancos de dados que foram desanexados anteriormente do servidor de banco de dados usando uma operação sp_detach_db explícita ou em bancos de dados copiados.The sp_attach_db stored procedure should only be executed on databases that were previously detached from the database server by using an explicit sp_detach_db operation or on copied databases. Se você precisar especificar mais de 16 arquivos, use criar database_name de banco de dados para anexar ou criar banco de dados database_name FOR_ATTACH_REBUILD_LOG.If you have to specify more than 16 files, use CREATE DATABASE database_name FOR ATTACH or CREATE DATABASE database_name FOR_ATTACH_REBUILD_LOG. Para obter mais informações, consulte CREATE DATABASE (SQL Server Transact-SQL).For more information, see CREATE DATABASE (SQL Server Transact-SQL).

Considera-se que todo arquivo não especificado esteja em seu último local conhecido.Any unspecified file is assumed to be in its last known location. Para usar um arquivo em um local diferente, você deve especificar o novo local.To use a file in a different location, you must specify the new location.

Um banco de dados criado por uma versão mais recente do SQL ServerSQL Server não pode ser anexado em versões anteriores.A database created by a more recent version of SQL ServerSQL Server cannot be attached in earlier versions.

Observação

Um instantâneo do banco de dados não pode ser desanexado ou anexado.A database snapshot cannot be detached or attached.

Ao anexar um banco de dados replicado que tenha sido copiado, em vez de desanexado, considere o seguinte:When you attach a replicated database that was copied instead of being detached, consider the following:

  • Se você anexar o banco de dados à mesma instância e versão de servidor como banco de dados original, nenhuma etapa adicional será necessária.If you attach the database to the same server instance and version as the original database, no additional steps are required.

  • Se anexar o banco de dados à mesma instância de servidor, mas com uma versão atualizada, você deverá executar sp_vupgrade_replication para atualizar a replicação depois que a operação de anexação tiver sido concluída.If you attach the database to the same server instance but with an upgraded version, you must execute sp_vupgrade_replication to upgrade replication after the attach operation is complete.

  • 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 depois que a operação de anexação tiver sido concluída.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 is complete.

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. É necessário usar a instrução OPEN MASTER KEY para descriptografar a DMK (chave mestra do banco de dados).You must use the OPEN MASTER KEY statement to decrypt the database master key (DMK). Após a descriptografia da DMK, 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 da DMK criptografada com a SMK (chave mestra de serviço).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.

PermissõesPermissions

Para obter informações sobre como as permissões são tratadas quando um banco de dados é anexado, consulte (Create)Database SQL Server Transact-SQL.For information about how permissions are handled when a database is attached, see CREATE DATABASE (SQL Server Transact-SQL).

ExemplosExamples

O exemplo a seguir anexa arquivos de AdventureWorks2012AdventureWorks2012 ao servidor atual.The following example attaches files from AdventureWorks2012AdventureWorks2012 to the current server.

EXEC sp_attach_db @dbname = N'AdventureWorks2012',   
    @filename1 =   
N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\AdventureWorks2012_Data.mdf',   
    @filename2 =   
N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\AdventureWorks2012_log.ldf';  

Consulte tambémSee Also

Anexar e desanexar bancos de dados (SQL Server) Database Detach and Attach (SQL Server)
sp_detach_db (Transact-SQL) sp_detach_db (Transact-SQL)
sp_helpfile (Transact-SQL) sp_helpfile (Transact-SQL)
sp_removedbreplication (Transact-SQL) sp_removedbreplication (Transact-SQL)
Procedimentos armazenados do sistema (Transact-SQL)System Stored Procedures (Transact-SQL)