Partilhar via


sp_attach_db (Transact-SQL)

Aplica-se a:SQL Server

Liga uma base de dados a um servidor.

Importante

Esse recurso será removido em uma versão futura do SQL Server. Evite usar esse recurso em novos trabalhos de desenvolvimento e planeje modificar aplicativos que atualmente usam esse recurso. Recomendamos que use CREATE DATABASE <database_name> FOR ATTACH em vez disso. Para obter mais informações, consulte CREATE DATABASE. Para reconstruir múltiplos ficheiros de registo quando um ou mais têm uma nova localização, use CREATE DATABASE <database_name> FOR ATTACH_REBUILD_LOG.

Não anexe nem restaure bases 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.

Sintaxe

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

Arguments

[ @dbname = ] N'dbname'

O nome da base de dados a ser ligada ao servidor. @dbname é sysname, sem padrão.

[ { @filename1 ... @filename16 } = ] { N'nome do ficheiro1' ... N'nome do ficheiro16' }

O nome físico, incluindo o caminho, de um ficheiro de base de dados. Este parâmetro é nvarchar(260), com um padrão de NULL. Pode especificar até 16 nomes de ficheiros. Os nomes dos parâmetros começam em @filename1 e aumentam até @filename16. A lista de nomes de ficheiros deve incluir pelo menos o ficheiro principal (.mdf). O ficheiro primário contém as tabelas de sistema que apontam para outros ficheiros na base de dados. A lista deve também incluir quaisquer ficheiros que tenham sido movidos após a separação da base de dados.

Este parâmetro corresponde ao FILENAME parâmetro da CREATE DATABASE afirmação. Para obter mais informações, consulte CREATE DATABASE.

Observação

Quando anexa uma base de dados SQL Server 2005 (9.x) que contém ficheiros de catálogo em texto completo a uma versão mais recente do SQL Server, os ficheiros de catálogo são anexados da sua localização anterior juntamente com os outros ficheiros da base de dados, tal como no SQL Server 2005 (9.x). Para mais informações, consulte Atualização Full-Text Pesquisa.

Valores de código de retorno

0 (sucesso) ou 1 (fracasso).

Conjunto de resultados

Nenhum.

Observações

O sp_attach_db procedimento armazenado só deve ser executado em bases de dados que tenham sido previamente destacadas do servidor de base de dados através de uma operação explícita sp_detach_db ou em bases de dados copiadas. Se tiver de especificar mais de 16 ficheiros, use CREATE DATABASE <database_name> FOR ATTACH ou CREATE DATABASE <database_name> FOR_ATTACH_REBUILD_LOG. Para obter mais informações, consulte CREATE DATABASE.

Qualquer ficheiro não especificado é assumido como estando na sua última localização conhecida. Para usar um ficheiro numa localização diferente, deve especificar a nova localização.

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

Observação

Um snapshot de base de dados não pode ser destacado ou anexado.

Ao anexar uma base de dados replicada que foi copiada em vez de ser separada, considere as seguintes condições:

  • Se anexar a base de dados à mesma instância e versão do servidor original, não são necessários mais passos.

  • Se você anexar o banco de dados à mesma instância do servidor, mas com uma versão atualizada, deverá executar sp_vupgrade_replication para atualizar a replicação após a conclusão da operação de anexação.

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

Quando uma base de dados é anexada ou restaurada numa nova instância do SQL Server, uma cópia da chave mestra da base de dados (DMK) - encriptada pela chave mestra de serviço (SMK) - ainda não está armazenada no servidor. Deve usar a OPEN MASTER KEY instrução para desencriptar o DMK. Depois de o DMK ser desencriptado, tem a opção de ativar a desencriptação automática no futuro, usando a ALTER MASTER KEY REGENERATE instrução para fornecer ao servidor uma cópia do DMK, encriptada com o SMK. Quando uma base de dados é atualizada a partir 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. 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 efeito sobre futuras regenerações como parte de uma estratégia de rotação de chaves.

Permissions

Para informações sobre como as permissões são geridas quando uma base de dados é anexada, veja CRIAR BASE de DADOS.

Examples

O exemplo seguinte anexa ficheiros de AdventureWorks2025 ao servidor atual.

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