Compartilhar via


Mover bancos de dados de usuário

Aplica-se: SQL Server

No SQL Server, é possível 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 é aplicado para mover arquivos de banco de dados dentro da mesma instância do SQL Server. Para mover um banco de dados para uma outra instância do SQL Server ou para um outro servidor, use as operações de backup e restauração ou anexar e desanexar.

Observação

Este artigo aborda como mover os arquivos de banco de dados do usuário. Para mover arquivos de banco de dados do sistema, confira Mover bancos de dados do sistema.

Considerações

Ao mover um banco de dados para outra instância do servidor, para oferecer uma experiência consistente aos 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 outro servidor.

Alguns recursos do mecanismo de banco de dados do SQL Server alteram a maneira como o mecanismo de banco de dados armazena as 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 exibição de gerenciamento dinâmico sys.dm_db_persisted_sku_features para listar todos os recursos específicos de edição habilitados no banco de dados atual.

Os procedimentos deste artigo 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 .

Catálogos de texto completo são integrados no banco de dados em vez de serem armazenados no sistema de arquivos. Os catálogos de texto completo são movidos automaticamente quando você move um banco de dados.

Observação

Verifique se a conta de serviço para Configurar contas e permissões de serviço do Windows tem permissões para o novo local de arquivo no sistema de arquivos. Para obter mais informações, veja Configurar permissões do sistema de arquivos para acesso ao Mecanismo de Banco de Dados.

Procedimento de realocação planejada

Para mover um arquivo de dados ou de log como parte de uma realocação planejada, execute as seguintes etapas:

  1. Para cada arquivo a ser movido, execute a seguinte instrução.

    ALTER DATABASE database_name
        MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
    
  2. Execute a instrução a seguir para colocar o banco de dados em modo offline.

    ALTER DATABASE database_name
        SET OFFLINE;
    

    Essa ação requer acesso exclusivo ao banco de dados. Se houver outra conexão aberta com o banco de dados, a instrução ALTER DATABASE será bloqueada até que todas as conexões sejam fechadas. Para substituir esse comportamento, use a cláusula WITH <termination>. Por exemplo, para reverter e desconectar automaticamente todas as outras conexões com o banco de dados, use:

    ALTER DATABASE database_name
         SET OFFLINE
         WITH ROLLBACK IMMEDIATE;
    
  3. Mova o arquivo ou os arquivos para o novo local.

  4. Execute a seguinte instrução.

    ALTER DATABASE database_name
        SET ONLINE;
    
  5. Execute a consulta a seguir para verificar se houve alteração no arquivo.

    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 de disco programada

Para realocar um arquivo como parte de um processo de manutenção de disco programada, execute as seguintes etapas:

  1. Para cada arquivo a ser movido, execute a seguinte instrução.

    ALTER DATABASE database_name
        MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
    
  2. Para executar a manutenção, pare a instância do SQL Server ou desligue o sistema. Para obter mais informações, confira Iniciar, parar, pausar, retomar e reiniciar os serviços do SQL Server.

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

  4. Reinicie a instância do SQL Server ou o servidor. Para obter mais informações, confira Iniciar, parar, pausar, retomar e reiniciar os serviços do SQL Server

  5. Execute a consulta a seguir para verificar se houve alteração no arquivo.

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

Falha no procedimento de recuperação

Se um arquivo tiver que ser movido devido à uma falha de hardware, execute as seguintes etapas para realocar o arquivo no novo local.

Importante

Se o banco de dados não puder ser inicializado, ou seja, ele está em modo de suspeição ou em estado não recuperado, apenas os membros de função fixa sysadmin podem mover o arquivo.

  1. Interrompa a instância do SQL Server, se já tiver sido iniciado.

  2. Inicie a instância do SQL Server no modo de recuperação master digitando um dos seguintes comandos no prompt de comando.

  3. Para cada arquivo a ser 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, veja Usar o Utilitário sqlcmd.

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

  5. Pare 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. Execute a consulta a seguir para verificar se houve alteração no arquivo.

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

Exemplos

O exemplo seguinte move o arquivo de log AdventureWorks2022 para um novo local como parte de uma realocação planejada.

  1. Verifique se você está no contexto do banco de dados master.

    USE master;
    GO
    
  2. Retorne o nome do arquivo lógico.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'AdventureWorks2022')
          AND type_desc = N'LOG';
    GO
    
  3. Defina o banco de dados offline.

    ALTER DATABASE AdventureWorks2022
        SET OFFLINE;
    GO
    
  4. Mova fisicamente o arquivo para uma nova localização. Na instrução a seguir, modifique o caminho especificado em FILENAME para o novo local do arquivo em seu servidor.

    ALTER DATABASE AdventureWorks2022
        MODIFY FILE (NAME = AdventureWorks2022_Log, FILENAME = 'C:\NewLoc\AdventureWorks2022_Log.ldf');
    GO
    
    ALTER DATABASE AdventureWorks2022
        SET ONLINE;
    GO
    
  5. Verifique o novo local.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'AdventureWorks2022')
          AND type_desc = N'LOG';