Compartilhar via


sp_attach_db (Transact-SQL)

Aplica-se a: SQL Server

Anexa um banco de dados a um servidor.

Importante

Esse recurso será removido em uma versão futura do SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam. Em vez dessa função, recomendamos usar CREATE DATABASE <database_name> FOR ATTACH . Para saber mais, confira CRIAR BANCO DE DADOS. Para recriar vários arquivos de log quando um ou mais tiverem um novo local, use CREATE DATABASE <database_name> FOR ATTACH_REBUILD_LOG.

Não anexe ou restaure bancos de dados de fontes desconhecidas ou não confiáveis. Esses bancos de dados podem conter um código mal-intencionado que pode executar um código Transact-SQL inesperado ou provocar erros modificando o esquema ou a estrutura física do banco de dados. 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.

Sintaxe

sp_attach_db
    [ @dbname = ] N'dbname'
    , [ { @filename1 ... @filename16 } = ] { N'*filename1*' ... N'*filename16*' }
[ ; ]

Argumentos

@dbname [ = ] N'dbname'

O nome do banco de dados a ser anexado ao servidor. @dbname é sysname, sem padrão.

[ { @filename1 ... @filename16 } = ] { N'filename1' ... N'filename16' }

O nome físico, incluindo o caminho, de um arquivo de banco de dados. Esse parâmetro é nvarchar(260), com um padrão de NULL. Você pode especificar até 16 nomes de arquivo. Os nomes dos parâmetros começam em @filename1 e incrementam até @filename16. A lista de nomes de arquivo deve incluir pelo menos o arquivo principal (.mdf). O arquivo primário contém as tabelas de sistema que apontam para outros arquivos no banco de dados. A lista também deve incluir quaisquer arquivos que tenham sido movidos depois que o banco de dados foi desanexado.

Esse parâmetro é mapeado para o FILENAME parâmetro da CREATE DATABASE instrução. Para saber mais, confira CRIAR BANCO DE DADOS.

Observação

Quando você anexa um banco de dados do SQL Server 2005 (9.x) que contém arquivos de catálogo de texto completo a uma versão mais recente do SQL Server, os arquivos de catálogo são anexados de seu local anterior junto com os outros arquivos de banco de dados, da mesma forma que no SQL Server 2005 (9.x). Para obter mais informações, veja Atualizar pesquisa de texto completo.

Valores do código de retorno

0 (sucesso) ou 1 (falha).

Conjunto de resultados

Nenhum.

Comentários

O sp_attach_db procedimento armazenado só deve ser executado em bancos de dados que foram desanexados anteriormente do servidor de banco de dados usando uma operação explícita sp_detach_db ou em bancos de dados copiados. Se você precisar especificar mais de 16 arquivos, use CREATE DATABASE <database_name> FOR ATTACH ou CREATE DATABASE <database_name> FOR_ATTACH_REBUILD_LOG. Para saber mais, confira CRIAR BANCO DE DADOS.

Considera-se que todo arquivo não especificado esteja em seu último local conhecido. Para usar um arquivo em um local diferente, você deve especificar o novo local.

Não é possível anexar um banco de dados criado por uma versão mais recente do SQL Server em versões anteriores.

Observação

Não é possível desanexar ou anexar um instantâneo do banco de dados.

Ao anexar um banco de dados replicado que foi copiado em vez de ser desanexado, considere as seguintes condições:

  • Se você anexar o banco de dados à mesma instância de servidor e versão do banco de dados original, nenhuma etapa adicional será necessária.

  • 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.

  • 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.

Quando um banco de dados é anexado ou restaurado pela primeira vez em uma nova instância do SQL Server, uma cópia da DMK (chave mestra do banco de dados) - criptografada pela SMK (chave mestra de serviço) - ainda não é armazenada no servidor. Você deve usar a OPEN MASTER KEY instrução para descriptografar o DMK. Depois que o DMK for descriptografado, você terá a opção de habilitar a descriptografia automática no futuro usando a ALTER MASTER KEY REGENERATE instrução para fornecer ao servidor uma cópia do DMK, criptografada com o SMK. Quando um banco de dados é 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 a DMK, veja 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. A regeneração da chave DMK para atualizar para AES é necessária apenas uma vez e não tem efeito nas regenerações futuras como parte de uma estratégia de rotação de chaves.

Permissões

Para obter informações sobre como as permissões são tratadas quando um banco de dados é anexado, consulte CREATE DATABASE.

Exemplos

O exemplo a seguir anexa arquivos de AdventureWorks2022 ao servidor atual.

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