2009-06-13 3 views
0

Я обновил свою базу данных с помощью этого запроса:Нужна помощь в SQL Откат транзакции

UPDATE suppliers SET contactname = 'Dirk Lucky' 

Так что все строки в таблице поставщиков имеют имя контактного лица: «Дирк Лаки.»

Как я могу отменить эту транзакцию? Я хочу восстановить столбец имени контакта в таблице поставщиков.

Спасибо, Программиста

ответ

4

Похоже, ваша сделка уже совершена. Вы больше не можете откатываться.

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

4

Если у вас есть полный режим входа в FULL, вы можете сделать восстановление из журнала. Есть отличная запись в блоге об этом here.

Если вы этого не сделаете, я серьезно надеюсь, что у вас есть резервная копия.

На будущем: Когда я делаю обновление, я использую следующий синтаксис:

SELECT * 
--UPDATE a SET col = 'val' 
FROM myTable a 
WHERE id = 1234 

Таким образом, вы можете увидеть, что вы выбираете для обновления первого. Затем, когда вы, наконец, будете готовы к обновлению, вы просто выберите из UPDATE и запустите запрос. Я поймал себя много раз с этим трюком. Он также работает с удалениями, так что это бонус.

+1

Хорошие баллы здесь - я делаю то же самое. Кроме того, я также переношу код в начало транзакции и фиксирую его после того, как вижу, что соответствующее количество строк обновлено, но, возможно, я просто параноик. –

0

Надеюсь, ваша база данных использует полную модель восстановления. Если это так:

Сначала вам нужно сделать резервную копию журнала транзакций.

Затем вы можете выполнить восстановление базы данных из своей полной резервной копии + дифференциальных данных.

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

"How to Restore to a point in time" См

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

Надеюсь, что это имеет смысл, но дайте мне знать, если вам нужна помощь.

Смежные вопросы