Partilhar via


Mover bases de dados de utilizadores

Aplica-se a:SQL Server

No SQL Server, pode mover os ficheiros de dados, registo e catálogo em texto completo de uma base de dados de utilizador para uma nova localização especificando a nova localização do ficheiro na FILENAME cláusula da instrução ALTER DATABASE . Este método aplica-se à movimentação de ficheiros de base de dados dentro da mesma instância: SQL Server. Para mover uma base de dados para outra instância do SQL Server ou para outro servidor, use backup e restauro ou desligar e anexar operações.

Observação

Este artigo aborda a movimentação de ficheiros da base de dados dos utilizadores. Para mover ficheiros de bases de dados do sistema, veja Mover bases de dados do sistema.

Considerações

Quando move uma base de dados para outra instância de servidor, para proporcionar uma experiência consistente aos utilizadores e aplicações, pode ter de recriar alguns ou todos os metadados da base de dados. Para mais informações, consulte Gerir Metadados ao Disponibilizar uma Base de Dados noutro Servidor.

Algumas funcionalidades do Motor de Base de Dados SQL Server alteram a forma como o Motor de Base de Dados armazena informação nos ficheiros da base 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 ofereça suporte a eles. Use a sys.dm_db_persisted_sku_features vista de gestão dinâmica para listar todas as funcionalidades específicas da edição que estão ativadas na base de dados atual.

Os procedimentos neste artigo requerem o nome lógico dos ficheiros da base de dados. Para obter o nome, consulte a coluna do nome na vista de catálogo sys.master_files.

Os catálogos em texto completo estão integrados na base de dados em vez de serem armazenados no sistema de ficheiros. Os catálogos de texto completo movem-se automaticamente quando se move uma base de dados.

Observação

Certifique-se de que a conta de serviço para o procedimento Configurar contas de serviço e permissões do Windows tem permissões para o novo local do ficheiro no sistema de arquivos. Para mais informações, consulte Configurar permissões do sistema de ficheiros para acesso ao Motor de Base de Dados.

Procedimento de relocalização planeada

Para mover um ficheiro de dados ou registo como parte de uma realocação planeada, siga estes passos:

  1. Para cada ficheiro a mover, execute a seguinte instrução.

    ALTER DATABASE database_name
        MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
    
  2. Execute a seguinte instrução para desligar a base de dados.

    ALTER DATABASE database_name
        SET OFFLINE;
    

    Esta ação requer acesso exclusivo à base de dados. Se outra ligação estiver aberta à base de dados, a ALTER DATABASE instrução fica bloqueada até que todas as ligações sejam encerradas. Para anular este comportamento, use a WITH <termination> cláusula. Por exemplo, para reverter automaticamente e desligar todas as outras ligações à base de dados, utilize:

    ALTER DATABASE database_name
         SET OFFLINE
         WITH ROLLBACK IMMEDIATE;
    
  3. Move o ficheiro ou ficheiros para a nova localização.

  4. Execute a seguinte declaração.

    ALTER DATABASE database_name
        SET ONLINE;
    
  5. Verifique a alteração do ficheiro 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>');
    

Relocalização para manutenção programada do disco

Para realocar um ficheiro como parte de um processo de manutenção programada do disco, siga estes passos:

  1. Para cada ficheiro a mover, execute a seguinte instrução.

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

  3. Move o ficheiro ou ficheiros para a nova localização.

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

  5. Verifique a alteração do ficheiro 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 falhas

Se um ficheiro tiver de ser movido devido a uma falha de hardware, utilize os seguintes passos para o realocar para uma nova localização.

Importante

Se a base de dados não puder ser iniciada, ou seja, se estiver em modo suspeito ou num estado não recuperado, só os membros do papel fixo de sysadmin podem mover o ficheiro.

  1. Pare a instância do SQL Server se já estivesse iniciada.

  2. Inicie a instância do SQL Server no modo de recuperação master-only, introduzindo um dos seguintes comandos na linha de comandos.

  3. Para cada ficheiro a mover, utilize comandos sqlcmd ou SQL Server Management Studio para executar a seguinte instrução.

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

    Para mais informações sobre a utilização da utilidade sqlcmd, consulte sqlcmd - usar a utilidade.

  4. Sai da utilidade sqlcmd ou do SQL Server Management Studio.

  5. Pare a instância do SQL Server.

  6. Move o ficheiro ou ficheiros para a nova localização.

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

  8. Verifique a alteração do ficheiro 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>');
    

Examples

O exemplo seguinte move o ficheiro AdventureWorks2025 de registo para um novo local como parte de uma mudança planeada.

  1. Certifica-te de que estás dentro do contexto da master base de dados.

    USE master;
    GO
    
  2. Devolve o nome lógico do ficheiro.

    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. Coloque a base de dados offline.

    ALTER DATABASE AdventureWorks2022
        SET OFFLINE;
    GO
    
  4. Mover fisicamente o ficheiro para um novo local. Na instrução seguinte, modifique o caminho especificado FILENAME para a nova localização do ficheiro no 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 a nova localização.

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