Назад | Перейти на главную страницу

Правильная процедура предотвращения отката спида

Сегодня у меня была ситуация, когда я хотел отменить обновление таблицы и нескольких индексов и немедленно восстановить базу данных из резервной копии.

Я выполнил команду kill, чтобы убить SPID обновления. Затем я произвел убийство только со статусом, и ожидал откат на несколько десятков тысяч секунд. Мне нужно было восстановить базу данных в спешке (поэтому я не беспокоился об откате), но вы не можете убить SPID, который откатывается (насколько я знаю), или восстановить базу данных с невыполненными подключениями.

Я решил остановить службы sql, удалить физические файлы базы данных mdf и ldf, запустить службы sql, которые показывают базу данных в подозрительном состоянии. Потом восстановил базу данных.

Есть ли более контролируемый / разумный способ подойти к этой ситуации?

Правильно - вы не можете убить SPID, который откатывается, так как база данных будет переведена в транзакционно несовместимое состояние (и, возможно, даже структурно несовместимо).

Итак, простой ответ заключается в том, что нет никакого способа предотвратить откат SPID после его запуска, кроме как сделать что-то радикальное.

Из вашей ситуации сложно выбраться, потому что выбора действительно нет. Даже если вы откажетесь от SQL Server, база данных будет восстановлена ​​после сбоя, и вам нужно будет дождаться его завершения.

Несколько возможных способов решения этой проблемы:

  1. Измените обновление, чтобы оно происходило небольшими партиями, чтобы в будущем у вас не было такого же отката монстров (вероятно, гораздо проще сказать, чем сделать)
  2. Восстановите базу данных под другим именем. Дождитесь завершения отката, затем отбросьте исходную базу данных и переименуйте восстановленную.
  3. Что ты сделал. В огромный риск заключается в том, что ваша резервная копия повреждена, а затем вы потеряли все, или возникнет другая странная проблема, и вы находитесь в худшем состоянии, чем раньше. Также требуется, чтобы служба SQL была остановлена ​​и перезапущена.

В основном нет хорошо решение, когда вы находитесь в этом состоянии, за исключением того, что откат завершится. Я действительно не решаюсь оправдать то, что вы сделали, потому что очень многие люди, не имеющие опыта, могут попробовать это и погрузиться в действительно глубокую воду.

Спасибо

Я думаю, вы сделали это наиболее эффективным способом, однако я бы, вероятно, переименовал файлы вместо того, чтобы удалять их, на всякий случай. Или переместите их в другое место хранения.