Tout d'abord, vérifiez le journal des erreurs SQL pour voir s'il atteint réellement une taille maximale pour le journal. Si c'est le cas, la requête n'a aucun espoir de se terminer, elle est probablement déjà dans un état de restauration.
Même si c'est le cas, je préfère toujours tuer le spid manuellement (utilisez sp_who2
ou sp_WhoIsActive
pour trouver le spid, puis faites un kill 59
ou autre). Vous ne pouvez pas non plus vérifier l'état de restauration, sauf si vous effectuez un KILL explicite, consultez ce fil connexe .
Comme il s'agit d'une suppression, et non d'une mise à jour ou d'un insert, vous pouvez être très chanceux et constater qu'il annule immédiatement. Sinon, il faudra peut-être autant de temps (ou plus) pour revenir en arrière que pour arriver à ce point.
Pour voir l'état de restauration, utilisez
kill 59 with statusonly
Malheureusement, j'ai trouvé que cela ne montre souvent rien d'utile, juste un "0% terminé". Dans ce cas, vous devrez utiliser sp_who2
et regarder l'IO et le CPU pour voir s'il fait toujours quelque chose.
Concernant le redémarrage, c'est un risque grave. Si le spid est activement rétrogradé (CPU et IO changent), le redémarrage de SQL ne mettra la base de données hors ligne que jusqu'à ce que la restauration soit complètement terminée (heures et heures). Mais , si le CPU et les IO ne bougent pas , cela peut en fait l'effacer immédiatement. De toute façon, c'est un risque.
Une dernière option, si les choses sont particulièrement désastreuses: si vous avez une sauvegarde juste avant le début de la suppression (et qu'il n'y a pas eu d'autres mises à jour de la base de données) , le moyen le plus rapide de récupérer peut être de simplement supprimer la base de données, de redémarrer SQL et restauration à partir d'une sauvegarde.
Si vous ne pouvez pas supprimer la base de données (ou si vous avez déjà redémarré l'instance et que le journal des erreurs sql prévoit un temps de récupération de 24 heures), puis arrêtez les services SQL, supprimez les fichiers MDF et LDF du disque, démarrez SQL, supprimez la base de données (fantôme) et restaurer à partir de la sauvegarde.
Évidemment, vous ne tenteriez que si c'était une base de données de traitement principale avec laquelle les utilisateurs n'interagissaient pas.