Compartilhar via


sp_attach_db (Transact-SQL)

Anexa um banco de dados a um servidor.

Observação importanteImportante

Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam. Recomendamos usar CREATE DATABASE database_name em vez de FOR ATTACH. Para obter mais informações, consulte CREATE DATABASE (Transact-SQL).

ObservaçãoObservação

Para recompilar vários arquivos de log quando um ou deles estiverem em um novo local, use CREATE DATABASE database_name FOR ATTACH_REBUILD_LOG.

Observação sobre segurançaObservação sobre segurança

Recomendamos que você não anexe ou restaure bancos de dados de origens desconhecidas ou não confiáveis. Esses bancos de dados podem conter um código mal-intencionado que pode executar código Transact-SQL involuntário ou provocar erros modificando o esquema ou a estrutura física do banco de dados. Antes de usar um banco de dados de uma 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.

Ícone de vínculo de tópico Convenções da sintaxe Transact-SQL

Sintaxe

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

Argumentos

  • [ @dbname= ] **'**dbnam '
    É o nome do banco de dados a ser anexado ao servidor. O nome deve ser exclusivo. dbname é sysname, com um padrão NULL.

  • [ @filename1= ] 'filename_n'
    É o nome físico, incluindo o caminho, do arquivo de banco de dados. filename_n é nvarchar(260), com um padrão NULL. Podem ser especificados até 16 nomes de arquivo. Os nomes de parâmetros começam em @filename1 e são incrementados até @filename16. A lista de nomes de arquivo deve incluir, pelo menos, o arquivo primário. 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.

    ObservaçãoObservação

    Este argumento mapeia para o parâmetro FILENAME da instrução CREATE DATABASE. Para obter mais informações, consulte CREATE DATABASE (Transact-SQL).

    Quando você anexa um banco de dados do SQL Server 2005 que contém arquivos de catálogo de texto completo a uma instância de servidor do SQL Server 2012, os arquivos de catálogo são anexados de seus locais anteriores junto com os outros arquivos de banco de dados, como ocorre no SQL Server 2005. Para obter mais informações, consulte Atualizar pesquisa de texto completo do SQL Server 2005.

Valores de código de retorno

0 (êxito) ou 1 (falha)

Conjuntos de resultados

Nenhum

Comentários

O procedimento armazenado de sp_attach_db só deve ser executado em bancos de dados que tenham sido previamente desanexados do servidor de banco de dados por meio de uma operação sp_detach_db explícita ou em bancos de dados copiados. Se precisar especificar mais de 16 arquivos, use CREATE DATABASE database_name FOR ATTACH ou CREATE DATABASE database_name FOR_ATTACH_REBUILD_LOG. Para obter mais informações, consulte CREATE DATABASE (Transact-SQL).

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.

Um banco de dados criado por uma versão mais recente do SQL Server não pode ser anexado em versões anteriores.

ObservaçãoObservação

Um instantâneo do banco de dados não pode ser desanexado ou anexado.

Ao anexar um banco de dados replicado que tenha sido copiado, em vez de desanexado, considere o seguinte:

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

  • Se anexar o banco de dados à mesma instância de servidor, mas com uma versão atualizada, você deve 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.

Apenas bancos de dados do SQL Server 2005 e posteriores podem ser anexados ao SQL Server 2012. Se o nível de compatibilidade de um banco de dados for menor que 90, seu nível de compatibilidade será alterado para o nível 90 quando o banco de dados for anexado ao SQL Server 2012.

Quando um banco de dados é anexado ou restaurado pela primeira vez a uma nova instância do SQL 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. Você deve usar a instrução OPEN MASTER KEY para descriptografar a chave mestra do banco de dados (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. Quando um banco de dados for atualizado de uma versão anterior, a DMK deverá ser regenerada para usar o algoritmo AES mais recente. Para obter mais informações sobre a regeneração da DMK, consulte 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. É 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.

Permissões

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

Exemplos

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

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

Consulte também

Referência

sp_detach_db (Transact-SQL)

sp_helpfile (Transact-SQL)

sp_removedbreplication (Transact-SQL)

Procedimentos armazenados do sistema (Transact-SQL)

Conceitos

Anexar e desanexar bancos de dados (SQL Server)