Adjuntar y separar bases de datos (SQL Server)Database Detach and Attach (SQL Server)

Se aplica a:Applies to: síSQL ServerSQL Server (todas las versiones admitidas) yesSQL ServerSQL Server (all supported versions) Se aplica a:Applies to: síSQL ServerSQL Server (todas las versiones admitidas) yesSQL ServerSQL Server (all supported versions)

Los archivos de registro de datos y transacciones de una base de datos se pueden desasociar y volverse a adjuntar posteriormente a la misma instancia u otra instancia de SQL ServerSQL Server.The data and transaction log files of a database can be detached and then reattached to the same or another instance of SQL ServerSQL Server. Separar y adjuntar una base de datos es útil si desea cambiar la base de datos a otra instancia de SQL ServerSQL Server en el mismo equipo o si desea mover la base de datos.Detaching and attaching a database is useful if you want to change the database to a different instance of SQL ServerSQL Server on the same computer or to move the database.

SeguridadSecurity

Los permisos de acceso a archivos se establecen durante una serie de operaciones de base de datos, incluidas las operaciones de desasociar o adjuntar una base de datos.File access permissions are set during a number of database operations, including detaching or attaching a database.

Importante

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.

Separar una base de datosDetaching a Database

Al separar una base de datos, la está quitando de la instancia de SQL ServerSQL Server , pero la deja intacta en sus archivos de datos y en los archivos de registro de transacciones.Detaching a database removes it from the instance of SQL ServerSQL Server but leaves the database intact within its data files and transaction log files. Estos archivos pueden utilizarse después para adjuntar la base de datos a cualquier instancia de SQL ServerSQL Server, incluido el servidor del que se separó.These files can then be used to attach the database to any instance of SQL ServerSQL Server, including the server from which the database was detached.

No podrá separar una base de datos si se cumple cualquiera de las condiciones siguientes:You cannot detach a database if any of the following are true:

  • La base de datos está replicada y publicada.The database is replicated and published. Si está replicada, la base de datos no debe estar publicada.If replicated, the database must be unpublished. Antes de separarla, debe deshabilitar la publicación ejecutando sp_replicationdboption.Before you can detach it, you must disable publishing by running sp_replicationdboption.

    Nota

    Si no puede usar sp_replicationdboption, puede quitar la replicación ejecutando sp_removedbreplication.If you cannot use sp_replicationdboption, you can remove replication by running sp_removedbreplication.

  • Existe una instantánea de base de datos en la base de datos.A database snapshot exists on the database.

    Para poder separar la base de datos, debe quitar todas sus instantáneas.Before you can detach the database, you must drop all of its snapshots. Para obtener más información, vea Eliminar una instantánea de base de datos (Transact-SQL).For more information, see Drop a Database Snapshot (Transact-SQL).

    Nota

    No puede separar ni adjuntar una instantánea de base de datos.A database snapshot cannot be detached or attached.

  • La base de datos forma parte de un grupo de disponibilidad Always On.The database is part of an Always On availability group.

    La base de datos no se puede desasociar hasta que se quite del grupo de disponibilidad.The database cannot be detached until it is removed from the availability group. Para obtener más información, consulte Eliminación de una base de datos principal de un grupo de disponibilidad Always On.For more information, see Remove a primary database from an Always On availability group.

  • Se va a reflejar la base de datos en una sesión de creación de reflejo de la base de datos.The database is being mirrored in a database mirroring session.

    No se puede separar la base de datos a menos que se termine la sesión.The database cannot be detached unless the session is terminated. Para obtener más información, vea Quitar la creación de reflejo de la base de datos (SQL Server).For more information, see Removing Database Mirroring (SQL Server).

  • La base de datos es sospechosa.The database is suspect. Una base de datos sospechosa no puede ser separada. Antes de poder separarla, debe ponerla en modo de emergencia.A suspect database cannot be detached; before you can detach it, you must put it into emergency mode. Para obtener más información sobre cómo poner una base de datos en modo de emergencia, vea ALTER DATABASE (Transact-SQL).For more information about how to put a database into emergency mode, see ALTER DATABASE (Transact-SQL).

  • La base de datos es una base de datos del sistema.The database is a system database.

Hacer copias de seguridad y restauración, y separarBackup and Restore and Detach

Al separar una base de datos de solo lectura se pierde información acerca de las bases diferenciales de las copias de seguridad diferenciales.Detaching a read-only database loses information about the differential bases of differential backups. Para obtener más información, vea Copias de seguridad diferenciales (SQL Server).For more information, see Differential Backups (SQL Server).

Responder a errores de separaciónResponding to Detach Errors

Los errores generados durante la separación de una base de datos pueden impedir que la base de datos se cierre sin problemas y que se vuelva a generar el registro de transacciones.Errors produced while detaching a database can prevent the database from closing cleanly and the transaction log from being rebuilt. Si recibe un mensaje de error, realice las siguientes acciones correctoras:If you receive an error message, perform the following corrective actions:

  1. Vuelva a adjuntar todos los archivos asociados a la base de datos, no solo el archivo principal.Reattach all files associated with the database, not just the primary file.

  2. Resuelva el problema que causó el mensaje de error.Resolve the problem that caused the error message.

  3. Vuelva a separar la base de datos.Detach the database again.

