Compartilhar via


Mover bancos de dados de usuário

No SQL Server, você pode mover os dados, o log e os arquivos de catálogo de texto completo de um banco de dados de usuário para um novo local especificando o novo local do arquivo na cláusula FILENAME da instrução ALTER DATABASE . Esse método se aplica à movimentação de arquivos de banco de dados na mesma instância do SQL Server. Para mover um banco de dados para outra instância do SQL Server ou para outro servidor, use operações de backup e restauração ou desanexação e anexação.

Considerações

Ao mover um banco de dados para outra instância de servidor, para fornecer uma experiência consistente para usuários e aplicativos, talvez seja necessário recriar alguns ou todos os metadados do banco de dados. Para obter mais informações, confira Gerenciar metadados ao disponibilizar um banco de dados em outra instância do servidor (SQL Server).

Alguns recursos do Mecanismo de Banco de Dados do SQL Server alteram a maneira como o Mecanismo de Banco de Dados armazena informações nos arquivos de banco de dados. Esses recursos são restritos a edições específicas do SQL Server. Um banco de dados que contém esses recursos não pode ser movido para uma edição do SQL Server que não dá suporte a eles. Use a visão de gerenciamento dinâmico sys.dm_db_persisted_sku_features para listar todas as funcionalidades específicas da edição que estão habilitadas no banco de dados atual.

Os procedimentos neste tópico exigem o nome lógico dos arquivos de banco de dados. Para obter o nome, consulte a coluna de nome na exibição de catálogo sys.master_files.

A partir do SQL Server 2008 R2, os catálogos de texto completo são integrados ao banco de dados em vez de serem armazenados no sistema de arquivos. Os catálogos de texto completo agora são movidos automaticamente quando você move um banco de dados.

Procedimento de realocação planejada

Para mover um arquivo de dados ou log como parte de uma realocação planejada, siga estas etapas:

  1. Execute a seguinte instrução.

    ALTER DATABASE database_name SET OFFLINE;  
    
  2. Mova o arquivo ou os arquivos para o novo local.

  3. Para cada arquivo movido, execute a instrução a seguir.

    ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name, FILENAME = 'new_path\os_file_name' );  
    
  4. Execute a seguinte instrução.

    ALTER DATABASE database_name SET ONLINE;  
    
  5. Verifique a alteração do arquivo executando a consulta a seguir.

    SELECT name, physical_name AS CurrentLocation, state_desc  
    FROM sys.master_files  
    WHERE database_id = DB_ID(N'<database_name>');  
    

Realocação para manutenção agendada de disco

Para realocar um arquivo como parte de um processo de manutenção de disco agendado, siga estas etapas:

  1. Para que cada arquivo seja movido, execute a instrução a seguir.

    ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' );  
    
  2. Interrompa a instância do SQL Server ou desligue o sistema para executar a manutenção. Para obter mais informações, consulte Iniciar, Parar, Pausar, Retomar, Reiniciar o Mecanismo de Banco de Dados, o Agente do SQL Server ou o Serviço de Navegador do SQL Server.

  3. Mova o arquivo ou os arquivos para o novo local.

  4. Reinicie a instância do SQL Server ou do servidor. Para obter mais informações, consulte Iniciar, Parar, Pausar, Retomar, Reiniciar o Mecanismo de Banco de Dados, Agente do SQL Server ou Serviço de Navegador do SQL Server

  5. Verifique a alteração do arquivo executando a consulta a seguir.

    SELECT name, physical_name AS CurrentLocation, state_desc  
    FROM sys.master_files  
    WHERE database_id = DB_ID(N'<database_name>');  
    

Procedimento de recuperação de falha

Se um arquivo precisar ser movido devido a uma falha de hardware, use as etapas a seguir para realocar o arquivo para um novo local.

Importante

Se o banco de dados não puder ser iniciado, ou seja, ele estará no modo suspeito ou em um estado não recuperado, somente membros da função fixa sysadmin poderão mover o arquivo.

  1. Interrompa a instância do SQL Server se estiver iniciada.

  2. Inicie a instância do SQL Server no modo de recuperação somente mestre inserindo um dos comandos a seguir no prompt de comando.

    • Para a instância padrão (MSSQLSERVER), execute o comando a seguir.

      NET START MSSQLSERVER /f /T3608  
      
    • Para uma instância nomeada, execute o comando a seguir.

      NET START MSSQL$instancename /f /T3608  
      

    Para obter mais informações, consulte Iniciar, Parar, Pausar, Retomar, Reiniciar o Mecanismo de Banco de Dados, o Agente do SQL Server ou o Serviço de Navegador do SQL Server.

  3. Para que cada arquivo seja movido, use comandos sqlcmd ou SQL Server Management Studio para executar a instrução a seguir.

    ALTER DATABASE database_name MODIFY FILE( NAME = logical_name , FILENAME = 'new_path\os_file_name' );  
    

    Para obter mais informações sobre como usar o utilitário sqlcmd , consulte Usar o Utilitário sqlcmd.

  4. Saia do utilitário sqlcmd ou do SQL Server Management Studio.

  5. Interrompa a instância do SQL Server.

  6. Mova o arquivo ou os arquivos para o novo local.

  7. Inicie a instância do SQL Server. Por exemplo, execute: NET START MSSQLSERVER.

  8. Verifique a alteração do arquivo executando a consulta a seguir.

    SELECT name, physical_name AS CurrentLocation, state_desc  
    FROM sys.master_files  
    WHERE database_id = DB_ID(N'<database_name>');  
    

Exemplos

O exemplo a seguir move o arquivo de log AdventureWorks2012 para um novo local como parte de uma realocação planejada.

USE master;  
GO  
-- Return the logical file name.  
SELECT name, physical_name AS CurrentLocation, state_desc  
FROM sys.master_files  
WHERE database_id = DB_ID(N'AdventureWorks2012')  
    AND type_desc = N'LOG';  
GO  
ALTER DATABASE AdventureWorks2012 SET OFFLINE;  
GO  
-- Physically move the file to a new location.  
-- In the following statement, modify the path specified in FILENAME to  
-- the new location of the file on your server.  
ALTER DATABASE AdventureWorks2012   
    MODIFY FILE ( NAME = AdventureWorks2012_Log,   
                  FILENAME = 'C:\NewLoc\AdventureWorks2012_Log.ldf');  
GO  
ALTER DATABASE AdventureWorks2012 SET ONLINE;  
GO  
--Verify the new location.  
SELECT name, physical_name AS CurrentLocation, state_desc  
FROM sys.master_files  
WHERE database_id = DB_ID(N'AdventureWorks2012')  
    AND type_desc = N'LOG';  

Consulte Também

ALTERAR BASE DE DADOS (Transact-SQL)
CRIAR BANCO DE DADOS (SQL Server Transact-SQL)
Anexar e desanexar o banco de dados (SQL Server)
Mover bancos de dados do sistema
Mover arquivos de banco de dados
BACKUP (Transact-SQL)
RESTORE (Transact-SQL)
Iniciar, Parar, Pausar, Retomar, Reiniciar o Mecanismo de Banco de Dados, o SQL Server Agent ou o Serviço de Navegador do SQL Server