Сегодня у меня была ситуация, когда я хотел отменить обновление таблицы и нескольких индексов и немедленно восстановить базу данных из резервной копии.
Я выполнил команду kill, чтобы убить SPID обновления. Затем я произвел убийство только со статусом, и ожидал откат на несколько десятков тысяч секунд. Мне нужно было восстановить базу данных в спешке (поэтому я не беспокоился об откате), но вы не можете убить SPID, который откатывается (насколько я знаю), или восстановить базу данных с невыполненными подключениями.
Я решил остановить службы sql, удалить физические файлы базы данных mdf и ldf, запустить службы sql, которые показывают базу данных в подозрительном состоянии. Потом восстановил базу данных.
Есть ли более контролируемый / разумный способ подойти к этой ситуации?
Правильно - вы не можете убить SPID, который откатывается, так как база данных будет переведена в транзакционно несовместимое состояние (и, возможно, даже структурно несовместимо).
Итак, простой ответ заключается в том, что нет никакого способа предотвратить откат SPID после его запуска, кроме как сделать что-то радикальное.
Из вашей ситуации сложно выбраться, потому что выбора действительно нет. Даже если вы откажетесь от SQL Server, база данных будет восстановлена после сбоя, и вам нужно будет дождаться его завершения.
Несколько возможных способов решения этой проблемы:
В основном нет хорошо решение, когда вы находитесь в этом состоянии, за исключением того, что откат завершится. Я действительно не решаюсь оправдать то, что вы сделали, потому что очень многие люди, не имеющие опыта, могут попробовать это и погрузиться в действительно глубокую воду.
Спасибо
Я думаю, вы сделали это наиболее эффективным способом, однако я бы, вероятно, переименовал файлы вместо того, чтобы удалять их, на всякий случай. Или переместите их в другое место хранения.