Adjuntar una base de datosAttaching a Database

Puede adjuntar una base de datos de SQL ServerSQL Server copiada o separada.You can attach a copied or detached SQL ServerSQL Server database. Al adjuntar una base de datos de SQL Server 2005 (9.x)SQL Server 2005 (9.x) que contiene los archivos de catálogo de texto completo a una instancia del servidor de SQL Server 2019 (15.x)SQL Server 2019 (15.x) , los archivos de catálogo se adjuntan de su ubicación anterior junto con los demás archivos de base de datos, igual que en SQL Server 2005 (9.x)SQL Server 2005 (9.x).When you attach a SQL Server 2005 (9.x)SQL Server 2005 (9.x) database that contains full-text catalog files onto a SQL Server 2019 (15.x)SQL Server 2019 (15.x) server instance, the catalog files are attached from their previous location along with the other database files, the same as in SQL Server 2005 (9.x)SQL Server 2005 (9.x). Para obtener más información, vea Actualizar la búsqueda de texto completo.For more information, see Upgrade Full-Text Search.

Al adjuntar una base de datos, todos los archivos de datos deben estar disponibles (archivos MDF y NDF).When you attach a database, all data files (MDF and NDF files) must be available. Si algún archivo de datos tiene una ruta de acceso diferente a la que tenía cuando se creó la base de datos o cuando ésta se adjuntó por última vez, debe especificar la ruta actual.If any data file has a different path from when the database was first created or last attached, you must specify the current path of the file.

Nota

Si el archivo de datos principal que se va a adjuntar es de solo lectura, Motor de base de datosDatabase Engine considera que la base de datos es de solo lectura.If the primary data file being attached is read-only, the Motor de base de datosDatabase Engine assumes that the database is read-only.

Cuando se adjunta una base de datos cifrada a una instancia de SQL ServerSQL Server por primera vez, el propietario debe abrir la clave maestra de esa base de datos mediante la ejecución de la instrucción siguiente: OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password'.When an encrypted database is first attached to an instance of SQL ServerSQL Server, the database owner must open the master key of the database by executing the following statement: OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password'. Se recomienda habilitar el descifrado automático de la clave maestra mediante la ejecución de la instrucción siguiente: ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY.We recommend that you enable automatic decryption of the master key by executing the following statement: ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY. Para obtener más información, vea CREATE MASTER KEY (Transact-SQL) y ALTER MASTER KEY (Transact-SQL).For more information, see CREATE MASTER KEY (Transact-SQL) and ALTER MASTER KEY (Transact-SQL).

Las condiciones para adjuntar archivos de registro dependen, en parte, de si la base de datos es de lectura y escritura o de solo lectura. Vea a continuación:The requirement for attaching log files depends partly on whether the database is read-write or read-only, as follows:

  • Para una base de datos de lectura y escritura, normalmente, podrá adjuntar un archivo de registro a una ubicación nueva.For a read-write database, you can usually attach a log file in a new location. Sin embargo, en algunos casos, para volver a adjuntar una base de datos son necesarios sus archivos de registro.However, in some cases, reattaching a database requires its existing log files. Por tanto, es importante mantener siempre todos los archivos de registro separados hasta que la base de datos se haya adjuntado correctamente sin ellos.Therefore, it is important to always keep all the detached log files until the database has been successfully attached without them.

    Si una base de datos de lectura y escritura contiene solo un archivo de registro y no se especifica una ubicación nueva para el mismo, al adjuntar la base de datos se buscará el archivo en la ubicación antigua.If a read-write database has a single log file and you do not specify a new location for the log file, the attach operation looks in the old location for the file. Si se encuentra, se usará el archivo de registro antiguo, sin tener en cuenta si la base de datos se cerró correctamente.If it is found, the old log file is used, regardless of whether the database was shut down cleanly. No obstante, si el archivo de registro antiguo no se encuentra, la base de datos se cerró correctamente y no hay ninguna cadena de registros activa, al adjuntar se intentará crear un archivo de registro nuevo para la base de datos.However, if the old log file is not found and if the database was shut down cleanly and has no active log chain, the attach operation attempts to build a new log file for the database.

  • Si el archivo de datos principal que se va a adjuntar es de solo lectura, Motor de base de datosDatabase Engine considera que la base de datos es de solo lectura.If the primary data file being attached is read-only, the Motor de base de datosDatabase Engine assumes that the database is read-only. Para una base de datos de solo lectura, los archivos de registro deben estar disponibles en la ubicación especificada en el archivo principal de la base de datos.For a read-only database, the log file or files must be available at the location specified in the primary file of the database. No se puede compilar un archivo de registro nuevo porque SQL ServerSQL Server no puede actualizar la ubicación del registro almacenada en el archivo principal.A new log file cannot be built because SQL ServerSQL Server cannot update the log location stored in the primary file.

