DROP DATABASE (Transact-SQL)
S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
Supprime une ou plusieurs bases de données utilisateur ou instantanés de base de données d’une instance du Moteur de base de données SQL Server.
Conventions de la syntaxe Transact-SQL
Syntaxe
Syntaxe SQL Server.
DROP DATABASE [ IF EXISTS ] { database_name | database_snapshot_name } [ ,...n ]
[ ; ]
Syntaxe Azure SQL Database, Azure Synapse Analytics et Système de plateforme Analytics.
DROP DATABASE database_name
[ ; ]
Arguments
IF EXISTS
S’applique à : SQL Server 2016 (13.x) et versions ultérieures
Supprime, de manière conditionnelle, la base de données uniquement si elle existe déjà.
database_name
Spécifie le nom de la base de données à supprimer. Pour afficher une liste de bases de données, utilisez la vue de catalogue sys.databases.
database_snapshot_name
Spécifie le nom d'un instantané de base de données à supprimer.
Notes
Une base de données peut être supprimée quel que soit son statut : hors connexion, en lecture seule, suspect, etc. Pour afficher l’état actuel d’une base de données, utilisez l’affichage sys.databases
catalogue.
Une base de données supprimée ne peut être recréée que par la restauration d'une copie de sauvegarde. Les instantanés de base de données ne peuvent pas être sauvegardés et, par conséquent, ne peuvent pas être restaurés.
Quand vous supprimez une base de données, vous devez effectuer une sauvegarde de la base de données MASTER.
Si vous supprimez une base de données, celle-ci l'est également d'une instance de SQL Server. Il en est de même pour les fichiers disque physiques utilisés par la base de données. Si la base de données, ou l’un de ses fichiers, est hors connexion lorsqu’elle est supprimée, les fichiers de disque ne sont pas supprimés. Ces fichiers peuvent être supprimés manuellement à l’aide d’un gestionnaire de fichiers tel que Explorateur de fichiers. Pour supprimer une base de données du serveur actif sans supprimer les fichiers du système de fichiers, utilisez sp_detach_db.
Avertissement
Dans SQL Server 2016 (13.x) et versions ultérieures, la suppression d’une base de données ayant FILE_SNAPSHOT
des sauvegardes associées réussit, mais les fichiers de base de données qui ont des captures instantanées associées ne seront pas supprimés pour éviter d’invalider les sauvegardes faisant référence à ces fichiers de base de données. Le fichier sera tronqué, mais ne sera pas supprimé physiquement pour conserver les FILE_SNAPSHOT
sauvegardes intactes. Pour plus d’informations, consultez sauvegarde et restauration SQL Server avec Stockage Blob Azure.
SQL Server
La suppression d’un instantané de base de données supprime l’instantané de base de données d’une instance de SQL Server et supprime les fichiers éparses physiques du système de fichiers NTFS utilisés par l’instantané. Pour plus d’informations sur l’utilisation de fichiers partiellement alloués par instantanés de base de données, consultez Captures instantanées de base de données (SQL Server). La suppression d’un instantané de base de données efface les entrées dans le cache de plan associé à l’instantané de base de données, et non l’instance dans son ensemble. 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.
Pour chaque magasin de caches effacé dans le cache du plan, le journal des erreurs SQL Server contient le message d’information suivant. Ce message est enregistré toutes les cinq minutes si le cache est vidé au cours de cet intervalle de temps.
SQL Server has encountered %d occurrence(s) of cachestore flush for the '%s' cachestore (part of plan cache) due to some database maintenance or reconfigure operations.
Interopérabilité
SQL Server
Pour supprimer une base de données publiée à des fins de réplication transactionnelle, ou bien une base de données publiée ou abonnée à une réplication de fusion, vous devez d'abord supprimer sa réplication. Si une base de données est endommagée ou si la réplication ne peut pas d’abord être supprimée (ou les deux), dans la plupart des cas, vous pouvez toujours supprimer la base de données en utilisant ALTER DATABASE
pour définir la base de données hors connexion, puis la supprimer.
Si la base de données intervient dans l'envoi de journaux, supprimez l'envoi de journaux avant de supprimer la base de données. Pour plus d’informations, consultez À propos de la copie des journaux de transaction (SQL Server).
Limites
Les bases de données système ne peuvent pas être supprimées.
L’instruction DROP DATABASE
doit s’exécuter en mode de validation automatique et n’est pas autorisée dans une transaction explicite ou implicite. Le mode autocommit est le mode par défaut pour la gestion des transactions.
Avertissement
Vous ne pouvez pas supprimer une base de données en cours d’utilisation. Cela signifie que les verrous sont maintenus pour la lecture ou l’écriture par n’importe quel utilisateur. Une façon de supprimer des utilisateurs de la base de données consiste à ALTER DATABASE
utiliser pour définir la base de données sur SINGLE_USER. Dans cette stratégie, vous devez exécuter le ALTER DATABASE
même lot et DROP DATABASE
dans le même lot afin d’éviter une autre connexion prétendant qu’une session mono-utilisateur est autorisée. Pour plus d’informations, consultez l’exemple D.
SQL Server
Les instantanés de base de données doivent être supprimés avant que la base de données ne soit supprimée.
La suppression d’une base de données pour Stretch Database ne supprime pas les données distantes. Si vous souhaitez supprimer les données distantes, vous devez le faire manuellement.
Important
Stretch Database est déprécié dans SQL Server 2022 (16.x) et Azure SQL Database. Cette fonctionnalité sera supprimée dans une version future de moteur de base de données. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité.
Azure SQL Database
Vous devez être connecté à la master
base de données pour supprimer une base de données.
L’instruction DROP DATABASE
doit être la seule instruction dans un lot SQL et vous ne pouvez supprimer qu’une seule base de données à la fois.
Azure Synapse Analytics
Vous devez être connecté à la master
base de données pour supprimer une base de données.
L’instruction DROP DATABASE
doit être la seule instruction dans un lot SQL et vous ne pouvez supprimer qu’une seule base de données à la fois.
autorisations
SQL Server
Nécessite l’autorisation CONTROL
sur la base de données, l’autorisation ALTER ANY DATABASE
ou l’appartenance au rôle de base de données fixe db_owner .
Azure SQL Database
Seule la connexion principale au niveau du serveur (créée par le processus de provisionnement) ou les membres du rôle de base de données dbmanager peuvent supprimer une base de données.
Analytics Platform System (PDW)
Nécessite l’autorisation CONTROL
sur la base de données, l’autorisation ALTER ANY DATABASE
ou l’appartenance au rôle de base de données fixe db_owner .
Exemples
R. Supprimer une base de données unique
L'exemple suivant supprime la base de données Sales
.
DROP DATABASE Sales;
B. Supprimer plusieurs bases de données
L'exemple suivant supprime chacune des bases de données répertoriées.
DROP DATABASE Sales, NewSales;
C. Supprimer un instantané de base de données
L’exemple suivant supprime un instantané de base de données, nommé sales_snapshot0600
, sans affecter la base de données source.
DROP DATABASE sales_snapshot0600;
D. Supprimer une base de données après avoir vérifié s’il existe
L’exemple suivant vérifie d’abord si une base de données nommée Sales
existe. Si tel est le cas, l’exemple passe la base de données nommée Sales
en mode mono-utilisateur pour forcer la déconnexion de toutes les autres sessions, puis supprime la base de données. Pour plus d’informations sur SINGLE_USER, consultez Options ALTER DATABASE SET.
USE tempdb;
GO
DECLARE @SQL AS NVARCHAR (1000);
IF EXISTS (SELECT 1
FROM sys.databases
WHERE [name] = N'Sales')
BEGIN
SET @SQL = N'USE [Sales];
ALTER DATABASE Sales SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
USE [tempdb];
DROP DATABASE Sales;';
EXECUTE (@SQL);
END