Desanexando e anexando bancos de dados

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.

ObservaçãoObservação

O formato de armazenamento em disco do SQL Server é o mesmo nos ambientes de 64 bits e 32 bits. Portanto, você pode anexar trabalhos em ambientes de 32 bits e de 64 bits. Um banco de dados desanexado de uma instância de servidor que é executada em um único ambiente pode ser anexado em uma instância de servidor que é executada em outro ambiente.

Para obter informações sobre permissões de arquivo que são definidas sempre que um banco de dados é desanexado e anexado, consulte Protegendo dados e arquivos de log.

As permissões de acesso ao arquivo são definidos durante algumas operações de banco de dados, inclusive desanexar ou anexar um banco de dados. Para obter informações sobre permissões de arquivo que são definidas sempre que um banco de dados é desanexado e anexado, consulte Protegendo dados e arquivos de 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 fonte 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.

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.

Você não poderá desanexar um banco de dados se alguma das seguintes opçõ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, você deve desabilitar a publicação executando sp_replicationdboption.

    ObservaçãoObservação

    Se não for possível usar sp_replicationdboption, você poderá remover a replicação executando 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 Como descartar um instantâneo do banco de dados (Transact-SQL).

    ObservaçãoObservação

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

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

    O banco de dados não pode ser desanexado, a menos que a sessão seja encerrada. Para obter mais informações, consulte Removendo o espelhamento de banco de dados.

  • O banco de dados é suspeito. No SQL Server 2005 e versões posteriores, um banco de dados suspeito não pode ser desanexado. Antes de poder desanexá-lo, você deve colocá-lo em 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.

Para desanexar um banco de dados

Backup e restauração e desanexação

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, consulte Fazendo backup de bancos de dados somente leitura.

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

Você pode anexar um banco de dados do SQL Server copiado ou desanexado. 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 2008, 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. Para obter mais informações, consulte Atualização da pesquisa de texto completo.

Quando você anexa 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çãoObservação

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

Quando um banco de dados criptografado é anexado primeiro a uma instância do SQL Server, o proprietário do banco de dados deve abrir a chave mestra do banco de dados executando a instrução seguinte: OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password'. Recomendamos habilitar a descriptografia automática da chave mestra executando a instrução seguinte: 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 conservar todos os arquivos de log desanexados, até que o banco de dados tenha sido anexado com êxito sem eles.

    Se um banco de dados de leitura e gravação tiver um único arquivo de log e você não especificar um novo local para o arquivo de log, a operação de anexação procurará o arquivo no local antigo. Se for achado, o arquivo de log antigo será usado, independentemente de o banco de dados ter sido desligado corretamente. No entanto, se o arquivo de log antigo não for encontrado e se o banco de dados tiver sido desligado corretamente e não tiver nenhuma cadeia de logs ativa, a operação de anexação tentará criar um novo arquivo de log para o banco de dados. Para obter mais informações, consulte Arquitetura lógica de log de transações e Arquitetura física de log de transações.

  • Se o arquivo de dados primário que está 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 log não pode ser criado porque SQL Server não pode atualizar o local de log armazenado no arquivo primário.

Altera Metadados na Anexação de 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 a informações de backup de base, o banco de dados mestre se torna não sincronizado com o banco de dados somente leitura, portanto backups diferenciais utilizados posteriormente podem fornecer resultados inesperados. Portanto, se você estiver usando backups diferenciais com um banco de dados somente leitura, deverá estabelecer uma nova base diferencial obtendo um backup completo após reanexar o banco de dados. Para obter mais informações, consulte Base de um backup diferencial.

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, no SQL Server 2005 e versões posteriores, 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, consulte Opção cross db ownership chaining. Além disso, TRUSTWORTHY é definido como OFF sempre que o banco de dados for anexado. Para obter mais informações sobre como definir TRUSTWORTHY como ON, consulte ALTER DATABASE (Transact-SQL).

Backup e restauração e anexação

Como qualquer banco de dados que esteja offline total ou parcialmente, um banco de dados com arquivos de restauração não pode ser anexado. 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.

Anexando um banco de dados a outra instância do servidor

Quando você anexa um banco de dados a outra instância do servidor, para oferecer uma experiência consistente aos usuários e aplicativos, pode ser necessário recriar alguns ou todos os metadados para o banco de dados, tais como logins e trabalhos, na outra instância de servidor. Para obter mais informações, consulte Gerenciando metadados ao disponibilizar um banco de dados em outra instância do servidor.

ObservaçãoObservação

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

Para anexar um banco de dados

No SQL Server 2008, você pode usar operações de anexação e desanexação para atualizar um banco de dados de usuário do SQL Server 2000 ou do SQL Server 2005. No entanto, as seguintes restrições se aplicam:

  • Cópias do banco de dados mestre, modelo ou msdb criadas usando o SQL Server 2000 ou SQL Server 2005 não podem ser anexadas.

  • Quando anexar um banco de dados replicado que foi copiado em vez de desanexado:

    • Se você anexar o banco de dados a uma versão atualizada da mesma instância de servidor, você deverá executar sp_vupgrade_replication para atualizar a replicação depois que a operação de anexação tiver sido concluída. Para obter mais informações, consulte sp_vupgrade_replication (Transact-SQL).

    • Se anexar o banco de dados a uma instância de servidor diferente, independentemente da versão, você deverá executar sp_removedbreplication para remover a replicação depois de a operação de anexação ter sido concluída. Para obter mais informações, consulte sp_removedbreplication (Transact-SQL).

Para atualizar um banco de dados usando as operações de anexação e desanexação

Observação importanteImportante

Recomendamos que você mova os bancos de dados utilizando o procedimento de realocação planejada ALTER DATABASE, em vez de utilizar operações de desanexação e anexação. Para obter mais informações, consulte Movendo arquivos de banco de dados.

Geralmente, você pode usar operações de anexação e desanexação para mover um banco de dados. Cenários típicos incluem mover um banco de dados para um dos seguintes locais:

  • Um disco físico diferente no mesmo computador. Por exemplo, quando o disco que contém um arquivo de dados não tiver mais espaço e você desejar expandir o arquivo existente (em vez de expandir o banco de dados adicionando um novo arquivo em um disco diferente).

  • Um computador diferente, sem ter de recriar o banco de dados e restaurar o backup de banco de dados.

Mover um banco de dados usando operações de anexação e desanexação envolve as seguintes fases:

  1. Desanexação do banco de dados.

  2. Movendo os arquivos do banco de dados para outro servidor ou disco.

  3. Anexando o banco de dados especificando o novo local do arquivo ou arquivos movidos.

Para mover um banco de dados usando as operações de anexação e desanexação

Mostrar: