Cómo mover una base de datos mediante Separar y Adjuntar (Transact-SQL)

Nota importanteImportante

Se recomienda mover las bases de datos mediante el procedimiento de reubicación programada ALTER DATABASE, en lugar del método separar y adjuntar. Para obtener más información, vea ALTER DATABASE (Transact-SQL).

Puede mover una base de datos separada a otra ubicación y volver a adjuntarla a la misma instancia de servidor o a otra.

Nota de seguridadNota de seguridad

Se recomienda no adjuntar ni restaurar bases de datos de orígenes desconocidos o que no sean de confianza. Es posible que dichas bases de datos contengan código malintencionado que podría ejecutar código Transact-SQL no deseado o provocar errores al modificar el esquema o la estructura de la base de datos física. Para utilizar una base de datos procedente de un origen desconocido o que no sea de confianza, ejecute DBCC CHECKDB en la base de datos de un servidor que no sea de producción y examine también el código, como procedimientos almacenados u otro código definido por el usuario, en la base de datos.

Al asociar una base de datos de SQL Server 2005 que contiene los archivos de catálogo de texto completo a una instancia del servidor de SQL Server 2008, los archivos de catálogo se asocian de su ubicación anterior junto con los demás archivos de base de datos, igual que en SQL Server 2005. Para obtener más información, vea Actualización de la búsqueda de texto completo. Al desasociar una base de datos de SQL Server 2005 actualizada que contiene los archivos de catálogo de texto completo de una instancia del servidor de SQL Server 2008, los archivos de catálogo se mantienen con los otros archivos de base de datos, igual que en SQL Server 2005.

Nota

También puede usar Separar y Adjuntar para actualizar una base de datos de SQL Server 2000 o SQL Server 2005 a SQL Server 2008. Para obtener más información, vea Cómo actualizar una base de datos mediante Separar y Adjuntar (Transact-SQL).

Procedimiento

Para copiar una base de datos mediante el método de separar y adjuntar

  1. Separe la base de datos mediante el procedimiento almacenado sp_detach_db.

  2. En el Explorador de Windows o en una ventana del símbolo del sistema de Windows, mueva el archivo o archivos de la base de datos separada y el archivo o archivos de registro a la nueva ubicación.

    Nota

    Para mover una base de datos de un solo archivo, puede usar el correo electrónico si el tamaño del archivo es lo suficientemente pequeño para acomodar el correo electrónico.

    Debe mover los archivos de registro, incluso aunque piense crear nuevos archivos de registro. En algunos casos, para volver a adjuntar una base de datos son necesarios sus archivos de registro. Por tanto, mantenga siempre todos los archivos de registro separados hasta que la base de datos se haya adjuntado correctamente sin ellos.

    Nota

    Si intenta adjuntar la base de datos sin especificar el archivo de registro, la operación de adjuntar buscará el archivo de registro en su ubicación original. Si aún hay una copia del registro en la ubicación original, se adjunta esa copia. Para evitar que se utilice el archivo de registro original, especifique la ruta de acceso del nuevo archivo de registro o elimine la copia original del archivo de registro (después de copiarlo en la nueva ubicación).

  3. Adjunte los archivos copiados mediante la instrucción CREATE DATABASE de Transact-SQL con una cláusula FOR ATTACH [ WITH <service_broker_option> ] o una cláusula FOR ATTACH_REBUILD_LOG (para obtener más información, vea CREATE DATABASE (Transact-SQL)). Cada base de datos contiene un identificador único que se utiliza para enrutar los mensajes de Service Broker a esa base de datos. Si la base de datos utiliza Service Broker, vea Administrar identidades de Service Broker.

    Nota

    Para obtener más información acerca del modo de adjuntar una base de datos mediante el Explorador de objetos, vea Cómo adjuntar una base de datos (SQL Server Management Studio).

Ejemplo

En el siguiente ejemplo se crea una copia de la base de datos de AdventureWorks2008R2 denominada MyAdventureWorks. Las instrucciones Transact-SQL se ejecutan en una ventana del Editor de consultas que está conectada a la instancia de servidor a la que se ha adjuntado AdventureWorks2008R2.

  1. Separe la base de datos de AdventureWorks2008R2 ejecutando las siguientes instrucciones Transact-SQL:

    USE master;
    GO
    EXEC sp_detach_db @dbname = N'AdventureWorks2008R2';
    GO
    
  2. Mediante el método que elija, copie los archivos de la base de datos (AdventureWorks2008R2_Data.mdf y AdventureWorks2008R2_log) en: C:\MySQLServer\AdventureWorks2008R2_Data.mdf y C:\MySQLServer\AdventureWorks_Log.ldf, respectivamente.

    Nota importanteImportante

    En el caso de una base de datos de producción, coloque la base de datos y el registro de transacciones en discos independientes.

    Para copiar archivos a través de la red en un disco de un equipo remoto, utilice el nombre UNC (Convención de nomenclatura universal) de la ubicación remota. Un nombre UNC toma la forma **\\nombreDeServidor\nombreDelRecursoCompartido\rutaDeAcceso\**nombreDeArchivo. De la misma forma que al escribir archivos en el disco duro local, se debe conceder a la cuenta de usuario que utiliza la instancia de SQL Server los permisos necesarios para leer o escribir en archivos del disco remoto.

  3. Adjunte la base de datos movida y, opcionalmente, su registro ejecutando las siguientes instrucciones Transact-SQL.

    USE master;
    GO
    CREATE DATABASE MyAdventureWorks 
        ON (FILENAME = 'C:\MySQLServer\AdventureWorks2008R2_Data.mdf'),
        (FILENAME = 'C:\MySQLServer\AdventureWorks2008R2_Log.ldf')
        FOR ATTACH;
    GO
    

    Nota

    En SQL Server Management Studio, una base de datos recién adjuntada no es inmediatamente visible en el Explorador de objetos. Para ver la base de datos, en el Explorador de objetos, haga clic en Ver y, a continuación, en Actualizar. Cuando se expande el nodo Bases de datos en el Explorador de objetos, la base de datos recién adjuntada aparecerá en la lista de bases de datos.