sp_detach_db (Transact-SQL)sp_detach_db (Transact-SQL)

SE APLICA A: síSQL Server noAzure SQL Database noAzure SQL Data Warehouse noAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Separa una base de datos que actualmente no se está utilizando de una instancia del servidor y, opcionalmente, ejecuta UPDATE STATISTICS en todas las tablas antes de la separación.Detaches a database that is currently not in use from a server instance and, optionally, runs UPDATE STATISTICS on all tables before detaching.

Importante

Para separar una base de datos replicada, se debe anular su publicación.For a replicated database to be detached, it must be unpublished. Para obtener más información, vea la sección “Comentarios” más adelante en este tema.For more information, see the "Remarks" section later in this topic.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxisSyntax

  
sp_detach_db [ @dbname= ] 'database_name'   
    [ , [ @skipchecks= ] 'skipchecks' ]   
    [ , [ @keepfulltextindexfile = ] 'KeepFulltextIndexFile' ]   

ArgumentosArguments

[ @dbname = ] 'database_name' es el nombre de la base de datos que se va a desasociar.[ @dbname = ] 'database_name' Is the name of the database to be detached. database_name es un valor sysname y su valor predeterminado es NULL.database_name is a sysname value, with a default value of NULL.

[ @skipchecks = ] 'skipchecks' especifica si se debe omitir o ejecutar UPDATE STATISTIC.[ @skipchecks = ] 'skipchecks' Specifies whether to skip or run UPDATE STATISTIC. skipchecks es un valor de tipo nvarchar (10) y su valor predeterminado es NULL.skipchecks is a nvarchar(10) value, with a default value of NULL. Para omitir UPDATE STATISTICs, especifique true.To skip UPDATE STATISTICS, specify true. Para ejecutar explícitamente UPDATE STATISTICs, especifique false.To explicitly run UPDATE STATISTICS, specify false.

De forma predeterminada, UPDATE STATISTICS se ejecuta para actualizar información acerca de los datos de las tablas e índices.By default, UPDATE STATISTICS is performed to update information about the data in the tables and indexes. Ejecutar UPATE STATISTICS es útil para las bases de datos que se trasladan a medios de solo lectura.Performing UPDATE STATISTICS is useful for databases that are to be moved to read-only media.

[ @keepfulltextindexfile = ] 'KeepFulltextIndexFile' especifica que el archivo de índice de texto completo asociado a la base de datos que se está desasociando no se quitará durante la operación de separación de la base de datos.[ @keepfulltextindexfile = ] 'KeepFulltextIndexFile' Specifies that the full-text index file associated with the database that is being detached will not be dropped during the database detach operation. KeepFulltextIndexFile es un valor de tipo nvarchar (10) y su valor predeterminado es true.KeepFulltextIndexFile is a nvarchar(10) value with a default of true. Si KeepFulltextIndexFile es false, se quitan todos los archivos de índice de texto completo asociados a la base de datos y los metadatos del índice de texto completo, a menos que la base de datos sea de solo lectura.If KeepFulltextIndexFile is false, all the full-text index files associated with the database and the metadata of the full-text index are dropped, unless the database is read-only. Si es NULL o true, se conservan los metadatos relacionados con el texto completo.If NULL or true, full-text related metadata are kept.

Importante

El parámetro @keepfulltextindexfile se quitará en una versión futura de SQL ServerSQL Server.The @keepfulltextindexfile parameter will be removed in a future version of SQL ServerSQL Server. No use este parámetro en nuevos trabajos de desarrollo, y modifique lo antes posible las aplicaciones que lo usen actualmente.Do not use this parameter in new development work, and modify applications that currently use this parameter as soon as possible.

Valores de código de retornoReturn Code Values

0 (correcto) o 1 (error)0 (success) or 1 (failure)

Conjuntos de resultadosResult Sets

NoneNone

ComentariosRemarks

Cuando se desasocia una base de datos, todos sus metadatos se eliminan.When a database is detached, all its metadata is dropped. Si la base de datos era la base de datos predeterminada de cualquier cuenta de inicio de sesión, Master se convierte en su base de datos predeterminada.If the database was the default database of any login accounts, master becomes their default database.

Nota

Para obtener información acerca de cómo ver la base de datos predeterminada de todas las cuentas de inicio de sesión, consulte la opción de Transact-SQL ()de sp_helplogins.For information about how to view the default database of all the login accounts, see sp_helplogins (Transact-SQL). Si tiene los permisos necesarios, puede usar ALTER login para asignar una nueva base de datos predeterminada a un inicio de sesión.If you have the required permissions, you can use ALTER LOGIN to assign a new default database to a login.

RestriccionesRestrictions

