Перш за все, перевірте журнал помилок SQL, щоб побачити, чи дійсно він відповідає максимальному розміру для журналу. Якщо так, то запит не сподівається на завершення, він, ймовірно, вже знаходиться в стані відката.
Навіть якщо він є, я завжди вважаю за краще вбивати павука вручну (використовувати sp_who2
або sp_WhoIsActive
знайти павука, а потім робити те kill 59
чи інше). Ви також не можете перевірити стан відкату, якщо ви не зробите явний KILL, дивіться цю пов’язану тему .
Оскільки це видалення, а не оновлення чи вставка, можливо, вам пощастить і виявите, що воно негайно скачується назад. Якщо ні, то може зайняти стільки часу (або довше), як і раніше, щоб дійти до цієї точки.
Щоб побачити стан відкату, використовуйте
kill 59 with statusonly
На жаль, я виявив, що це часто не показує нічого корисного, лише "0% завершено". У такому випадку вам доведеться використовувати sp_who2
та переглядати IO та процесор, щоб побачити, чи все ще щось робить.
Що стосується перезавантаження, це є серйозним ризиком. Якщо павук активно відкочується (зміниться процесор і IO), то перезапуск SQL буде повністю відключати базу даних в автономному режимі до повного завершення відкату (години та години). Але якщо CPU та IO не рухаються, то насправді це може бути зрозуміло відразу. У будь-якому випадку це ризик.
Один останній варіант, якщо справи особливо страшні: якщо у вас є резервна копія безпосередньо перед початком видалення (а інших оновлень не було) , то найшвидшим способом відновлення може бути просто скинути БД, перезапустити SQL та відновлення з резервного копіювання.
Якщо ви не можете скинути БД (або якщо ви вже перезапустили екземпляр, а файл помилок sql передбачає 24-годинний час відновлення), тоді вимкніть служби SQL, видаліть з диска файли MDF та LDF, запустіть SQL, скиньте базу даних (ghost) та відновлення з резервного копіювання.
Очевидно, ви б спробували лише це, якби це резервна база даних, з якою користувачі не взаємоділи.