Mover bases de datos de usuario

Actualizado: 5 de diciembre de 2005

En SQL Server 2005, puede mover los archivos de datos, del registro y del catálogo de texto 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, utilice las operaciones copia de seguridad y restauración o separar y adjuntar.

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

[!NOTA] 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, vea Administrar los metadatos cuando una base de datos pasa a estar disponible en otra instancia de servidor.

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. Ejecute la instrucción siguiente:

    ALTER DATABASE database_name SET OFFLINE
    
  2. Mueva el archivo o los archivos a la nueva ubicación.

  3. Con cada archivo que mueva, ejecute la instrucción siguiente:

    ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name, FILENAME = 'new_path\os_file_name' )
    
  4. Ejecute la instrucción siguiente:

    ALTER DATABASE database_name SET ONLINE
    
  5. Compruebe el cambio de archivo 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 obtener más información, vea Detener servicios.

  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, vea Iniciar y reiniciar servicios.

  5. Compruebe el cambio de archivo 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 un error

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.

ms345483.note(es-es,SQL.90).gifImportante:
Si no se puede iniciar la base de datos, es decir, si se encuentra en modo sospechoso o en un estado no recuperado, sólo los miembros de la función fija 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 sólo 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 obtener más información, vea Cómo iniciar una instancia de SQL Server (Comandos net).

  3. Para cada archivo que se va a mover, utilice 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 acerca de cómo usar la utilidad sqlcmd, vea Usar la utilidad sqlcmd.

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

  5. Detenga la instancia de SQL Server.

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

  7. Inicie la instancia de SQL Server. Por ejemplo, ejecute:

  8. Compruebe el cambio de archivo ejecutando la consulta siguiente:

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

Mover catálogos de texto

Para mover catálogos de texto, siga los pasos que se indican a continuación. Tenga en cuenta que al especificar la nueva ubicación del catálogo, sólo se especificará new_path en lugar de new_path/os_file_name.

  1. Ejecute la instrucción siguiente:

    ALTER DATABASE database_name SET OFFLINE
    
  2. Mueva el catálogo de texto a la nueva ubicación.

  3. Ejecute la instrucción siguiente, donde logical_name es el valor de la columna name de sys.database_files y new_path es la nueva ubicación del catálogo.

    ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path')
    
  4. Ejecute la instrucción siguiente:

    ALTER DATABASE database_name SET ONLINE
    

También puede utilizar la cláusula FOR ATTACH de la instrucción CREATE DATABASE para mover un catálogo de texto. En el ejemplo siguiente se crea un catálogo de texto en la base de datos AdventureWorks. Para moverlo a una nueva ubicación, se separa la base de datos AdventureWorks y se mueve físicamente el catálogo de texto a la nueva ubicación. A continuación, se adjunta la base de datos especificando la nueva ubicación del catálogo de texto.

USE AdventureWorks;
CREATE FULLTEXT CATALOG AdvWksFtCat AS DEFAULT;
GO
USE master;
GO
--Detach the AdventureWorks database.
sp_detach_db AdventureWorks;
GO
--Physically move the full-text catalog to the new location.
--Attach the AdventureWorks database and specify the new location of the full-text catalog.
CREATE DATABASE AdventureWorks ON 
    (FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks_Data.mdf'), 
    (FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\AdventureWorks_log.ldf'),
    (FILENAME = 'c:\myFTCatalogs\AdvWksFtCat')
FOR ATTACH;
GO

Ejemplos

En el ejemplo siguiente se mueve el archivo de registro de AdventureWorks 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'AdventureWorks')
    AND type_desc = N'LOG';
GO
ALTER DATABASE AdventureWorks 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 AdventureWorks 
    MODIFY FILE ( NAME = AdventureWorks_Log, 
                  FILENAME = 'C:\NewLoc\AdventureWorks_Log.ldf');
GO
ALTER DATABASE AdventureWorks 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'AdventureWorks')
    AND type_desc = N'LOG';

Vea también

Conceptos

Separar y adjuntar bases de datos
Mover bases de datos del sistema
Detener servicios

Otros recursos

ALTER DATABASE (Transact-SQL)
CREATE DATABASE (Transact-SQL)
Modificar una base de datos
Mover archivos de base de datos
BACKUP (Transact-SQL)
RESTORE (Transact-SQL)
Iniciar y reiniciar servicios

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

5 de diciembre de 2005

Contenido modificado:
  • Se corrigieron los pasos de todos los procedimientos.