Partage via


sp_detach_db (Transact-SQL)

S'applique à : SQL Server

Détache une base de données qui n’est actuellement pas utilisée à partir d’une instance de serveur et s’exécute UPDATE STATISTICS éventuellement sur toutes les tables avant de se détacher.

Pour détacher une base de données répliquée, celle-ci ne doit pas être publiée. Pour plus d’informations, consultez la section Remarques plus loin dans cet article.

Conventions de la syntaxe Transact-SQL

Syntaxe

sp_detach_db
    [ [ @dbname = ] N'dbname' ]
    [ , [ @skipchecks = ] N'skipchecks' ]
    [ , [ @keepfulltextindexfile = ] N'keepfulltextindexfile' ]
[ ; ]

Arguments

[ @dbname = ] N’dbname'

Nom de la base de données à détacher. @dbname est sysname, avec la valeur par défaut NULL.

[ @skipchecks = ] N’skipchecks'

Spécifie s’il faut ignorer ou exécuter UPDATE STATISTICS. @skipchecks est nvarchar(10), avec la valeur par défaut NULL. Pour ignorer UPDATE STATISTICS, spécifiez true. Pour exécuter UPDATE STATISTICSexplicitement, spécifiez false.

Par défaut, UPDATE STATISTICS il est effectué pour mettre à jour des informations sur les données des tables et des index. L’exécution UPDATE STATISTICS est utile pour les bases de données qui doivent être déplacées vers un média en lecture seule.

[ @keepfulltextindexfile = ] N’keepfulltextindexfile'

Spécifie que le fichier d’index de texte intégral associé à la base de données détachée n’est pas supprimé pendant l’opération de détachement de la base de données. @keepfulltextindexfile est nvarchar(10), avec la valeur par défaut true.

  • Si @keepfulltextindexfile est false, tous les fichiers d’index de recherche en texte intégral associés à la base de données et les métadonnées de l’index de recherche en texte intégral sont supprimés, sauf si la base de données est en lecture seule.
  • Si NULL ou true, les métadonnées associées au texte intégral sont conservées.

Important

Cette fonctionnalité sera supprimée dans une version future de SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité.

Valeurs des codes de retour

0 (réussite) ou 1 (échec).

Jeu de résultats

Aucune.

Notes

Lorsqu'une base de données est détachée, toutes ses métadonnées sont supprimées. Si la base de données était la base de données par défaut d’un compte de connexion, master devient sa base de données par défaut.

Remarque

Pour plus d’informations sur la façon d’afficher la base de données par défaut de tous les comptes de connexion, consultez sp_helplogins. Si vous disposez des autorisations requises, vous pouvez utiliser ALTER LOGIN pour affecter une nouvelle base de données par défaut à une connexion.

Limites

Une base de données ne peut pas être détachée si l’une des valeurs suivantes est vraie :

  • La base de données est en cours d'utilisation. Pour plus d’informations, consultez Obtenir un accès exclusif.

  • Si la base de données est répliquée, elle est publiée.

    Avant de pouvoir détacher la base de données, vous devez désactiver la publication en exécutant sp_replicationdboption.

    Si vous ne pouvez pas utiliser sp_replicationdboption, vous pouvez supprimer la réplication en exécutant sp_removedbreplication.

  • Un instantané existe sur la base de données.

    Avant de pouvoir détacher la base de données, vous devez supprimer tous ses instantanés. Pour plus d’informations, consultez Supprimer un instantané de base de données.

    Une capture instantanée de base de données ne peut pas être détachée ni attachée.

  • La base de données fait l'objet d'une mise en miroir.

    La base de données ne peut pas être détachée tant que la session de mise en miroir de bases de données n’est pas terminée. Pour plus d’informations, consultez Suppression de la mise en miroir des bases de données (SQL Server).

  • La base de données est suspecte.

    Vous devez placer une base de données suspecte en mode urgence avant de pouvoir la détacher. Pour plus d’informations sur la façon de placer une base de données en mode d’urgence, consultez ALTER DATABASE.

  • La base de données est une base de données système.

Obtenir un accès exclusif

Un accès exclusif à la base de données est nécessaire pour procéder au détachement de la base de données. Si la base de données que vous souhaitez détacher est en cours d’utilisation, avant de pouvoir la détacher, définissez la base de données SINGLE_USER en mode pour obtenir un accès exclusif.

Avant de définir la base de données SINGLE_USERsur , vérifiez que l’option AUTO_UPDATE_STATISTICS_ASYNC est définie sur OFF. Lorsque cette option est définie ONsur , le thread d’arrière-plan utilisé pour mettre à jour les statistiques prend une connexion à la base de données et vous ne parvenez pas à accéder à la base de données en mode mono-utilisateur. Pour plus d’informations, consultez Définir une base de données en mode mono-utilisateur.

Par exemple, l’instruction suivante ALTER DATABASE obtient un accès exclusif à la base de données AdventureWorks2022 après que tous les utilisateurs actuels se déconnectent de la base de données.

USE master;
ALTER DATABASE AdventureWorks2022
SET SINGLE_USER;
GO

Pour forcer les utilisateurs actuels à sortir de la base de données immédiatement ou dans un nombre spécifié de secondes, vous pouvez également utiliser l’option ROLLBACK .

ALTER DATABASE <database_name>
SET SINGLE_USER
WITH ROLLBACK <rollback_option>;

Pour en savoir plus, consultez ALTER DATABASE.

Détacher une base de données

Les fichiers détachés restent et peuvent être attachés à l’aide CREATE DATABASE (avec l’option ou FOR ATTACH_REBUILD_LOG l’optionFOR ATTACH). Vous pouvez les déplacer sur un autre serveur et les y attacher.

autorisations

Nécessite l’appartenance au rôle serveur fixe sysadmin ou l’appartenance au rôle db_owner de la base de données.

Exemples

Les exemples de code Transact-SQL de cet article sont fondés sur l’échantillon de base de données AdventureWorks2022 ou AdventureWorksDW2022 fourni, que vous pouvez télécharger à partir de la page d’accueil Échantillons et projets communautaires Microsoft SQL Server.

L’exemple suivant détache la AdventureWorks2022 base de données avec @skipchecks défini sur true.

EXEC sp_detach_db 'AdventureWorks2022', 'true';

L'exemple suivant détache la base de données AdventureWorks2022 et conserve les fichiers d'index de texte intégral et les métadonnées de l'index de texte intégral. Cette commande exécute UPDATE STATISTICS, ce qui correspond au comportement par défaut.

EXEC sp_detach_db @dbname = 'AdventureWorks2022',
    @keepfulltextindexfile = 'true';