sp_detach_db (Transact-SQL)

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.

Nota importanteImportante

Para separar una base de datos replicada, se debe anular su publicación. Para obtener más información, vea la sección “Notas” más adelante en este tema.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

  • [ @dbname = ] 'database_name'
    Es el nombre de la base de datos que se va a separar. database_name es de tipo sysname y su valor predeterminado es NULL.

  • [ @skipchecks = ] 'skipchecks'
    Especifica si se debe omitir o ejecutar UPDATE STATISTIC. skipchecks es de tipo nvarchar(10) y su valor predeterminado es NULL. Para omitir UPDATE STATISTICS, especifique true. Para ejecutar UPDATE STATISTICS de forma explícita, especifique false.

    De forma predeterminada, UPDATE STATISTICS se ejecuta para actualizar información acerca de los datos de las tablas e índices de SQL Server 2005 Database Engine (Motor de base de datos de SQL Server 2005) y versiones posteriores. Ejecutar UPATE STATISTICS es útil para las bases de datos que se trasladan a medios de solo lectura.

  • [ @keepfulltextindexfile= ] 'KeepFulltextIndexFile'
    Especifica que el archivo de índice de texto completo asociado a la base de datos que se va a separar no se quitará durante la operación de separación de la base de datos. KeepFulltextIndexFile es de tipo nvarchar(10) y su valor predeterminado es true. Si el parámetro 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 no ser que la base de datos sea de solo lectura. Si es NULL o true, los metadatos relacionados con el texto completo se mantienen.

    Nota importanteImportante

    El parámetro @keepfulltextindexfile se quitará de una versión futura de SQL Server. No use este parámetro en nuevos trabajos de desarrollo y modifique lo antes posible las aplicaciones que actualmente lo usen.

Valores de código de retorno

0 (correcto) o 1 (error)

Conjuntos de resultados

Ninguno

Comentarios

Cuando se desasocia una base de datos, todos sus metadatos se eliminan. Si la base de datos era la base de datos predeterminada de todas las cuentas de inicio de sesión, master se convierte en su base de datos predeterminada.

Nota

Para obtener información sobre cómo ver la base de datos predeterminada de todas las cuentas de inicio de sesión, vea 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.

Restricciones

No se puede separar una base de datos si se da alguna de estas circunstancias:

  • Se está utilizando la base de datos actualmente. Para obtener más información, vea "Obtener acceso exclusivo" más adelante en este tema.

  • Si está replicada, la base de datos está publicada.

    Para poder separar la base de datos, debe deshabilitar su publicación ejecutando sp_replicationdboption.

    Nota

    Si no puede usar sp_replicationdboption, puede quitar la replicación ejecutando sp_removedbreplication.

  • Existe una instantánea de base de datos en la base de datos.

    Para poder separar la base de datos, debe quitar todas sus instantáneas. Para obtener más información, vea Cómo eliminar una instantánea de base de datos (Transact-SQL).

    Nota

    Una instantánea de base de datos no se puede adjuntar ni separar.

  • Se está creando un reflejo de la base de datos.

    La base de datos no se puede separar hasta que finalice la sesión de creación de reflejo de la base de datos. Para obtener más información, vea Quitar la creación de reflejo de la base de datos.

  • La base de datos es sospechosa.

    En SQL Server 2005 y versiones posteriores, las bases de datos sospechosas se debe poner en el modo de emergencia para poder desasociar la base de datos. Para obtener más información acerca de cómo poner una base de datos en modo de emergencia, vea ALTER DATABASE (Transact-SQL).

  • La base de datos es una base de datos del sistema.

Obtener acceso exclusivo

Separar una base de datos requiere acceso exclusivo a la misma. 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.

Por ejemplo, la siguiente instrucción ALTER DATABASE obtiene acceso exclusivo a la base de datos AdventureWorks2008R2 después de que todos los usuarios actuales se hayan desconectado.

USE master;
ALTER DATABASE AdventureWorks2008R2
SET SINGLE_USER;
GO

Nota

Para forzar a los usuarios actuales a salir de la base de datos inmediatamente o tras un número especificado de segundos, también debe usar la opción ROLLBACK: ALTER DATABASE database_name SET SINGLE_USER WITH ROLLBACK rollback_option rollback_option. Para obtener más información, vea ALTER DATABASE (Transact-SQL).

Volver a adjuntar una base de datos

Los archivos separados permanecen y se pueden volver a adjuntar utilizando CREATE DATABASE (con la opción FOR ATTACH o FOR ATTACH_REBUILD_LOG). Los archivos se pueden mover a otro servidor y adjuntarse allí.

Permisos

Debe pertenecer al rol fijo de servidor sysadmin.

Ejemplos

En el ejemplo siguiente se separa la base de datos AdventureWorks2008R2 con skipchecks establecido en true.

EXEC sp_detach_db 'AdventureWorks2008R2', 'true';

En el ejemplo siguiente se separa la base de datos AdventureWorks2008R2 y se conservan los archivos y los metadatos del índice de texto completo. Este comando ejecuta UPDATE STATISTICS, que es el comportamiento predeterminado.

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