sp_detach_db (Transact-SQL)

Actualizado: 12 de diciembre de 2006

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.

ms188031.note(es-es,SQL.90).gifImportante:
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, se ejecuta UPDATE STATISTICS 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). Ejecutar UPATE STATISTICS es útil para las bases de datos que se trasladan a medios de sólo 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 quitarán todos los archivos de índice de texto asociados a la base de datos y los metadatos del índice de texto, a no ser que la base de datos sea de sólo lectura. Si es NULL o true, los metadatos relacionados con el texto se mantienen.

Conjuntos de resultados

Ninguno

Notas

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, debe poner la base de datos sospechosa en modo de emergencia antes de separarla. 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.

Al separar una base de datos se borra la caché del plan para la instancia de SQL Server. Al borrar la caché del plan, se provoca una nueva compilación de todos los planes de ejecución posteriores y puede ocasionar una disminución repentina y temporal del rendimiento de las consultas. En el Service Pack 2 de SQL Server 2005, para cada almacén de caché borrado de la caché del plan, el registro de errores de SQL Server contendrá el siguiente mensaje informativo: "SQL Server ha detectado %d instancias de vaciado del almacén de caché '%s' (parte de la caché del plan) debido a determinadas operaciones de mantenimiento de base de datos o reconfiguración". Este mensaje se registra cada cinco minutos siempre que se vacía la caché dentro de ese intervalo de tiempo.

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.

Valores de código de retorno

0 (correcto) o 1 (error)

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';

Vea también

Referencia

ALTER DATABASE (Transact-SQL)
CREATE DATABASE (Transact-SQL)

Otros recursos

Separar y adjuntar bases de datos
Proteger archivos de datos y de registro
Cómo separar una base de datos (SQL Server Management Studio)

Ayuda e información

Obtener ayuda sobre SQL Server 2005

Historial de cambios

Versión Historial

12 de diciembre de 2006

Contenido nuevo:
  • Se ha agregado una sección a las Notas acerca de cómo borrar la caché del plan.
Contenido modificado
  • Se aclaró la configuración del parámetro @keepfulltextindexfile.

17 de julio de 2006

Contenido nuevo:
  • Se ha agregado la restricción para la separación de bases de datos.

14 de abril de 2006

Contenido nuevo:
  • Se ha agregado un ejemplo que utiliza @keepfulltextindexfile.
Contenido modificado
  • Se ha cambiado @KeepFulltextIndexFile a @keepfulltextindexfile.

5 de diciembre de 2005

Contenido nuevo:
  • Se ha agregado la restricción de que la base de datos no puede estar en uso y la sección sobre la obtención de acceso exclusivo antes de ejecutar sp_detach_db.