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:
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');
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áusulaWITH <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;
Mueva el archivo o los archivos a la nueva ubicación.
Ejecute la instrucción siguiente:
ALTER DATABASE database_name SET ONLINE;
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:
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');
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.
Mueva el archivo o los archivos a la nueva ubicación.
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.
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.
Detenga la instancia de SQL Server si ya se había iniciado.
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 Inicio, detención, pausa, reanudación y reinicio de servicios de SQL Server. Para obtener información sobre Linux, consulte Inicio, detención y reinicio de servicios SQL Server en Linux.
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.
Salga de la utilidad sqlcmd o SQL Server Management Studio para ello.
Detenga la instancia del Agente SQL Server.
Mueva el archivo o los archivos a la nueva ubicación.
Inicie la instancia del Agente SQL Server. Por ejemplo, ejecute:
NET START MSSQLSERVER
.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.
Asegúrese de que está en el contexto de la base de datos
master
.USE master; GO
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
Establezca la base de datos sin conexión.
ALTER DATABASE AdventureWorks2022 SET OFFLINE; GO
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
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';