Przede wszystkim sprawdź dziennik błędów SQL, aby sprawdzić, czy rzeczywiście osiągnął maksymalny rozmiar dziennika. Jeśli tak, zapytanie nie ma szans na zakończenie, prawdopodobnie jest już w stanie wycofania.
Nawet jeśli tak jest, zawsze wolę zabić spid ręcznie (użyj sp_who2
lub, sp_WhoIsActive
aby znaleźć spid, a następnie zrób coś kill 59
innego). Nie możesz również sprawdzić stanu wycofania, chyba że zrobisz jawny ZABÓJ, zobacz ten powiązany wątek .
Ponieważ jest to usunięcie, a nie aktualizacja lub wstawka, możesz mieć szczęście i stwierdzić, że natychmiast się wycofuje. Jeśli nie, cofnięcie może zająć tak długo (lub dłużej), jak w przypadku tego miejsca.
Aby zobaczyć stan wycofania, użyj
kill 59 with statusonly
Niestety często stwierdziłem, że nie pokazuje nic użytecznego, a jedynie „0% ukończenia”. W takim przypadku będziesz musiał użyć sp_who2
IO i procesora, aby zobaczyć, czy nadal coś robi.
Jeśli chodzi o ponowne uruchomienie, jest to poważne ryzyko. Jeśli spid aktywnie się wycofuje (procesor i operacje wejścia / wyjścia zmieniają się), wówczas ponowne uruchomienie SQL spowoduje całkowite wyłączenie bazy danych do czasu całkowitego wycofania (godziny i godziny). Ale jeśli procesor i we / wy się nie poruszają, może to od razu wyczyścić. Tak czy inaczej, jest to ryzyko.
Jedna ostatnia opcja, jeśli sprawy są szczególnie tragiczne: jeśli masz kopię zapasową tuż przed rozpoczęciem usuwania (a nie było innych aktualizacji bazy danych ) , najszybszym sposobem na odzyskanie może być po prostu usunięcie bazy danych, ponowne uruchomienie SQL i przywracanie z kopii zapasowej.
Jeśli nie możesz upuścić bazy danych (lub jeśli zrestartowałeś już instancję, a dziennik błędów sql przewiduje 24-godzinny czas odzyskiwania), zamknij usługi SQL, usuń pliki MDF i LDF z dysku, uruchom SQL, upuść (ghost) baza danych i przywróć z kopii zapasowej.
Oczywiście spróbowałbyś tego, gdyby była to baza danych przetwarzania zaplecza, z którą użytkownicy nie wchodziliby w interakcję.