Задать вопрос
@KTG

(Oracle) Возможен ли откат после COMMIT (UNDO Segment?)?

Вычитал что есть некий UNDO-сегмент, но не могу найти информацию как с ним работать.

Нужно обновить на боевой базе данные в 3 таблицах по большой выборке.
Хотелось бы иметь возможность отката.

Просто с копии восстановить - нельзя, т.к. после commit могут быть и другие изменения.
Разумеется ведется табличка истории изменений, по идее можно будет написать скрипт отката к предыдущим значениям.

Но UNDO сегмент не даёт покоя. Раз уж есть подобный механизм, который вроде как еще и учитывает изменения после сохранения данных перед транзакцией.

Пяток ораклистов из контакт-листа опросил - вытаращили глаза, говорят первый раз слышим.
  • Вопрос задан
  • 2165 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 2
Lorien_Elf
@Lorien_Elf
Keep calm and drop database
Есть Flashback. Много чего умеет, в том числе Flashback Transaction. Возможно вам подойдет.
Ответ написан
saboteur_kiev
@saboteur_kiev
software engineer
undo нужен самому ораклу как раз для того, чтобы хранить все изменения до Commit, и следовательно было можно их откатить до commit-а, либо в случае если система грохнулась (опять таки до коммита).

В оракле есть arclogs, то есть обычный журнал транзакций. Используя его и используя бэкап, можно восстановить копию и докатить ее до определенного состояния используя эти arclogs (зависит от объема и когда был сделан бэкап).

В вашем случае действительно flashback может помочь.
Переводите Оракл в flasback режим, создаете grp (guarantee restore point) и выполняете любые действия. Если что не так - flashback to restore point.

Перевод оракл в flashback и обратно и флешбек на рестор поинт, в отличие от восстановления из бэкапа, очень быстрая операция.
А создание GRP вообще мгновенно и онлайн.
Но в режиме flashback генерятся дополнительные логи.

Обычно flashback удобен в девелопмент базе, или во время релиза.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы