Desanexar e anexar um banco de dados (SQL Server)

Aplica-se a: SQL Server

Os dados e os arquivos de log de transações de um banco de dados podem ser desanexados e, em seguida, reanexados à mesma ou a outra instância do SQL Server. Desanexar e anexar um banco de dados é útil se você deseja alterar o banco de dados a uma instância diferente do SQL Server no mesmo computador ou mover o banco de dados.

Permissões

As permissões de acesso a arquivos são configuradas durante diversas operações do banco de dados, incluindo desanexar ou anexar um banco de dados.

Importante

Nossa recomendação é para não anexar ou restaurar 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 uma fonte desconhecida ou não confiável, faça a execução do comando DBCC CHECKDB (Transact-SQL) 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 outros códigos definidos pelo usuário, no banco de dados.

Desanexar um banco de dados

Desanexar um banco de dados remove-o da instância do SQL Server, mas deixa intacto o banco de dados, com seus arquivos de dados e arquivos de log de transações. Esses arquivos podem então ser usados para anexar o banco de dados a qualquer instância do SQL Server, inclusive o servidor do qual o banco de dados foi desanexado.

Não será possível desanexar um banco de dados se alguma das seguintes situações for verdadeira:

  • O banco de dados está replicado e publicado. Se replicado, o banco de dados não pode estar publicado. Antes de poder desanexá-lo, é necessário desabilitar a publicação executando sp_replicationdboption.

    Observação

    Se não for possível usar sp_replicationdboption, você poderá remover a duplicação com a execução de sp_removedbreplication.

  • Há um instantâneo do banco de dados no banco de dados.

    Antes de poder desanexar o banco de dados, você deve descartar todos os seus instantâneos. Para obter mais informações, consulte Descartar um instantâneo do banco de dados (Transact-SQL).

    Observação

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

  • O banco de dados faz parte de um grupo de disponibilidade Always On.

    Não é possível desanexar um banco de dados até que ele seja removido do grupo de disponibilidade. Para obter mais informações, confira Remover um banco de dados primário de um grupo de disponibilidade Always On.

  • O banco de dados está sendo espelhado em uma sessão de espelhamento de banco de dados.

    Não é possível desanexar um banco de dados a menos que a sessão seja encerrada. Para obter mais informações, veja Removendo o espelhamento de banco de dados (SQL Server).

  • O banco de dados é suspeito. Não é possível desanexar um banco de dados suspeito. Antes que seja possível desanexá-lo, é necessário colocá-lo no modo de emergência. Para obter mais informações sobre como colocar um banco de dados em modo de emergência, consulte ALTER DATABASE (Transact-SQL).

  • O banco de dados é um banco de dados de sistema.

Fazer backup, restaurar e desanexar

A desanexação de um banco de dados somente leitura perde informações sobre as bases diferenciais de backups diferenciais. Para obter mais informações, veja Backups diferenciais (SQL Server).

Responder a erros de desanexação

Os erros produzidos ao desanexar um banco de dados podem impedir que o banco de dados seja desligado corretamente e que o log de transações seja reconstruído. Se você receber uma mensagem de erro, execute as ações corretivas a seguir:

  1. Reanexe todos os arquivos associados ao banco de dados, e não apenas o arquivo primário.

  2. Resolva o problema que causou a mensagem de erro.

  3. Desanexe o banco de dados novamente.

Anexar um banco de dados

Você pode anexar um banco de dados SQL Server copiado ou desanexado. Quando você anexa um banco de dados SQL Server 2005 (9.x) que contém arquivos de catálogo de texto completo a uma instância de servidor do SQL Server, 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). Para obter mais informações, veja Atualizar pesquisa de texto completo.

Ao anexar um banco de dados, todos os arquivos de dados (arquivos .mdf e .ndf) devem estar disponíveis. Se algum arquivo de dados tiver um caminho diferente de quando o banco de dados foi inicialmente criado ou anexado pela última vez, você deverá especificar o caminho atual do arquivo.

Observação

Se o arquivo de dados primário que estiver sendo anexado for somente leitura, o Mecanismo de Banco de Dados presumirá que o banco de dados é somente leitura.

Ao anexar um banco de dados criptografado pela primeira vez a uma instância do SQL Server, o proprietário do banco de dados deve abrir a chave mestra do banco de dados (DMK) ao executar a seguinte instrução: OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password'. Nossa recomendação é para habilitar a descriptografia automática da DMK ao executar a seguinte instrução: ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY. Para obter mais informações, consulte CREATE MASTER KEY (Transact-SQL) e ALTER MASTER KEY (Transact-SQL).

