Actualizar una base de datos mediante Separar y Adjuntar (Transact-SQL)Upgrade a Database Using Detach and Attach (Transact-SQL)

En este tema se describe cómo usar las operaciones de separar y adjuntar para actualizar una base de datos de SQL Server 2017SQL Server 2017.This topic describes how to use detach and attach operations to upgrade a database in SQL Server 2017SQL Server 2017. Después de asociarla a SQL Server 2017SQL Server 2017, la base de datos está disponible de inmediato y se actualiza automáticamente.After being attached to SQL Server 2017SQL Server 2017, the database is available immediately and is automatically upgraded.

En este temaIn This Topic

Antes de comenzar Before You Begin

Limitaciones y restricciones Limitations and Restrictions

  • Las bases de datos del sistema no pueden adjuntarse.The system databases cannot be attached.

  • 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.Attach and detach disable cross-database ownership chaining for the database by setting its cross db ownership chaining option to 0. Para obtener más información sobre cómo habilitar el encadenamiento, vea cross db ownership chaining (opción de configuración del servidor).For information about enabling chaining, see cross db ownership chaining Server Configuration Option.

  • Cuando adjunte una base de datos replicada que fue copiada en lugar de separada:When attaching a replicated database that was copied instead of detached:

    • 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.If you attach the database to an upgraded version of the same server instance, you must execute sp_vupgrade_replication to upgrade replication after the attach operation finishes. Para obtener más información, vea sp_vupgrade_replication (Transact-SQL).For more information, see 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.If you attach the database to a different server instance (regardless of version), you must execute sp_removedbreplication to remove replication after the attach operation finishes. Para obtener más información, vea sp_removedbreplication (Transact-SQL).For more information, see sp_removedbreplication (Transact-SQL).

Recomendaciones Recommendations

Se recomienda no adjuntar ni restaurar bases de datos de orígenes desconocidos o que no sean de confianza.We recommend that you do not attach or restore databases from unknown or untrusted sources. Es posible que dichas bases de datos contengan código malintencionado que podría ejecutar código Transact-SQLTransact-SQL no deseado o provocar errores al modificar el esquema o la estructura de la base de datos física.Such databases could contain malicious code that might execute unintended Transact-SQLTransact-SQL code or cause errors by modifying the schema or the physical database structure. Para usar una base de datos desde 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.Before you use a database from an unknown or untrusted source, run DBCC CHECKDB on the database on a nonproduction server and also examine the code, such as stored procedures or other user-defined code, in the database.

Para actualizar una base de datos mediante las operaciones de separar y adjuntar To Upgrade a Database by Using Detach and Attach

  1. Separe la base de datos.Detach the database. Para obtener más información, vea Separar una base de datosFor more information, see Detach a Database.

  2. También puede mover los archivos de la base de datos separada y los archivos de registro.Optionally, move the detached database file or files and the log file or files.

    Debe mover los archivos de registro, junto con los archivos de datos, incluso aunque piense crear archivos de registro.You should move the log files along with the data files, even if you intend to create new log files. En algunos casos, para volver a adjuntar una base de datos son necesarios sus archivos de registro.In some cases, reattaching a database requires its existing log files. Por tanto, mantenga siempre todos los archivos de registro separados hasta que la base de datos se haya adjuntado correctamente sin ellos.Therefore, always keep all the detached log files until the database has been successfully attached without them.

    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.If you try to attach the database without specifying the log file, the attach operation will look for the log file in its original location. Si la copia original del registro todavía está en esa ubicación, se adjuntará esa copia.If the original copy of the log still exists in that location, that copy is attached. 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).To avoid using the original log file, either specify the path of the new log file or remove the original copy of the log file (after copying it to the new location).

  3. Adjunte los archivos copiados a la instancia de SQL Server 2017SQL Server 2017.Attach the copied files to the instance of SQL Server 2017SQL Server 2017. Para obtener más información, consulte Attach a Database.For more information, see Attach a Database.

