Prima di tutto, controlla il log degli errori SQL per vedere se ha effettivamente raggiunto una dimensione massima per il registro. In tal caso, la query non ha alcuna speranza di essere completata, probabilmente è già in uno stato di rollback.
Anche se lo è, preferisco sempre uccidere lo spid manualmente (usa sp_who2
o sp_WhoIsActive
per trovare lo spid, quindi fai uno kill 59
o qualunque cosa). Inoltre, non puoi controllare lo stato del rollback a meno che tu non faccia un KILL esplicito, vedi questo thread correlato .
Poiché si tratta di un'eliminazione e non di un aggiornamento o inserimento, potresti essere molto fortunato e scoprire che esegue immediatamente il rollback. In caso contrario, potrebbe essere necessario il tempo (o più lungo) per il rollback come ha fatto per arrivare a questo punto.
Per visualizzare lo stato del rollback, utilizzare
kill 59 with statusonly
Purtroppo, ho scoperto che questo spesso non mostra nulla di utile, solo uno "0% completo". In tal caso, dovrai utilizzare sp_who2
e guardare l'IO e la CPU per vedere se sta ancora facendo qualcosa.
Per quanto riguarda il riavvio, questo è un grave rischio. Se lo spid sta eseguendo il rollback attivo (CPU e IO stanno cambiando), il riavvio di SQL metterà il database in modalità offline solo fino al termine del rollback (ore e ore). Ma se la CPU e l'IO non si muovono, potrebbe in effetti cancellarlo immediatamente. Ad ogni modo, è un rischio.
Un'ultima opzione, se le cose sono particolarmente terribili: se hai un backup appena prima dell'inizio dell'eliminazione (e non ci sono stati altri aggiornamenti al db) , il modo più veloce per recuperare potrebbe essere semplicemente quello di eliminare il DB, riavviare SQL e ripristino dal backup.
Se non riesci a eliminare il DB (o se hai già riavviato l'istanza e il log degli errori sql prevede un tempo di recupero di 24 ore), quindi chiudere i servizi SQL, eliminare i file MDF e LDF dal disco, avviare SQL, rilasciare il database (fantasma) e ripristina dal backup.
Ovviamente tenteresti solo che se si trattasse di un database di elaborazione back-end con cui gli utenti non interagiscono.