No se puede separar una base de datos si se da alguna de estas circunstancias:A database cannot be detached if any of the following are true:

  • Se está utilizando la base de datos actualmente.The database is currently in use. Para obtener más información, vea "Obtener acceso exclusivo" más adelante en este tema.For more information, see "Obtaining Exclusive Access," later in this topic.

  • Si está replicada, la base de datos está publicada.If replicated, the database is published.

    Para poder separar la base de datos, debe deshabilitar la publicación ejecutando sp_replicationdboption.Before you can detach the database, 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.

  • Se está creando un reflejo de la base de datos.The database is being mirrored.

    La base de datos no se puede separar hasta que finalice la sesión de creación de reflejo de la base de datos.The database cannot be detached until the database mirroring 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.

    Las bases de datos sospechosas se deben poner en el modo de emergencia para poder desasociar la base de datos.You must put a suspect database into emergency mode before you can detach the database. 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.

Obtener acceso exclusivoObtaining Exclusive Access

Separar una base de datos requiere acceso exclusivo a la misma.Detaching a database requires exclusive access to the database. Si la base de datos que desea separar está en uso, para poder separarla debe establecer la base de datos en modo SINGLE_USER para obtener acceso exclusivo.If the database that you want to detach is in use, before you can detach it, set the database to SINGLE_USER mode to obtain exclusive access.

Antes de establecer la base de datos como SINGLE_USER, compruebe que la opción AUTO_UPDATE_STATISTICS_ASYNC está establecida en OFF.Before you set the database to SINGLE_USER, verify that the AUTO_UPDATE_STATISTICS_ASYNC option is set to OFF. Cuando esta opción se establece en ON, el subproceso en segundo plano que se usa para actualizar las estadísticas realiza una conexión con la base de datos y no se podrá tener acceso a la base de datos en modo de usuario único.When this option is set to ON, the background thread that is used to update statistics takes a connection against the database, and you will be unable to access the database in single-user mode. Para obtener más información, vea establecer una base de datos en modo de usuario único.For more information, see set a database to single user mode.

Por ejemplo, la siguiente instrucción ALTER DATABASE obtiene acceso exclusivo a la base de datos AdventureWorks2012AdventureWorks2012 después de que todos los usuarios actuales se desconecten de la base de datos.For example, the following ALTER DATABASE statement obtains exclusive access to the AdventureWorks2012AdventureWorks2012 database after all current users disconnect from the database.

USE master;  
ALTER DATABASE AdventureWorks2012  
SET SINGLE_USER;  
GO  

Nota

Para forzar a los usuarios actuales a salir de la base de datos inmediatamente o dentro de un número especificado de segundos, use también la opción ROLLBACK: ALTER DATABASE database_name Set SINGLE_USER with rollback rollback_option.To force current users out of the database immediately or within a specified number of seconds, also use the ROLLBACK option: ALTER DATABASE database_name SET SINGLE_USER WITH ROLLBACK rollback_option. Para obtener más información, vea ALTER DATABASE (Transact-SQL).For more information, see ALTER DATABASE (Transact-SQL).

Volver a adjuntar una base de datosReattaching a Database

Los archivos separados permanecen y se pueden volver a adjuntar utilizando CREATE DATABASE (con la opción FOR ATTACH o FOR ATTACH_REBUILD_LOG).The detached files remain and can be reattached by using CREATE DATABASE (with the FOR ATTACH or FOR ATTACH_REBUILD_LOG option). Los archivos se pueden mover a otro servidor y adjuntarse allí.The files can be moved to another server and attached there.

PermisosPermissions

Requiere la pertenencia al rol fijo de servidor sysadmin o la pertenencia al rol db_owner de la base de datos.Requires membership in the sysadmin fixed server role or membership in the db_owner role of the database.

EjemplosExamples

En el siguiente ejemplo se separa la base de datos AdventureWorks2012AdventureWorks2012 con skipchecks establecido en true.The following example detaches the AdventureWorks2012AdventureWorks2012 database with skipchecks set to true.

EXEC sp_detach_db 'AdventureWorks2012', 'true';  

En el ejemplo siguiente se separa la base de datos AdventureWorks2012AdventureWorks2012 y se conservan los archivos y los metadatos del índice de texto completo.The following example detaches the AdventureWorks2012AdventureWorks2012 database and keeps the full-text index files and the metadata of the full-text index. Este comando ejecuta UPDATE STATISTICS, que es el comportamiento predeterminado.This command runs UPDATE STATISTICS, which is the default behavior.

exec sp_detach_db @dbname='AdventureWorks2012'  
    , @keepfulltextindexfile='true';  

Vea tambiénSee Also

ALTER DATABASE (Transact-SQL) ALTER DATABASE (Transact-SQL)
Adjuntar y separar bases de datos (SQL Server) Database Detach and Attach (SQL Server)
CREATE DATABASE (Transact-SQL de SQL Server) CREATE DATABASE (SQL Server Transact-SQL)
Separar una base de datosDetach a Database