EjemploExample

El ejemplo siguiente actualiza una copia de una base de datos de una versión anterior de SQL Server.The following example upgrades a copy of a database from an earlier version of SQL Server. Las instrucciones Transact-SQLTransact-SQL se ejecutan en una ventana del Editor de consultas que esté conectada a la instancia del servidor a la que se ha adjuntado.The Transact-SQLTransact-SQL statements are executed in a Query Editor window that is connected to the server instance to which is attached.

  1. Separe la base de datos ejecutando las siguientes instrucciones Transact-SQLTransact-SQL :Detach the database by executing the following Transact-SQLTransact-SQL statements:

    USE master;  
    GO  
    EXEC sp_detach_db @dbname = N'MyDatabase';  
    GO  
    
  2. Mediante el método que elija, copie los archivos de datos y de registro a la nueva ubicación.Using the method of your choice, copy the data and log files to the new location.

    Importante

    En el caso de una base de datos de producción, coloque la base de datos y el registro de transacciones en discos independientes.For a production database, place the database and transaction log on separate disks.

    Para copiar archivos a través de la red en un disco de un equipo remoto, use el nombre UNC (Convención de nomenclatura universal) de la ubicación remota.To copy files over the network to a disk on a remote computer, use the universal naming convention (UNC) name of the remote location. Un nombre UNC toma la forma \\nombreDeServidor\nombreDelRecursoCompartido\rutaDeAcceso\nombreDeArchivo.A UNC name takes the form \\Servername\Sharename\Path\Filename. De la misma forma que al escribir archivos en el disco duro local, se debe conceder a la cuenta de usuario que usa la instancia de SQL ServerSQL Serverlos permisos necesarios para leer o escribir en archivos del disco remoto.As with writing files to the local hard disk, the appropriate permissions that are required to read or write to a file on the remote disk must be granted to the user account used by the instance of SQL ServerSQL Server.

  3. Adjunte la base de datos movida y, opcionalmente, su registro ejecutando la siguiente instrucción Transact-SQLTransact-SQL :Attach the moved database and, optionally, its log by executing the following Transact-SQLTransact-SQL statement:

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

    En SQL Server Management StudioSQL Server Management Studio, una base de datos recién adjuntada no es inmediatamente visible en el Explorador de objetos.In SQL Server Management StudioSQL Server Management Studio, a newly attached database is not immediately visible in Object Explorer. Para ver la base de datos, en el Explorador de objetos, haga clic en Ver y, a continuación, en Actualizar.To view the database, in Object Explorer, click View, and then Refresh. 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.When the Databases node is expanded in Object Explorer, the newly attached database now appears in the list of databases.

Seguimiento: Después de actualizar una base de datos de SQL Server Follow Up: After Upgrading a SQL Server Database

Si la base de datos tiene índices de texto completo, el proceso de actualización los importa, los restablece o los vuelve a generar, en función del valor de la propiedad del servidor upgrade_option .If the database has full-text indexes, the upgrade process either imports, resets, or rebuilds them, depending on the setting of the upgrade_option server property. 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.If the upgrade option is set to import (upgrade_option = 2) or rebuild (upgrade_option = 0), the full-text indexes will be unavailable during the upgrade. Dependiendo de la cantidad de datos que se indicen, la importación puede requerir varias horas y volver a generar puede requerir hasta diez veces más.Depending the amount of data being indexed, importing can take several hours, and rebuilding can take up to ten times longer. 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.Note also that when the upgrade option is set to import, the associated full-text indexes are rebuilt if a full-text catalog is not available. Para cambiar el valor de la propiedad de servidor upgrade_option , use sp_fulltext_service.To change the setting of the upgrade_option server property, use sp_fulltext_service.

Nivel de compatibilidad de la base de datos después de la actualizaciónDatabase Compatibility Level After Upgrade

