Como mover um banco de dados usando desanexar e anexar (Transact-SQL)

Observação importanteImportante

Recomendamos que você mova os bancos de dados utilizando o procedimento de realocação planejada ALTER DATABASE, em vez de utilizar desanexar e anexar. Para obter mais informações, consulte ALTER DATABASE (Transact-SQL).

Você pode mover um banco de dados desanexado para outro local e anexá-lo novamente à mesma instância de servidor ou a uma instância diferente.

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

É recomendável não anexar ou restaurar 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 os procedimentos armazenados ou outro código definido pelo usuário, no banco de dados.

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ê desanexa um banco de dados atualizado do SQL Server 2005 que contém arquivos de catálogo de texto completo de uma instância de servidor do SQL Server 2008, os arquivos de catálogo são mantidos com os outros arquivos de banco de dados, assim como ocorre no SQL Server 2005.

ObservaçãoObservação

Você também pode utilizar desanexar e anexar para atualizar um banco de dados SQL Server 2000 ou SQL Server 2005 para SQL Server 2008. Para obter mais informações, consulte Como atualizar um banco de dados utilizando Desanexar e Anexar (Transact-SQL).

Procedimento

Para copiar um banco de dados utilizando desanexar e anexar

  1. Desanexe o banco de dados utilizando o procedimento armazenado sp_detach_db.

  2. Em uma janela do Windows Explorer ou do prompt de comando do Windows, mova os arquivos do banco de dados desanexado e os arquivos de log para o novo local.

    ObservaçãoObservação

    Para mover um banco de dados de um único arquivo, você poderá utilizar email se o tamanho do arquivo for pequeno o bastante para caber no email.

    Você deverá mover os arquivos de log, mesmo se pretender criar novos arquivos de log. Em alguns casos, a nova anexação de um banco de dados exige seus arquivos de log existentes. Portanto, mantenha todos os arquivos de log desanexados até que o banco de dados seja anexado com êxito sem eles.

    ObservaçãoObservação

    Se você tentar anexar o banco de dados sem especificar o arquivo de log, a operação de anexação procurará o arquivo de log em seu local original. Se ainda existir uma cópia do log no local original, essa cópia será anexada. Para evitar a utilização do arquivo de log original, especifique o caminho do novo arquivo de log ou remova a cópia original do arquivo de log (depois de copiar para o local novo).

  3. Anexe os arquivos copiados utilizando a instrução Transact-SQL CREATE DATABASE com uma cláusula FOR ATTACH [ WITH <service_broker_option> ] ou uma cláusula FOR ATTACH_REBUILD_LOG (para obter mais informações, consulte CREATE DATABASE (Transact-SQL)). Cada banco de dados contém um identificador exclusivo utilizado para rotear mensagens do Service Broker para esse banco de dados. Se o banco de dados utilizar Service Broker, consulte Gerenciando identidades do Service Broker.

    ObservaçãoObservação

    Para obter informações sobre como anexar um banco de dados utilizando o Pesquisador de Objetos, consulte Como anexar um banco de dados (SQL Server Management Studio).

Exemplo

O exemplo a seguir cria uma cópia do banco de dados AdventureWorks2008R2 chamado MyAdventureWorks. As instruções Transact-SQL são executadas em uma janela do Editor de Consultas conectada à instância do servidor à qual o AdventureWorks2008R2 está anexado.

  1. Desanexe o banco de dados AdventureWorks2008R2 executando as seguintes instruções Transact-SQL:

    USE master;
    GO
    EXEC sp_detach_db @dbname = N'AdventureWorks2008R2';
    GO
    
  2. Utilizando o método de sua preferência, copie os arquivos de banco de dados (AdventureWorks2008R2_Data.mdf e AdventureWorks2008R2_log) para C:\MySQLServer\AdventureWorks2008R2_Data.mdf e C:\MySQLServer\AdventureWorks2008R2_Log.ldf, respectivamente.

    Observação importanteImportante

    Para um banco de dados de produção, coloque o banco de dados e o log de transações em discos separados.

    Para copiar arquivos pela rede para um disco ou um computador remoto, utilize o nome UNC (Convenção Universal de Nomenclatura) do local remoto. Um nome UNC possui o formato **\\Nomedoservidor\Nomecompartilhado\Caminho\**Nomedoarquivo. Assim como ocorre com a gravação de arquivos no disco rígido local, deverão ser concedidas, à conta do usuário utilizada pela instância do SQL Server, as permissões apropriadas exigidas para ler ou gravar em um arquivo no disco remoto.

  3. Anexe o banco de dados movido e, opcionalmente, seu log executando as seguintes instruções Transact-SQL:

    USE master;
    GO
    CREATE DATABASE MyAdventureWorks 
        ON (FILENAME = 'C:\MySQLServer\AdventureWorks2008R2_Data.mdf'),
        (FILENAME = 'C:\MySQLServer\AdventureWorks2008R2_Log.ldf')
        FOR ATTACH;
    GO
    
    ObservaçãoObservação

    No SQL Server Management Studio, um banco de dados anexado recentemente não estará visível imediatamente no Pesquisador de Objetos. Para exibir o banco de dados, no Pesquisador de Objetos, clique em Exibir e depois em Atualizar. Quando o nó Bancos de Dados for expandido no Pesquisador de Objetos, o banco de dados recentemente anexado será exibido na lista de bancos de dados.