Как откатить все коммиты, выполненные в Oracle БД - PullRequest
0 голосов
/ 04 августа 2020

Недавно я сделал ошибку, что все таблицы в моей базе данных oracle были отброшены (запущена команда drop из SQL Developer tool) в последовательности всех транзакций, не зная мне, что я отбрасывал таблицы не по адресу. база данных. Каждый раз, когда я отбрасывал набор таблиц, я совершал операции. К тому времени, когда я понял, что я отбросил таблицы не в той БД, я слишком поздно откатился, так как откатывалась только последняя операция. Я также поискал в Интернете и обнаружил, что SavePoints является разрешением, но у меня не было настроенных точек сохранения. У меня были резервные копии всех таблиц, сделанные 2 дня назад, поэтому я запускал сценарии оттуда и вносил потерянные изменения за последние 2 дня. Есть ли другой способ вернуть состояние БД? Однако я взял за правило создавать точки сохранения при выполнении таких операций. Но я все еще в замешательстве. Тот, кто не знает о точках сохранения, потеряет все данные.

1 Ответ

4 голосов
/ 04 августа 2020

Операторы DDL, такие как drop, выполняют неявную фиксацию, поэтому вы не можете rollback отменить удаление таблицы. Точка сохранения также не поможет вам, поскольку она позволяет go вернуться к более ранней точке в текущей транзакции.

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

flashback table <<table name>> to before drop

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

create restore point <<your restore point name>>

<<run your script>>

flashback database to restore point <<your restore point name>>
...