Mover bases de datos de usuario

Se aplica a: SQL Server

En SQL Server, puede mover los archivos de datos, del registro y del catálogo de texto completo de una base de datos de usuario a una nueva ubicación, especificando la nueva ubicación en la cláusula FILENAME de la instrucción ALTER DATABASE. Este método se aplica para mover archivos de la base de datos dentro de la misma instancia de SQL Server. Para mover una base de datos a otra instancia de SQL Server o a otro servidor, use las operaciones de copias de seguridad y restauración o separar y adjuntar.

Nota:

En este artículo se explica cómo mover los archivos de base de datos de usuario. Para mover archivos de base de datos del sistema, vea Mover bases de datos del sistema.

Consideraciones

Cuando mueve una base de datos a otra instancia de servidor, para proporcionar una experiencia coherente a usuarios y aplicaciones, puede que tenga que volver a crear algunos o todos los metadatos de la base de datos. Para más información, consulta Administración de los metadatos cuando una base de datos pasa a estar disponible en otro servidor.

Algunas características del motor de base de datos de SQL Server cambian la manera en que el motor de base de datos almacena información en los archivos de base de datos. Estas características están restringidas a ediciones concretas de SQL Server. Una base de datos que contiene estas características no se puede mover a una edición de SQL Server que no los admita. Utilice la vista de administración dinámica sys.dm_db_persisted_sku_features para enumerar todas las características específicas de la edición habilitadas en la base de datos actual.

Los procedimientos descritos en este artículo requieren el nombre lógico de los archivos de la base de datos. Para obtener el nombre, consulte la columna de nombre de la vista de catálogo sys.master_files .

Los catálogos de texto completo se integran en la base de datos, en lugar de almacenarse en el sistema de archivos. Los catálogos de texto completo se mueven automáticamente al mover una base de datos.

Nota:

Asegúrese de que la cuenta de servicio para Configurar cuentas de servicio y permisos de Windows tiene permisos para la nueva ubicación de archivo en el sistema de archivos. Para obtener más información, consulte Configurar permisos del sistema de archivos para el acceso al motor de base de datos.

Procedimiento de reubicación programada

Para mover un archivo de datos o de registros como parte de una reubicación planeada, siga estos pasos:

  1. Para cada archivo que se va a mover, ejecute la siguiente instrucción.

    ALTER DATABASE database_name
        MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
    
  2. Ejecute la siguiente instrucción para desconectar la base de datos.

    ALTER DATABASE database_name
        SET OFFLINE;
    

    Esta acción requiere acceso exclusivo a la base de datos. Si hay otra conexión abierta en la base de datos, la instrucción ALTER DATABASE se bloquea hasta que se cierren todas las conexiones. Para invalidar este comportamiento, use la cláusula WITH <termination>. Por ejemplo, para revertir y desconectar automáticamente todas las demás conexiones a la base de datos, use:

    ALTER DATABASE database_name
         SET OFFLINE
         WITH ROLLBACK IMMEDIATE;
    
  3. Mueva el archivo o los archivos a la nueva ubicación.

  4. Ejecute la instrucción siguiente:

    ALTER DATABASE database_name
        SET ONLINE;
    
  5. Compruebe el cambio de los archivos ejecutando la consulta siguiente.

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

Reubicación para el mantenimiento planeado del disco

Para reubicar un archivo como parte de un proceso de mantenimiento planeado del disco, siga estos pasos:

  1. Para cada archivo que se va a mover, ejecute la siguiente instrucción.

    ALTER DATABASE database_name
        MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
    
  2. Para llevar a cabo el mantenimiento, detenga la instancia de SQL Server o cierre el sistema. Para más información, consulte Inicio, detención, pausa, reanudación y reinicio de servicios de SQL Server.

  3. Mueva el archivo o los archivos a la nueva ubicación.

  4. Reinicie la instancia de SQL Server o el servidor. Para obtener más información, consulte Inicio, detención, pausa, reanudación y reinicio de servicios de SQL Server.

  5. Compruebe el cambio de los archivos ejecutando la consulta siguiente.

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

Procedimiento de recuperación de errores

Si se debe mover un archivo a causa de un error de hardware, siga los pasos que se indican a continuación para reubicar el archivo.

Importante

Si no se puede iniciar la base de datos, es decir, si se encuentra en modo sospechoso o en un estado no recuperado, solo los miembros del rol fijo sysadmin podrán mover el archivo.

  1. Detenga la instancia de SQL Server si ya se había iniciado.

  2. Inicie la instancia de SQL Server en modo de recuperación solo de master especificando uno de los siguientes comandos en el símbolo del sistema.

  3. En cada uno de los archivos que se van a mover, use los comandos sqlcmd o SQL Server Management Studio para ejecutar la siguiente instrucción.

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

    Para obtener más información sobre cómo usar la utilidad sqlcmd, vea Usar la utilidad sqlcmd.

  4. Salga de la utilidad sqlcmd o SQL Server Management Studio para ello.

  5. Detenga la instancia del Agente SQL Server.

  6. Mueva el archivo o los archivos a la nueva ubicación.

  7. Inicie la instancia del Agente SQL Server. Por ejemplo, ejecute: NET START MSSQLSERVER.

  8. Compruebe el cambio de los archivos ejecutando la consulta siguiente.

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

Ejemplos

En el ejemplo siguiente se mueve el archivo de registro AdventureWorks2022 a la nueva ubicación como parte de una reubicación planeada.

  1. Asegúrese de que está en el contexto de la base de datos master.

    USE master;
    GO
    
  2. Devuelva el nombre de archivo 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. Establezca la base de datos sin conexión.

    ALTER DATABASE AdventureWorks2022
        SET OFFLINE;
    GO
    
  4. Mueva el archivo de forma física a una nueva ubicación. En la siguiente instrucción, modifique la ruta de acceso especificada en FILENAME a la nueva ubicación del archivo en el servidor.

    ALTER DATABASE AdventureWorks2022
        MODIFY FILE (NAME = AdventureWorks2022_Log, FILENAME = 'C:\NewLoc\AdventureWorks2022_Log.ldf');
    GO
    
    ALTER DATABASE AdventureWorks2022
        SET ONLINE;
    GO
    
  5. Compruebe la nueva ubicación.

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