Compartir por


Mover bases de datos del sistema

Se aplica a: SQL Server

En este artículo se describe cómo mover bases de datos del sistema en SQL Server. Mover bases de datos del sistema puede resultar útil en las situaciones siguientes:

  • Recuperación de un error. Por ejemplo, la base de datos se encuentra en modo sospechoso o se ha cerrado a causa de un error de hardware.

  • Reubicación planeada.

  • Reubicación para el mantenimiento planeado del disco.

Los siguientes procedimientos se aplican para mover archivos de base de datos dentro de una misma instancia de SQL Server. Para mover una base de datos a otra instancia de SQL Server o a otro servidor, use la operación copia de seguridad y restauración.

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 .

Importante

Si se mueve una base de datos del sistema y posteriormente se vuelve a generar la base de datos master, se debe mover de nuevo la base de datos del sistema porque la operación de regeneración instala todas las bases de datos del sistema en su ubicación predeterminada.

Mover bases de datos del sistema

Para mover un archivo de registro o datos de bases de datos del sistema como parte de una operación de reubicación planeada o de mantenimiento programado, siga estos pasos. Esto incluye las bases de datos del sistema model, msdb y tempdb.

Importante

Este procedimiento se aplica a todas las bases de datos del sistema, excepto a las bases de datos master y Resource. Consulte más adelante en este artículo los pasos para mover la base de datos master. La base de datos Resource no se puede mover.

  1. Registre la ubicación existente de los archivos de base de datos que desea mover; para ello, revise la vista de catálogo sys.master_files.

  2. Compruebe que la cuenta de servicio del motor de base de datos de SQL Server tenga permisos completos para la nueva ubicación de los archivos. Para obtener más información, consulte Configurar los permisos y las cuentas de servicio de Windows. Si la cuenta de servicio del motor de base de datos no puede controlar los archivos en su nueva ubicación, la instancia de SQL Server no se iniciará.

  3. Para cada archivo que se vaya a mover, ejecute la siguiente instrucción.

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

    Hasta que se reinicie el servicio, la base de datos sigue usando los archivos de datos y de registro de la ubicación existente.

  4. Detenga la instancia de SQL Server para realizar el mantenimiento. Para más información, consulte Inicio, detención, pausa, reanudación y reinicio de servicios de SQL Server.

  5. Copie el archivo o los archivos de la base de datos en la nueva ubicación. Tenga en cuenta que este no es un paso necesario para la base de datos del sistema tempdb, ya que esos archivos se crean automáticamente en la nueva ubicación.

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

  7. Compruebe el cambio de los archivos ejecutando la consulta siguiente. Las bases de datos del sistema deben comunicar las nuevas ubicaciones de los archivos físicos.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'<database_name>');
    
  8. Puesto que en el paso 5 copió los archivos de base de datos en lugar de moverlos, ahora puede eliminar de forma segura los archivos de base de datos no usados de su ubicación anterior.

Seguimiento: después de mover todas las bases de datos del sistema msdb

Si la base de datos msdb se mueve y está configurada la característica Correo electrónico de base de datos, realice los pasos adicionales siguientes.

  1. Compruebe que Service Broker se haya habilitado para la base de datos msdb; para ello, ejecute la consulta siguiente.

    SELECT is_broker_enabled
    FROM sys.databases
    WHERE name = N'msdb';
    

    Si Service Broker no está habilitado para msdb, debe volver a habilitarse para que la característica Correo electrónico de base de datos funcione. Para más información, consulte ALTER DATABASE ... SET ENABLE_BROKER.

    ALTER DATABASE msdb
        SET ENABLE_BROKER
        WITH ROLLBACK IMMEDIATE;
    

    Confirme que el valor de is_broker_enabled ahora sea 1.

  2. Envíe un mensaje de correo electrónico para comprobar que el Correo electrónico de base de datos funciona.

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 colocar el archivo en otra ubicación. Este procedimiento se aplica a todas las bases de datos del sistema, excepto a las bases de datos master y Resource. En los ejemplos siguientes se usa el símbolo del sistema de Windows y la utilidad sqlcmd.

Importante

