sp_detach_db (Transact-SQL)

Mis à jour : 12 décembre 2006

Détache d'une instance de serveur une base de données qui n'est pas en cours d'utilisation, et exécute accessoirement UPDATE STATISTICS sur toutes les tables avant de détacher la base de données.

ms188031.note(fr-fr,SQL.90).gifImportant :
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 cette rubrique.

Icône Lien de rubriqueConventions de la syntaxe de Transact-SQL

Syntaxe

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

Arguments

  • [ @dbname = ] 'database_name'
    Nom de la base de données à détacher. database_name est une valeur sysname, avec NULL comme valeur par défaut.
  • [ @skipchecks = ] 'skipchecks'
    Indique si UPDATE STATISTIC doit être ignoré ou exécuté. skipchecks est une valeur nvarchar(10), avec NULL comme valeur par défaut. Pour ignorer UPDATE STATISTICS, spécifiez true. Pour exécuter explicitement UPDATE STATISTICS, spécifiez false.

    Par défaut, UPDATE STATISTICS est exécuté pour mettre à jour les informations relatives aux données des tables et des index du du moteur de base de données SQL Server 2005. L'exécution de UPDATE STATISTICS est utile pour les bases de données qui doivent être placées sur des supports en lecture seule.

  • [ @keepfulltextindexfile= ] 'KeepFulltextIndexFile'
    Spécifie que le fichier d'index de texte intégral associé à la base de données à détacher ne sera pas supprimé pendant l'opération de détachement de la base de données. KeepFulltextIndexFile est une valeur nvarchar(10), avec true comme valeur par défaut. Si KeepFulltextIndexFile a la valeur false, tous les fichiers d'index de texte intégral associés à la base de données et toutes les métadonnées de l'index de texte intégral sont supprimés, sauf si la base de données est en lecture seule. Si la valeur est NULL ou true, les métadonnées liées au texte intégral sont conservées.

Jeux de résultats

Aucun

Notes

Restrictions

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

  • La base de données est en cours d'utilisation. Pour plus d'informations, consultez « Obtention d'un accès exclusif », plus loin dans cette rubrique.
  • 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.
    ms188031.note(fr-fr,SQL.90).gifRemarque :
    Si vous ne pouvez pas utiliser sp_replicationdboption, vous pouvez supprimer la réplication en exécutant sp_removedbreplication.
  • Une capture instantanée existe sur la base de données.
    Avant de pouvoir détacher la base de données, vous devez supprimer toutes ses captures instantanées. Pour plus d'informations, consultez Procédure : supprimer une capture instantanée de base de données (Transact-SQL).
    ms188031.note(fr-fr,SQL.90).gifRemarque :
    Une capture instantanée de base de données ne peut être ni 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 la base de données n'a pas été interrompue. Pour plus d'informations, consultez Suppression d'une mise en miroir des bases de données.
  • La base de données est suspecte.
    Dans SQL Server 2005, vous devez placer une base de données suspecte en mode urgence avant de pouvoir la détacher. Pour plus d'informations sur la manière de mettre une base de données en mode urgence, consultez ALTER DATABASE (Transact-SQL).
  • La base de données est une base de données système.

L'attachement d'une base de données efface le cache de plan pour l'instance de SQL Server. Cette opération entraîne la recompilation de tous les plans d'exécution ultérieurs et peut entraîner une baisse temporaire et brutale des performances des requêtes. Dans SQL Server 2005 Service Pack 2, pour chaque mémoire cache effacée du cache du plan, le journal des erreurs de SQL Server contient le message d'information suivant : "SQL Server a rencontré %d occurrence(s) de vidages de mémoire cache pour la mémoire cache '%s' (partie du cache du plan) en raison d'opérations de maintenance ou de reconfiguration de base de données." Ce message est enregistré toutes les cinq minutes si le cache est vidé au cours de cet intervalle.

Obtention d'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 voulez détacher est en cours d'utilisation, avant de procéder à son détachement, passez-la en mode SINGLE_USER pour obtenir un accès exclusif.

Par exemple, l'instruction ALTER DATABASE suivante permet d'obtenir un accès exclusif à la base de données AdventureWorks une fois que tous les utilisateurs actifs se sont déconnectés de la base de données.

USE master;
ALTER DATABASE AdventureWorks
SET SINGLE_USER;
GO
ms188031.note(fr-fr,SQL.90).gifRemarque :
Pour forcer les utilisateurs actuels à se déconnecter de la base de données immédiatement ou après un nombre de secondes spécifié, utilisez également l'option ROLLBACK : ALTER DATABASE database_name SET SINGLE_USER WITH ROLLBACK rollback_option. Pour plus d'informations, consultez ALTER DATABASE (Transact-SQL).

Rattachement d'une base de données

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

Autorisations

Nécessite l'appartenance au rôle de base de données fixe db_owner.

Valeurs du code de retour

0 (succès) ou 1 (échec)

Exemples

L'exemple suivant détache la base de données AdventureWorks avec skipchecks ayant la valeur TRUE.

EXEC sp_detach_db 'AdventureWorks', 'true';

L'exemple suivant détache la base de données AdventureWorks 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='AdventureWorks'
    , @keepfulltextindexfile='true';

Voir aussi

Référence

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

Autres ressources

Attachement et détachement des bases de données
Sécurisation des fichiers de données et des fichiers journaux
Procédure : détachement d'une base de données (SQL Server Management Studio)

Aide et Informations

Assistance sur SQL Server 2005

Historique des modifications

Version Historique

12 décembre 2006

Nouveau contenu :
  • Ajout d'une section aux Notes sur l'effacement du cache de plan.
Contenu modifié :
  • Clarification des réglages du paramètre @keepfulltextindexfile.

17 juillet 2006

Nouveau contenu :
  • Ajout de la restriction stipulant qu'il n'est pas possible de détacher une base de données système.

14 avril 2006

Nouveau contenu :
  • Ajout d'un exemple qui utilise @keepfulltextindexfile.
Contenu modifié
  • Remplacement de @KeepFulltextIndexFile par @keepfulltextindexfile.

5 décembre 2005

Nouveau contenu :
  • Des informations ont été ajoutées : restriction stipulant que la base de données ne peut pas être en cours d'utilisation, et nécessité d'obtenir un accès exclusif avant d'exécuter sp_detach_db.