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 Movimiento de bases de datos del sistema.

Consideraciones

Al mover 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 obtener más información, consulte Administración de los metadatos cuando una base de datos pasa a estar disponible en otro servidor (SQL Server).

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 .

A partir de SQL Server 2008 R2 (10.50.x), 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 ahora automáticamente al mover una base de datos.

Nota:

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

Procedimiento de reubicación planeada

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 bloqueará 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. Detenga la instancia de SQL Server o cierre el sistema para realizar el mantenimiento. Para más información, consulte Iniciar, detener, pausar, reanudar y reiniciar el motor de base de datos, Agente SQL Server o el Servicio SQL Server Browser.

  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 Iniciar, detener, pausar, reanudar y reiniciar el motor de base de datos, Agente SQL Server o el Servicio SQL Server Browser.

  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 se inició.

  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.

    • Para una instancia predeterminada (MSSQLSERVER), ejecute el siguiente comando:

      NET START MSSQLSERVER /f /T3608  
      
    • Para una instancia con nombre, ejecute el siguiente comando:

      NET START MSSQL$instancename /f /T3608  
      

    Para más información, consulte Iniciar, detener, pausar, reanudar y reiniciar el motor de base de datos, Agente SQL Server o el Servicio SQL Server Browser.

  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.

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'AdventureWorks2022')  
    AND type_desc = N'LOG';  
GO  
ALTER DATABASE AdventureWorks2022 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 AdventureWorks2022   
    MODIFY FILE ( NAME = AdventureWorks2022_Log,   
                  FILENAME = 'C:\NewLoc\AdventureWorks2022_Log.ldf');  
GO  
ALTER DATABASE AdventureWorks2022 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'AdventureWorks2022')  
    AND type_desc = N'LOG';  

Consulte también