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

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 dañino 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.

En SQL Server 2008, puede utilizar las operaciones de separar y adjuntar para actualizar una base de datos de usuario de SQL Server 2000 o SQL Server 2005. Después de asociar una base de datos de SQL Server 2005 o SQL Server 2000 a SQL Server 2008, la base de datos se pone inmediatamente disponible y se actualiza a continuación automáticamente.

Sin embargo, se aplican las siguientes restricciones:

  • No pueden adjuntarse las copias de las bases de datos maestras, modelo o msdb creadas mediante SQL Server 2000 o SQL Server 2005.

  • Cuando adjunte una base de datos replicada que fue copiada en lugar de separada:

    • Si se adjunta la base de datos a una versión actualizada de la misma instancia de servidor, es necesario ejecutar sp_vupgrade_replication para actualizar la replicación una vez finalizada la operación de adjuntar. Para obtener más información, vea sp_vupgrade_replication (Transact-SQL).

    • Si adjunta la base de datos a una instancia de servidor diferente, sin que importe la versión, debe ejecutar sp_removedbreplication para quitar la replicación una vez completada la operación de adjuntar. Para obtener más información, vea sp_removedbreplication (Transact-SQL).

  • Cuando se utilizan las palabras clave APPLY, PIVOT, TABLESAMPLE o UNPIVOT en bases de datos actualizadas de SQL Server 2000 a SQL Server 2008, el nivel de compatibilidad de la base de datos debe estar establecido en 100. Para establecer el nivel de compatibilidad de la base de datos, vea sp_dbcmptlevel (Transact-SQL).

    Nota importanteImportante

    En el Service Pack 3 (SP3) de SQL Server 2000 y versiones posteriores de SQL Server, las operaciones de adjuntar y separar deshabilitan el encadenamiento de propiedad entre bases de datos si se establece la opción cross db ownership chaining en 0. Para obtener información sobre cómo habilitar el encadenamiento, vea cross db ownership chaining (opción).

Opciones de actualización de índices de texto completo

[!NOTA]

Después de asociar una base de datos de SQL Server 2005 o SQL Server 2000 a SQL Server 2008, la base de datos se pone inmediatamente disponible y se actualiza a continuación automáticamente. Si la base de datos tiene índices de texto completo, el proceso de actualización los importa, los restablece o los vuelve a generar, dependiendo del valor de la propiedad de servidor upgrade_option. Si la opción de actualización se establece en importar (upgrade_option = 2) o en volver a generar (upgrade_option = 0), los índices de texto completo no estarán disponibles durante la actualización. Dependiendo de la cantidad de datos que se indicen, la importación puede requerir varias horas y la operación de volver a generar puede requerir hasta diez veces más. Observe también que cuando la opción de actualización se establece en importar, se vuelven a generar los índices de texto completo asociados si no se dispone de un catálogo de texto completo. Para cambiar el valor de la propiedad de servidor upgrade_option, utilice sp_fulltext_service.

Procedimientos

Para actualizar una base de datos mediante las operaciones de separar y adjuntar

  1. Separe la base de datos de la instancia de SQL Server 7.0 o SQL Server 2000 mediante el procedimiento almacenado sp_detach_db.

    Para obtener más información, vea los Libros en pantalla de SQL Server de esa versión de SQL Server.

    [!NOTA]

    En SQL Server 2005, este procedimiento almacenado tiene opciones nuevas. Para obtener más información, vea sp_detach_db (Transact-SQL).

  2. También puede mover los archivos de la base de datos separada y los archivos de registro.

    Debe mover los archivos de registro, junto con los archivos de datos, incluso aunque piense crear 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 la copia original del registro todavía está en esa ubicación, se adjuntará 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 a la instancia de servidor SQL Server 2005, mediante la instrucción CREATE DATABASE con la opción FOR ATTACH o FOR ATTACH_REBUILD_LOG.

    [!NOTA]

    Para obtener información acerca de cómo adjuntar una base de datos de SQL Server 2005 mediante el Explorador de objetos, vea Cómo adjuntar una base de datos (SQL Server Management Studio).

  4. Se recomienda ejecutar DBCC UPDATEUSAGE en la base de datos actualizada.

    En versiones anteriores de SQL Server, los valores del recuento de filas por tabla y por índice y del recuento de páginas pueden llegar a ser incorrectos. Por lo tanto, las bases de datos que se crearon en versiones anteriores a SQL Server 2005 pueden contener recuentos incorrectos. Después de actualizar una base de datos a SQL Server 2005, se recomienda ejecutar DBCC UPDATEUSAGE para corregir los recuentos no válidos. Esta instrucción de DBCC corrige los recuentos de las filas, las páginas utilizadas, las páginas reservadas, las páginas hoja y las páginas de datos de una tabla o un índice. Para obtener más información, vea DBCC UPDATEUSAGE (Transact-SQL).

  5. Si realiza una copia de la base de datos (en lugar de moverla), también puede volver a adjuntar la base de datos original de la instancia de SQL Server 7.0 o SQL Server 2000 mediante los procedimientos almacenados sp_attach_db o sp_attach_single_file_db.

    Para obtener más información, vea los Libros en pantalla de SQL Server de esa versión de SQL Server.