Si no se puede iniciar la base de datos, 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. Compruebe que la cuenta de servicio del motor de base de datos de SQL Server tenga permisos completos para la nueva ubicación de los archivos. Para obtener más información, consulte Configurar los permisos y las cuentas de servicio de Windows. Si la cuenta de servicio del motor de base de datos no puede controlar los archivos en su nueva ubicación, la instancia de SQL Server no se iniciará.

  2. Detenga la instancia de SQL Server si se inició.

  3. 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. El uso del parámetro de inicio 3608 impide a SQL Server iniciar y recuperar automáticamente cualquier base de datos excepto la base de datos master. Para más información, consulte Parámetros de inicio y TF3608.

    Los parámetros especificados en estos comandos distinguen entre mayúsculas y minúsculas. Los comandos generan un error cuando los parámetros no se especifican como se indica.

    Para la 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 Inicio, detención, pausa, reanudación y reinicio de servicios de SQL Server.

  4. Inmediatamente después del inicio del servicio con la marca de seguimiento 3608 y /f, inicie una conexión sqlcmd con el servidor para reclamar la conexión única que está disponible. Por ejemplo, al ejecutar sqlcmd localmente en el mismo servidor que la instancia predeterminada (MSSQLSERVER) y para conectarse con la autenticación de integración de Active Directory, ejecute el siguiente comando:

    sqlcmd
    

    Para conectarse a una instancia con nombre en el servidor local, con la autenticación de integración de Active Directory:

    sqlcmd -S localhost\instancename
    

    Para más información sobre la sintaxis de sqlcmd, consulte Utilidad sqlcmd.

    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. Para obtener más información sobre cómo usar la utilidad sqlcmd, vea Usar la utilidad sqlcmd. Una vez abierta la sesión de sqlcmd, ejecute la siguiente instrucción una vez para mover cada archivo:

    ALTER DATABASE database_name
        MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
    GO
    
  5. Salga de la utilidad sqlcmd o SQL Server Management Studio para ello.

  6. Detenga la instancia del Agente SQL Server. Por ejemplo, ejecute NET STOP MSSQLSERVER en el símbolo del sistema.

  7. Copie el archivo o los archivos a la nueva ubicación.

  8. Reinicie la instancia de SQL Server. Por ejemplo, ejecute NET START MSSQLSERVER en el símbolo del sistema.

  9. 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>');
    
  10. Puesto que en el paso 7 copió los archivos de base de datos en lugar de moverlos, ahora puede eliminar de forma segura los archivos de base de datos no usados de su ubicación anterior.

Mover la base de datos master

Para mover la base de datos master, siga estos pasos.

  1. Compruebe que la cuenta de servicio del motor de base de datos de SQL Server tenga permisos completos para la nueva ubicación de los archivos. Para obtener más información, consulte Configurar los permisos y las cuentas de servicio de Windows. Si la cuenta de servicio del motor de base de datos no puede controlar los archivos en su nueva ubicación, la instancia de SQL Server no se iniciará.

  2. En el menú Inicio, busque e inicie el Administrador de configuración de SQL Server. Para más información sobre la ubicación esperada, consulte Administrador de configuración de SQL Server.

  3. En el nodo Servicios de SQL Server, haga clic con el botón derecho en la instancia de SQL Server (por ejemplo, SQL Server (MSSQLSERVER)) y elija Propiedades.

  4. En el cuadro de diálogo Propiedades (nombre_de_instancia) de SQL Server, seleccione la pestaña Propiedades de inicio.

  5. En el cuadro Parámetros existentes, seleccione el parámetro -d. En el cuadro Specify a startup parameter (Especificar un parámetro de inicio), cambie el parámetro a la nueva ruta de acceso del archivo master data. Seleccione Actualizar para guardar el cambio.

  6. En el cuadro Parámetros existentes, seleccione el parámetro -l. En el cuadro Specify a startup parameter (Especificar un parámetro de inicio), cambie el parámetro a la nueva ruta de acceso del archivo master log. Seleccione Actualizar para guardar el cambio.

    El valor de parámetro del archivo de datos debe ir a continuación del parámetro -d y el valor del archivo de registro debe ir a continuación del parámetro -l . En el siguiente ejemplo se muestran los valores de los parámetros para la ubicación predeterminada del archivo de datos master.

    -dC:\Program Files\Microsoft SQL Server\MSSQL<version>.MSSQLSERVER\MSSQL\DATA\master.mdf
    -lC:\Program Files\Microsoft SQL Server\MSSQL<version>.MSSQLSERVER\MSSQL\DATA\mastlog.ldf
    

    Si la reubicación planeada del archivo de datos master es E:\SQLData, los valores de los parámetros cambiarían de la siguiente manera:

    -dE:\SQLData\master.mdf
    -lE:\SQLData\mastlog.ldf
    
  7. Seleccione Aceptar para guardarlos cambios de forma permanente y cierre el cuadro de diálogo Propiedades (nombre_instancia) de SQL Server.

  8. Para detener la instancia de SQL Server, haga clic con el botón derecho en el nombre de la instancia y elija Detener.

  9. Copie los archivos master.mdf y mastlog.ldf a la nueva ubicación.

  10. Reinicie la instancia de SQL Server.

  11. Compruebe el cambio de los archivos de la base de datos master ejecutando la siguiente consulta.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID('master');
    
  12. En este punto, SQL Server se debería ejecutar con normalidad. Sin embargo, Microsoft también recomienda ajustar la entrada del Registro en HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\instance_ID\Setup, donde instance_ID es similar a MSSQL13.MSSQLSERVER. En ese subárbol, cambie el valor SQLDataRoot a la nueva ruta de acceso de la nueva ubicación de los archivos de base de datos master. Si no actualiza el Registro, puede que la aplicación de revisiones y las actualizaciones presenten errores.

  13. Puesto que en el paso 9 copió los archivos de base de datos en lugar de moverlos, ahora puede eliminar de forma segura los archivos de base de datos no usados de su ubicación anterior.