O requisito para anexar arquivos de log depende, em parte, de o banco de dados ser de leitura e gravação ou apenas leitura:

  • Para um banco de dados de leitura e gravação, você pode geralmente anexar um arquivo de log em um novo local. No entanto, em alguns casos, a reanexação de um banco de dados exige seus arquivos de log existentes. Portanto, é importante sempre manter todos os arquivos de registro em log desanexados até anexar o banco de dados com êxito sem eles.

    Se um banco de dados de leitura/gravação tiver um único arquivo de registro em log e você não especificar uma nova localização para este arquivo, a operação de anexação procurará o arquivo na localização antiga. Se o arquivo de registro em log antigo for encontrado, ele será usado independentemente de o banco de dados ter sido encerrado corretamente. No entanto, se o arquivo de registro em log antigo não for encontrado e se o banco de dados tiver sido encerrado corretamente e não tiver nenhuma cadeia de logs ativa, a operação de anexação tentará criar um novo arquivo de registro em log para o banco de dados.

  • Se o arquivo de dados primário que estiver sendo anexado for somente leitura, o Mecanismo de Banco de Dados presumirá que o banco de dados é somente leitura. Para um banco de dados somente leitura, o arquivo ou arquivos de log devem estar disponíveis no local especificado no arquivo primário do banco de dados. Um novo arquivo de registro em log não pode ser criado porque o SQL Server não consegue atualizar a localização dos logs armazenados no arquivo primário.

Alterações de metadados ao anexar um banco de dados

Quando um banco de dados somente leitura é desanexado e reanexado, as informações de backup sobre a base diferencial atual são perdidas. A base diferencial é o backup completo mais recente de todos os dados no banco de dados ou em um subconjunto dos arquivos ou de grupos de arquivos do banco de dados. Sem as informações do backup de base, não é possível sincronizar o banco de dados master com o banco de dados somente leitura, portanto, backups diferenciais executados posteriormente podem fornecer resultados inesperados. Em vista disso, se você estiver usando backups diferenciais com um banco de dados somente leitura, deverá estabelecer uma nova base diferencial ao executar um backup completo após reanexar o banco de dados. Para obter informações sobre backups diferenciais, confira Backups diferenciais (SQL Server).

Na anexação, ocorre inicialização do banco de dados. Geralmente, a anexação de um banco de dados coloca-o no mesmo estado em que estava quando foi desanexado ou copiado. No entanto, as operações de anexação e desanexação desabilitam o encadeamento de propriedades de bancos de dados para o banco de dados. Para obter informações sobre como habilitar o encadeamento, veja Opção cross db ownership chaining de configuração de servidor.

Importante

Por padrão e por segurança, as opções para is_broker_enabled, is_honor_broker_priority_on e is_db_trustworthy_on são definidas como OFF sempre que o banco de dados está anexado. Para obter informações sobre como definir essas opções como ON, consulte ALTER DATABASE (Transact-SQL). Para obter mais informações sobre metadados, confira Gerenciar metadados ao disponibilizar um banco de dados em outro servidor.

Fazer backup, restaurar e anexar

De forma semelhante a bancos de dados total ou parcialmente offline, não é possível anexar um banco de dados com arquivos de restauração. Se você interromper a sequência de restauração, poderá anexar o banco de dados. Em seguida, você poderá reiniciar a sequência de restauração.

Anexar um banco de dados a outra instância de servidor

Importante

Não é possível anexar um banco de dados criado por uma versão mais recente do SQL Server em versões anteriores. Isso impede que o banco de dados seja usado fisicamente com uma versão mais antiga do Mecanismo de Banco de Dados. No entanto, isso está relacionado ao estado dos metadados e não afeta o nível de compatibilidade do banco de dados. Para obter mais informações, confira Nível de compatibilidade de ALTER DATABASE (Transact-SQL).

Para fornecer uma experiência com consistência aos usuários e aplicativos, ao anexar um banco de dados a outra instância de servidor, talvez seja necessário recriar alguns ou todos os metadados do banco de dados na outra instância de servidor. Esses metadados incluem logons e trabalhos. Para obter mais informações, confira Gerenciar metadados ao disponibilizar um banco de dados em outro servidor.

Tarefa Artigo
Desanexar um banco de dados - sp_detach_db (Transact-SQL)
- Desanexar um banco de dados
Anexar um banco de dados - CREATE DATABASE
- Anexar um banco de dados
- sp_attach_db (Transact-SQL)
- sp_attach_single_file_db (Transact-SQL)
Atualizar um banco de dados ao usar operações de desanexação e de anexação - Atualizar um banco de dados usando desanexação e anexação (Transact-SQL)
Mover um banco de dados ao usar operações de desanexação e de anexação - Mover um banco de dados usando desanexação e anexação (Transact-SQL)
Excluir um instantâneo do banco de dados - Descartar um instantâneo do banco de dados (Transact-SQL)