Nivel de compatibilidad de la base de datos después de actualizar

Los niveles de compatibilidad de las bases de datos tempdb, modelo, msdb y Recurso quedan establecidos en 100 después de la actualización. La base de datos maestra del sistema conserva el nivel de compatibilidad que tenía antes de la actualización, a menos que dicho nivel sea inferior a 80. Si el nivel de compatibilidad de la base de datos maestra era inferior a 80 antes de la actualización, se establece en 80 después de la misma.

Si el nivel de compatibilidad de una base de datos de usuario era 80 o 90 antes de la actualización, permanece igual después de la misma. Si el nivel de compatibilidad era igual o inferior a 70 antes de la actualización, en la base de datos actualizada, el nivel de compatibilidad se establece en 80, que es el nivel de compatibilidad mínimo admitido en SQL Server 2008.

[!NOTA]

Las nuevas bases de datos de usuario heredarán el nivel de compatibilidad de la base de datos modelo.

Administrar metadatos en la instancia de servidor actualizada

Al adjuntar una base de datos a otra instancia de servidor, para que los usuarios y las aplicaciones puedan utilizarla de igual manera, puede que tenga que volver a crear algunos o todos los metadatos de la base de datos, como los inicios de sesión, los trabajos y los permisos, en la otra instancia de servidor. Para obtener más información, vea Administrar los metadatos cuando una base de datos pasa a estar disponible en otra instancia de servidor.

Ejemplos

En el siguiente ejemplo se actualiza la base de datos pubs de SQL Server 2000 a una base de datos de SQL Server 2005 mediante instrucciones Transact-SQL para separar y adjuntar la base de datos.

  1. Conecte el Analizador de consultas SQL Server 2000 a una instancia de servidor que tenga adjuntada pubs y separe la base de datos mediante el procedimiento almacenado sp_detach_db.

    USE master;
    GO
    EXEC sp_detach_db @dbname = N'pubs';
    GO
    
  2. En este ejemplo, utilizando el método que desee, copie los archivos de pubs (pubs.mdf y pubs_log.ldf) de C:\Archivos de programa\Microsoft SQL Server\MSSQL\Data\ (ubicación predeterminada de pubs en SQL Server 2000) a C:\Archivos de programa\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\ (directorio de datos de SQL Server 2005).

    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.

    [!NOTA]

    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\nombreDeRecursoCompartido\rutaDeAcceso\nombreDeArchivo. Al igual que con la escritura de archivos en un disco duro local, la cuenta de usuario que utiliza SQL Server debe tener los permisos necesarios para leer o escribir en el archivo del disco remoto.

  3. Adjunte la base de datos pubs copiada y, si lo desea, los archivos de registro a una instancia de SQL Server 2005 (en este ejemplo se utiliza el mismo nombre de base de datos). En SQL Server Management Studio, abra una nueva consulta del Editor de consultas y conéctese a la instancia de servidor en la que desee adjuntar la base de datos.

    Ejecute la siguiente instrucción CREATE DATABASE.

    USE master;
    GO
    CREATE DATABASE pubs ON PRIMARY 
       (FILENAME = 
          'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\pubs.mdf')
       LOG ON (FILENAME = 
          'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Data\pubs_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, haga clic en la ventana del Explorador de objetos y seleccione Ver > Actualizar. Cuando se expande el nodo Bases de datos, la base de datos recién adjuntada aparecerá en la lista de bases de datos.

  4. Si lo desea, puede volver a adjuntar la base de datos pubs original a la instancia de SQL Server 2000 mediante el procedimiento almacenado sp_attach_db. En el Analizador de consultas, escriba:

    USE master;
    Go
    EXEC sp_attach_db @dbname = N'pubs', 
       @filename1 = 
          N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf', 
       @filename2 = 
          N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf';
    GO