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

По ошибке запустил оператор обновления для таблицы

Мы по ошибке запустили оператор обновления для одного из наших столбцов в таблице SQL. У нас нет резервной копии таблицы или базы данных. Может ли кто-нибудь помочь нам получить значения столбца перед обновлением.

Сожалею, что вы только что преподали себе урок.

Есть ли способ повторно получить данные из других источников, возможно, из файлов журнала? Часто мы ведем журналы, в которых записывается, когда и кем были внесены изменения; такая вещь поможет вам найти последнюю ценность чего-либо.

Для справки в будущем, когда я пишу инструкцию UPDATE, я всегда сначала набираю

UPDATE mytable SET qq=ww WHERE {where clause}

То есть я буквально набираю «qq = ww», что должно быть недопустимым, и набираю фактическое предложение WHERE перед тем, как набирать что-либо, что могло быть действительно выполнено. Я думаю, что обратный порядок пунктов - это ошибка дизайна в языке SQL.

Если у вас все еще есть текущий файл журнала, возможно, можно будет восстановить данные с помощью стороннего инструмента. Операторы UPDATE в большинстве случаев полностью регистрируются. Вот пара инструментов, на которые стоит обратить внимание:

Журнал Apex SQL от ApexSQL

Спасение журнала SQL от RedGate

Если вы работали в простой модели восстановления без резервных копий, затем выполнили оператор UPDATE, а затем сделали резервную копию, вы потеряли возможность восстановления из текущего журнала. В простой модели восстановления файл журнала усекается при создании резервной копии.

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

Это заставляет остановиться и задуматься, как минимум. Я видел, как люди делали это в транзакции, а затем немедленно фиксировали ее, не проверяя, право и не только успешный.

Кроме того, еще одна причина делать подобные вещи в транзакции.