Compartir a través de


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 "Comentarios" 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 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 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, se conservan los metadatos relacionados de texto completo.

    Nota importanteImportante

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

Valores de código de retorno

0 (correcto) o 1 (error)

Conjuntos de resultados

Ninguno

Notas

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 utilizar 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 utilizar sp_replicationdboption, puede quitar la réplica 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 AdventureWorks después de que todos los usuarios actuales se hayan desconectado.

USE master;
ALTER DATABASE AdventureWorks
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 utilizar la opción ROLLBACK: ALTER DATABASE database_name SET SINGLE_USER WITH ROLLBACK 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 a la función fija de base de datos db_owner.

Ejemplos

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

EXEC sp_detach_db 'AdventureWorks', 'true';

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

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