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.
Importante
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.
Se aplica a: SQL Server (desde SQL Server 2008 hasta la versión actual). |
Convenciones 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. 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 un valor de tipo nvarchar(10) y su valor predeterminado es true. Si KeepFulltextIndexFile es false, se quitarán 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.Importante
El parámetro @keepfulltextindexfile se quitará en 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 lo usen actualmente.
Valores del 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 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 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 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 (SQL Server).
La base de datos es sospechosa.
Las bases de datos sospechosas se deben 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 AdventureWorks2012 después de que todos los usuarios actuales se hayan desconectado.
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 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 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
Necesita la pertenencia al rol fijo de servidor sysadmin.
Ejemplos
En el ejemplo siguiente se separa la base de datos AdventureWorks2012 con skipchecks establecido en true.
EXEC sp_detach_db 'AdventureWorks2012', 'true';
En el ejemplo siguiente se separa la base de datos AdventureWorks2012 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='AdventureWorks2012'
, @keepfulltextindexfile='true';
Vea también
Referencia
CREATE DATABASE (Transact-SQL de SQL Server)