Mover la base de datos de recursos

La ubicación de la base de datos Resource es \<drive>:\Program Files\Microsoft SQL Server\MSSQL\<version>.<instance_name>\MSSQL\Binn\. La base de datos no se puede mover.

Seguimiento: después de mover todas las bases de datos del sistema

Si ha movido todas las bases de datos del sistema a una nueva unidad o volumen o a otro servidor con una letra de unidad diferente, realice las actualizaciones siguientes.

  • Cambie la ruta de acceso del registro del Agente SQL Server. Si no actualiza esta ruta de acceso, el Agente SQL Server no se podrá iniciar.

  • Cambie la ubicación predeterminada de la base de datos. Si la letra de unidad y la ruta de acceso especificada como ubicación predeterminada no existen, es posible que no se pueda crear una nueva base de datos.

Cambiar la ruta de acceso del registro del Agente SQL Server

Si ha movido todas las bases de datos del sistema a un nuevo volumen o las ha migrado a otro servidor con una letra de unidad diferente y la ruta del archivo de registro de errores de Agente SQL SQLAGENT.OUT ya no existe, realice las actualizaciones siguientes.

  1. En SQL Server Management Studio, en el Explorador de objetos, expanda Agente SQL Server.

  2. Haga clic con el botón derecho en Registros de errores y seleccione Configurar.

  3. En el cuadro de diálogo Configurar registros de errores del Agente SQL Server , especifique la nueva ubicación del archivo SQLAGENT.OUT. La ubicación predeterminada es C:\Program Files\Microsoft SQL Server\MSSQL\<version>.<instance_name>\MSSQL\Log\.

Cambiar la ubicación predeterminada de la base de datos

  1. En SQL Server Management Studio, en el Explorador de objetos, conéctese a la instancia deseada de SQL Server. Haga clic con el botón derecho en la instancia y seleccione Propiedades.

  2. En el cuadro de diálogo Propiedades del servidor , seleccione Configuración de base de datos.

  3. En Ubicaciones predeterminadas de la base de datos, busque la nueva ubicación de los archivos de registro y datos.

  4. Detenga e inicie el servicio SQL Server para completar el cambio.

Ejemplos

A Mover la base de datos tempdb

En el ejemplo siguiente se mueven los archivos de datos y registro de tempdb a una nueva ubicación como parte de una reubicación planeada.

Sugerencia

Aproveche esta oportunidad para revisar los archivos tempdb a fin de comprobar que el tamaño y la ubicación sean adecuados. Para más información, consulte Optimización del rendimiento de tempdb en SQL Server.

Puesto que tempdb se vuelve a crear cada vez que se inicia la instancia de SQL Server, no hay que mover físicamente los archivos de datos y de registro. Los archivos se crean en la ubicación nueva cuando se reinicia el servicio en el paso 4. Hasta que se reinicie el servicio, tempdb sigue utilizando los archivos de datos y de registro de la ubicación existente.

  1. Determine los nombres de los archivos lógicos de la base de datos tempdb y su ubicación actual en el disco.

    SELECT name,
           physical_name AS CurrentLocation
    FROM sys.master_files
    WHERE database_id = DB_ID(N'tempdb');
    GO
    
  2. Compruebe que la cuenta de servicio del motor de base de datos de SQL Server tenga permisos completos para la nueva ubicación de los archivos. Para obtener más información, consulte Configurar los permisos y las cuentas de servicio de Windows. Si la cuenta de servicio del motor de base de datos no puede controlar los archivos en su nueva ubicación, la instancia de SQL Server no se iniciará.

  3. Cambie la ubicación de cada archivo con ALTER DATABASE.

    USE master;
    GO
    
    ALTER DATABASE tempdb
        MODIFY FILE (NAME = tempdev, FILENAME = 'E:\SQLData\tempdb.mdf');
    GO
    
    ALTER DATABASE tempdb
        MODIFY FILE (NAME = templog, FILENAME = 'F:\SQLLog\templog.ldf');
    GO
    

    Hasta que se reinicie el servicio, tempdb sigue utilizando los archivos de datos y de registro de la ubicación existente.

  4. Detenga y reinicie la instancia de SQL Server.

  5. Compruebe el cambio de los archivos.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'tempdb');
    
  6. Elimine los archivos tempdb sin usar de la ubicación original.