Si el nivel de compatibilidad de una base de datos de usuario es 100 o superior antes de la actualización, permanece igual después de la misma.If the compatibility level of a user database is 100 or higher before upgrade, it remains the same after upgrade. Si el nivel de compatibilidad es 90 antes de la actualización en la base de datos actualizada, el nivel de compatibilidad se establece en 100, que es el nivel de compatibilidad mínimo admitido en SQL Server 2017SQL Server 2017.If the compatibility level is 90 before upgrade in the upgraded database, the compatibility level is set to 100, which is the lowest supported compatibility level in SQL Server 2017SQL Server 2017. Para obtener más información, vea Nivel de compatibilidad de ALTER DATABASE (Transact-SQL).For more information, see ALTER DATABASE Compatibility Level (Transact-SQL).

Administrar metadatos en la instancia de servidor actualizadaManaging Metadata on the Upgraded Server Instance

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.When you attach a database onto another server instance, to provide a consistent experience to users and applications, you might have to re-create some or all of the metadata for the database, such as logins, jobs, and permissions, on the other server instance. Para obtener más información, vea Administrar los metadatos cuando una base de datos pasa a estar disponible en otra instancia del servidor (SQL Server).For more information, see Manage Metadata When Making a Database Available on Another Server Instance (SQL Server).

La clave maestra de servicio y el cifrado de la clave maestra de la base de datos cambia de 3DES a AESService Master Key and Database Master Key Encryption changes from 3DES to AES

SQL Server 2012SQL Server 2012 y versiones posteriores usan el algoritmo de cifrado AES para proteger la clave maestra de servicio (SMK) y la clave maestra de la base de datos (DMK). and higher versions uses the AES encryption algorithm to protect the service master key (SMK) and the database master key (DMK). AES es un algoritmo de cifrado más reciente que el algoritmo 3DES empleado en versiones anteriores.AES is a newer encryption algorithm than 3DES used in earlier versions. La primera vez que se adjunta una base de datos o se restaura en una instancia nueva de SQL ServerSQL Server, aún no se ha almacenado una copia de la clave maestra de la base de datos (cifrada por la clave maestra de servicio) en el servidor.When a database is first attached or restored to a new instance of SQL ServerSQL Server, a copy of the database master key (encrypted by the service master key) is not yet stored in the server. Debe usar la instrucción OPEN MASTER KEY para descifrar la clave maestra de la base de datos (DMK).You must use the OPEN MASTER KEY statement to decrypt the database master key (DMK). Una vez que se ha descifrado la clave maestra de la base de datos, tiene la posibilidad de habilitar el descifrado automático en el futuro usando la instrucción ALTER MASTER KEY REGENERATE para proporcionar al servidor una copia de la clave maestra de la base de datos cifrada con la clave maestra de servicio (SMK).Once the DMK has been decrypted, you have the option of enabling automatic decryption in the future by using the ALTER MASTER KEY REGENERATE statement to provision the server with a copy of the DMK, encrypted with the service master key (SMK). Cuando una base de datos se haya actualizado desde una versión anterior, se debe volver a generar la DMK para usar el algoritmo AES más reciente.When a database has been upgraded from an earlier version, the DMK should be regenerated to use the newer AES algorithm. Para obtener más información sobre cómo volver a generar la DMK, vea ALTER MASTER KEY (Transact-SQL).For more information about regenerating the DMK, see ALTER MASTER KEY (Transact-SQL). El tiempo necesario para volver a generar la DMK con el fin de actualizarse a AES depende del número de objetos protegidos por la DMK.The time required to regenerate the DMK key to upgrade to AES depends upon the number of objects protected by the DMK. Solo es necesario volver a generar la DMK una vez y no tiene ningún efecto sobre las nuevas generaciones futuras como parte de una estrategia de rotación de claves.Regenerating the DMK key to upgrade to AES is only necessary once, and has no impact on future regenerations as part of a key rotation strategy.