Cambios en los metadatos al adjuntar una base de datosMetadata Changes on Attaching a Database

Cuando se separa y se vuelve a adjuntar una base de datos de solo lectura, se pierde la información de copia de seguridad acerca de la base diferencial.When a read-only database is detached and then reattached, the backup information about the current differential base is lost. La base diferencial es la copia de seguridad más reciente de todos los datos de una base de datos o de un subconjunto de archivos o grupos de archivos de la misma.The differential base is the most recent full backup of all the data in the database or in a subset of the files or filegroups of the database. Sin la información de la copia de seguridad básica, la base de datos maestra deja de estar sincronizada con la base de datos de solo lectura, de modo que las copias de seguridad diferenciales tomadas después pueden proporcionar resultados inesperados.Without the base-backup information, the master database becomes unsynchronized with the read-only database, so differential backups taken thereafter may provide unexpected results. Por lo tanto, si utiliza copias de seguridad diferenciales con una base de datos de solo lectura, deberá establecer una nueva base diferencial actual realizando una copia de seguridad completa después de volver a adjuntar la base de datos.Therefore, if you are using differential backups with a read-only database, you should establish a new differential base by taking a full backup after you reattach the database. Para obtener más información sobre las copias de seguridad diferenciales, vea Copias de seguridad diferenciales (SQL Server).For information about differential backups, see Differential Backups (SQL Server).

Al adjuntar, la base de datos se inicia.On attach, database startup occurs. Normalmente, al adjuntar una base de datos, esta vuelve al mismo estado en el que estaba cuando fue separada o copiada.Generally, attaching a database places it in the same state that it was in when it was detached or copied. Sin embargo, las operaciones de adjuntar y separar deshabilitan el encadenamiento de propiedades entre bases de datos para la base de datos.However, attach-and-detach operations both disable cross-database ownership chaining for the database. 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 how to enable chaining, see cross db ownership chaining Server Configuration Option.

Importante

De forma predeterminada y por motivos de seguridad, las opciones de is_broker_enabled, is_honor_broker_priority_on e is_trustworthy_on se establecen en OFF siempre que se adjunta la base de datos.By default and for security, the options for is_broker_enabled, is_honor_broker_priority_on and is_trustworthy_on are set to OFF whenever the database is attached. Para información sobre cómo activar estas opciones, vea ALTER DATABASE (Transact-SQL).For information about how to set these options on, see ALTER DATABASE (Transact-SQL). Para más información sobre los metadatos, vea Administración de los metadatos cuando una base de datos pasa a estar disponible en otro servidor.For more information about metadata, see Manage metadata when making a database available on another server.

Hacer copias de seguridad y restauración, y adjuntarBackup and Restore and Attach

Al igual que cualquier base de datos que esté total o parcialmente sin conexión, no es posible adjuntar una base de datos con archivos que se estén restaurando.Like any database that is fully or partially offline, a database with restoring files cannot be attached. Puede adjuntar la base de datos si detiene la secuencia de restauración.If you stop the restore sequence, you can attach the database. Posteriormente, puede reiniciar la secuencia de restauración.Then, you can restart the restore sequence.

Adjuntar una base de datos a otra instancia de servidorAttaching a Database to Another Server Instance

Importante

Una base de datos creada por una versión más reciente de SQL ServerSQL Server no puede adjuntarse en versiones anteriores.A database created by a more recent version of SQL ServerSQL Server cannot be attached in earlier versions. Esto evita que la base de datos se use físicamente con una versión anterior de Motor de base de datosDatabase Engine.This precludes the database from being physically used with an older version of the Motor de base de datosDatabase Engine. Pero esto se relaciona con el estado de los metadatos y no afecta al nivel de compatibilidad de la base de datos.However, this relates to metadata state and does not affect the database compatibility level. 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).

Al adjuntar una base de datos a otra instancia de servidor, es posible que tenga que volver a crear una parte o la totalidad de los metadatos de la base de datos, por ejemplo los inicios de sesión y los trabajos, en la otra instancia de servidor; de este modo se proporciona una experiencia coherente a usuarios y aplicaciones.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 and jobs, on the other server instance. Para obtener más información, vea Administración de los metadatos cuando una base de datos pasa a estar disponible en otro servidor (SQL Server).For more information, see Manage metadata when making a database available on another server instance (SQL Server).

Para separar una base de datosTo detach a database

Para adjuntar una base de datosTo attach a database

Para actualizar una base de datos mediante el método de separar y adjuntarTo upgrade a database using detach and attach operations

Para mover una base de datos mediante el método de separar y adjuntarTo move a database using detach and attach operations

Para eliminar una instantánea de base de datosTo delete a database snapshot

Consulte tambiénSee Also

Archivos y grupos de archivos de base de datosDatabase Files and Filegroups